regern c_src
[nit.git] / c_src / nit__parser.sep.4.c
index afb4293..a362a62 100644 (file)
 #include "nit__parser.sep.0.h"
-/* method parser#ReduceAction136#action for (self: ReduceAction136, Parser) */
-void nit__parser___nit__parser__ReduceAction136___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction185#action for (self: ReduceAction185, Parser) */
+void nit__parser___nit__parser__ReduceAction185___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_ptypenode2 /* var ptypenode2: nullable Object */;
-short int var6 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tdotnode3 /* var tdotnode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var_tkwasnode4 /* var tkwasnode4: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var_ptypenode5 /* var ptypenode5: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var16 /* : ACastAsExternCall */;
-val* var_pexterncallnode1 /* var pexterncallnode1: nullable ACastAsExternCall */;
-long var17 /* : Int */;
-long var18 /* : Int */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var14 /* : ACallExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var4;
+var_nodearraylist3 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var5;
-var_ptypenode2 = var_nodearraylist1;
-/* <var_ptypenode2:nullable Object> isa nullable AType */
-cltype = type_nullable__nit__AType.color;
-idtype = type_nullable__nit__AType.id;
-if(var_ptypenode2 == NULL) {
-var6 = 1;
-} else {
-if(cltype >= var_ptypenode2->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_ptypenode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4960);
-show_backtrace(1);
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_tdotnode3 = var_nodearraylist2;
-/* <var_tdotnode3:nullable Object> isa nullable TDot */
-cltype8 = type_nullable__nit__TDot.color;
-idtype9 = type_nullable__nit__TDot.id;
-if(var_tdotnode3 == NULL) {
+var_nodearraylist1 = var6;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
 var7 = 1;
 } else {
-if(cltype8 >= var_tdotnode3->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_tdotnode3->type->type_table[cltype8] == idtype9;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4962);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5367);
+fatal_exit(1);
 }
-var_tkwasnode4 = var_nodearraylist3;
-/* <var_tkwasnode4:nullable Object> isa nullable TKwas */
-cltype11 = type_nullable__nit__TKwas.color;
-idtype12 = type_nullable__nit__TKwas.id;
-if(var_tkwasnode4 == NULL) {
-var10 = 1;
+var_tidnode3 = var_nodearraylist6;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype9 = type_nullable__nit__TId.color;
+idtype10 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var8 = 1;
 } else {
-if(cltype11 >= var_tkwasnode4->type->table_size) {
-var10 = 0;
+if(cltype9 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var8 = 0;
 } else {
-var10 = var_tkwasnode4->type->type_table[cltype11] == idtype12;
+var8 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4964);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5369);
+fatal_exit(1);
 }
-var_ptypenode5 = var_nodearraylist5;
-/* <var_ptypenode5:nullable Object> isa nullable AType */
-cltype14 = type_nullable__nit__AType.color;
-idtype15 = type_nullable__nit__AType.id;
-if(var_ptypenode5 == NULL) {
-var13 = 1;
+var_pexprsnode4 = var_nodearraylist7;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype12 = type_nullable__nit__AExprs.color;
+idtype13 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var11 = 1;
 } else {
-if(cltype14 >= var_ptypenode5->type->table_size) {
-var13 = 0;
+if(cltype12 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var11 = 0;
 } else {
-var13 = var_ptypenode5->type->type_table[cltype14] == idtype15;
+var11 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype12] == idtype13;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4966);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5371);
+fatal_exit(1);
 }
-var16 = NEW_nit__ACastAsExternCall(&type_nit__ACastAsExternCall);
+var14 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
 {
-nit__parser_prod___ACastAsExternCall___init_acastasexterncall(var16, var_ptypenode2, var_tdotnode3, var_tkwasnode4, var_ptypenode5); /* Direct call parser_prod#ACastAsExternCall#init_acastasexterncall on <var16:ACastAsExternCall>*/
+nit__parser_prod___ACallExpr___init_acallexpr(var14, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var14:ACallExpr>*/
 }
-var_pexterncallnode1 = var16;
-var_node_list = var_pexterncallnode1;
-var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction136> */
+var_pexprnode1 = var14;
+var_node_list = var_pexprnode1;
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction185> */
 {
-var18 = nit___nit__Parser___go_to(var_p, var17);
+var16 = nit___nit__Parser___go_to(var_p, var15);
 }
 {
-nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction137#action for (self: ReduceAction137, Parser) */
-void nit__parser___nit__parser__ReduceAction137___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction187#action for (self: ReduceAction187, Parser) */
+void nit__parser___nit__parser__ReduceAction187___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var5 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var6 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var7 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var9 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_ptypenode2 /* var ptypenode2: nullable Object */;
-short int var10 /* : Bool */;
+val* var2 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var3 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwasnode3 /* var tkwasnode3: nullable Object */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
-val* var_tkwnullablenode4 /* var tkwnullablenode4: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-val* var17 /* : AAsNullableExternCall */;
-val* var_pexterncallnode1 /* var pexterncallnode1: nullable AAsNullableExternCall */;
-long var18 /* : Int */;
-long var19 /* : Int */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var7 /* : ACallExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
+long var8 /* : Int */;
+long var9 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist9 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist8 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist7 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist6 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist5 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var6;
+var_node_list = ((val*)NULL);
 {
-var7 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var7;
+var_nodearraylist2 = var;
 {
-var8 = nit___nit__Parser___pop(var_p);
+var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var8;
+var_nodearraylist1 = var1;
+var2 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var9 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var9;
-var_ptypenode2 = var_nodearraylist1;
-/* <var_ptypenode2:nullable Object> isa nullable AType */
-cltype = type_nullable__nit__AType.color;
-idtype = type_nullable__nit__AType.id;
-if(var_ptypenode2 == NULL) {
-var10 = 1;
-} else {
-if(cltype >= var_ptypenode2->type->table_size) {
-var10 = 0;
-} else {
-var10 = var_ptypenode2->type->type_table[cltype] == idtype;
-}
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var2); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var2:AImplicitSelfExpr>*/
 }
-if (unlikely(!var10)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4992);
-show_backtrace(1);
-}
-var_tkwasnode3 = var_nodearraylist3;
-/* <var_tkwasnode3:nullable Object> isa nullable TKwas */
-cltype12 = type_nullable__nit__TKwas.color;
-idtype13 = type_nullable__nit__TKwas.id;
-if(var_tkwasnode3 == NULL) {
-var11 = 1;
+var_pexprnode2 = var2;
+var_tidnode3 = var_nodearraylist1;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var3 = 1;
 } else {
-if(cltype12 >= var_tkwasnode3->type->table_size) {
-var11 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var3 = 0;
 } else {
-var11 = var_tkwasnode3->type->type_table[cltype12] == idtype13;
+var3 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var11)) {
+if (unlikely(!var3)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4994);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5390);
+fatal_exit(1);
 }
-var_tkwnullablenode4 = var_nodearraylist7;
-/* <var_tkwnullablenode4:nullable Object> isa nullable TKwnullable */
-cltype15 = type_nullable__nit__TKwnullable.color;
-idtype16 = type_nullable__nit__TKwnullable.id;
-if(var_tkwnullablenode4 == NULL) {
-var14 = 1;
+var_pexprsnode4 = var_nodearraylist2;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype5 = type_nullable__nit__AExprs.color;
+idtype6 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var4 = 1;
 } else {
-if(cltype15 >= var_tkwnullablenode4->type->table_size) {
-var14 = 0;
+if(cltype5 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var4 = 0;
 } else {
-var14 = var_tkwnullablenode4->type->type_table[cltype15] == idtype16;
+var4 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype5] == idtype6;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 4996);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5392);
+fatal_exit(1);
 }
-var17 = NEW_nit__AAsNullableExternCall(&type_nit__AAsNullableExternCall);
+var7 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
 {
-nit__parser_prod___AAsNullableExternCall___init_aasnullableexterncall(var17, var_ptypenode2, var_tkwasnode3, var_tkwnullablenode4); /* Direct call parser_prod#AAsNullableExternCall#init_aasnullableexterncall on <var17:AAsNullableExternCall>*/
+nit__parser_prod___ACallExpr___init_acallexpr(var7, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var7:ACallExpr>*/
 }
-var_pexterncallnode1 = var17;
-var_node_list = var_pexterncallnode1;
-var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction137> */
+var_pexprnode1 = var7;
+var_node_list = var_pexprnode1;
+var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction187> */
 {
-var19 = nit___nit__Parser___go_to(var_p, var18);
+var9 = nit___nit__Parser___go_to(var_p, var8);
 }
 {
-nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction138#action for (self: ReduceAction138, Parser) */
-void nit__parser___nit__parser__ReduceAction138___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction188#action for (self: ReduceAction188, Parser) */
+void nit__parser___nit__parser__ReduceAction188___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_ptypenode2 /* var ptypenode2: nullable Object */;
-short int var6 /* : Bool */;
+val* var3 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var4 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwasnode3 /* var tkwasnode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var_tkwnullablenode4 /* var tkwnullablenode4: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var13 /* : AAsNullableExternCall */;
-val* var_pexterncallnode1 /* var pexterncallnode1: nullable AAsNullableExternCall */;
-long var14 /* : Int */;
-long var15 /* : Int */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+val* var8 /* : ACallExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
+long var9 /* : Int */;
+long var10 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist2 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist1 = var2;
+var3 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var3 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var3); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var3:AImplicitSelfExpr>*/
 }
-var_nodearraylist3 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var5;
-var_ptypenode2 = var_nodearraylist1;
-/* <var_ptypenode2:nullable Object> isa nullable AType */
-cltype = type_nullable__nit__AType.color;
-idtype = type_nullable__nit__AType.id;
-if(var_ptypenode2 == NULL) {
-var6 = 1;
-} else {
-if(cltype >= var_ptypenode2->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_ptypenode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5017);
-show_backtrace(1);
-}
-var_tkwasnode3 = var_nodearraylist3;
-/* <var_tkwasnode3:nullable Object> isa nullable TKwas */
-cltype8 = type_nullable__nit__TKwas.color;
-idtype9 = type_nullable__nit__TKwas.id;
-if(var_tkwasnode3 == NULL) {
-var7 = 1;
-} else {
-if(cltype8 >= var_tkwasnode3->type->table_size) {
-var7 = 0;
-} else {
-var7 = var_tkwasnode3->type->type_table[cltype8] == idtype9;
+var_pexprnode2 = var3;
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var4 = 1;
+} else {
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var4 = 0;
+} else {
+var4 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5019);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5412);
+fatal_exit(1);
 }
-var_tkwnullablenode4 = var_nodearraylist5;
-/* <var_tkwnullablenode4:nullable Object> isa nullable TKwnullable */
-cltype11 = type_nullable__nit__TKwnullable.color;
-idtype12 = type_nullable__nit__TKwnullable.id;
-if(var_tkwnullablenode4 == NULL) {
-var10 = 1;
+var_pexprsnode4 = var_nodearraylist3;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype6 = type_nullable__nit__AExprs.color;
+idtype7 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var5 = 1;
 } else {
-if(cltype11 >= var_tkwnullablenode4->type->table_size) {
-var10 = 0;
+if(cltype6 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var5 = 0;
 } else {
-var10 = var_tkwnullablenode4->type->type_table[cltype11] == idtype12;
+var5 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype6] == idtype7;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5021);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5414);
+fatal_exit(1);
 }
-var13 = NEW_nit__AAsNullableExternCall(&type_nit__AAsNullableExternCall);
+var8 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
 {
-nit__parser_prod___AAsNullableExternCall___init_aasnullableexterncall(var13, var_ptypenode2, var_tkwasnode3, var_tkwnullablenode4); /* Direct call parser_prod#AAsNullableExternCall#init_aasnullableexterncall on <var13:AAsNullableExternCall>*/
+nit__parser_prod___ACallExpr___init_acallexpr(var8, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var8:ACallExpr>*/
 }
-var_pexterncallnode1 = var13;
-var_node_list = var_pexterncallnode1;
-var14 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction138> */
+var_pexprnode1 = var8;
+var_node_list = var_pexprnode1;
+var9 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction188> */
 {
-var15 = nit___nit__Parser___go_to(var_p, var14);
+var10 = nit___nit__Parser___go_to(var_p, var9);
 }
 {
-nit___nit__Parser___push(var_p, var15, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var10, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction139#action for (self: ReduceAction139, Parser) */
-void nit__parser___nit__parser__ReduceAction139___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction189#action for (self: ReduceAction189, Parser) */
+void nit__parser___nit__parser__ReduceAction189___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist11 /* var nodearraylist11: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist10 /* var nodearraylist10: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var5 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var6 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var7 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var9 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var10 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var11 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_ptypenode2 /* var ptypenode2: nullable Object */;
-short int var12 /* : Bool */;
+val* var4 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwasnode3 /* var tkwasnode3: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var_tkwnotnode4 /* var tkwnotnode4: nullable Object */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var_tkwnullablenode5 /* var tkwnullablenode5: nullable Object */;
-short int var19 /* : Bool */;
-int cltype20;
-int idtype21;
-val* var22 /* : AAsNotNullableExternCall */;
-val* var_pexterncallnode1 /* var pexterncallnode1: nullable AAsNotNullableExternCall */;
-long var23 /* : Int */;
-long var24 /* : Int */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var9 /* : ACallExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
+long var10 /* : Int */;
+long var11 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist11 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist10 = var2;
+var_nodearraylist2 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist9 = var3;
+var_nodearraylist1 = var3;
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var4 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-var_nodearraylist8 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
+var_pexprnode2 = var4;
+var_tidnode3 = var_nodearraylist3;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var5 = 1;
+} else {
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var5 = 0;
+} else {
+var5 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist7 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var5)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5435);
+fatal_exit(1);
 }
-var_nodearraylist5 = var7;
-{
-var8 = nit___nit__Parser___pop(var_p);
+var_pexprsnode4 = var_nodearraylist4;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype7 = type_nullable__nit__AExprs.color;
+idtype8 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var6 = 1;
+} else {
+if(cltype7 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var6 = 0;
+} else {
+var6 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype7] == idtype8;
+}
+}
+if (unlikely(!var6)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5437);
+fatal_exit(1);
 }
-var_nodearraylist4 = var8;
+var9 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
 {
-var9 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___ACallExpr___init_acallexpr(var9, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var9:ACallExpr>*/
 }
-var_nodearraylist3 = var9;
+var_pexprnode1 = var9;
+var_node_list = var_pexprnode1;
+var10 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction189> */
 {
-var10 = nit___nit__Parser___pop(var_p);
+var11 = nit___nit__Parser___go_to(var_p, var10);
 }
-var_nodearraylist2 = var10;
 {
-var11 = nit___nit__Parser___pop(var_p);
+nit___nit__Parser___push(var_p, var11, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
-var_nodearraylist1 = var11;
-var_ptypenode2 = var_nodearraylist1;
-/* <var_ptypenode2:nullable Object> isa nullable AType */
-cltype = type_nullable__nit__AType.color;
-idtype = type_nullable__nit__AType.id;
-if(var_ptypenode2 == NULL) {
-var12 = 1;
-} else {
-if(cltype >= var_ptypenode2->type->table_size) {
-var12 = 0;
-} else {
-var12 = var_ptypenode2->type->type_table[cltype] == idtype;
+RET_LABEL:;
+}
+/* method parser#ReduceAction191#action for (self: ReduceAction191, Parser) */
+void nit__parser___nit__parser__ReduceAction191___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var1 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var2 /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_pqualifiednode2 /* var pqualifiednode2: nullable Object */;
+short int var3 /* : Bool */;
+int cltype;
+int idtype;
+val* var_tkwsupernode3 /* var tkwsupernode3: nullable Object */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var10 /* : ASuperExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ASuperExpr */;
+long var11 /* : Int */;
+long var12 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist3 = var;
+{
+var1 = nit___nit__Parser___pop(var_p);
 }
-if (unlikely(!var12)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5048);
-show_backtrace(1);
+var_nodearraylist2 = var1;
+{
+var2 = nit___nit__Parser___pop(var_p);
 }
-var_tkwasnode3 = var_nodearraylist3;
-/* <var_tkwasnode3:nullable Object> isa nullable TKwas */
-cltype14 = type_nullable__nit__TKwas.color;
-idtype15 = type_nullable__nit__TKwas.id;
-if(var_tkwasnode3 == NULL) {
-var13 = 1;
+var_nodearraylist1 = var2;
+var_pqualifiednode2 = var_nodearraylist1;
+/* <var_pqualifiednode2:nullable Object> isa nullable AQualified */
+cltype = type_nullable__nit__AQualified.color;
+idtype = type_nullable__nit__AQualified.id;
+if(var_pqualifiednode2 == NULL) {
+var3 = 1;
 } else {
-if(cltype14 >= var_tkwasnode3->type->table_size) {
-var13 = 0;
+if(cltype >= (((long)var_pqualifiednode2&3)?type_info[((long)var_pqualifiednode2&3)]:var_pqualifiednode2->type)->table_size) {
+var3 = 0;
 } else {
-var13 = var_tkwasnode3->type->type_table[cltype14] == idtype15;
+var3 = (((long)var_pqualifiednode2&3)?type_info[((long)var_pqualifiednode2&3)]:var_pqualifiednode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var3)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5050);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5456);
+fatal_exit(1);
 }
-var_tkwnotnode4 = var_nodearraylist7;
-/* <var_tkwnotnode4:nullable Object> isa nullable TKwnot */
-cltype17 = type_nullable__nit__TKwnot.color;
-idtype18 = type_nullable__nit__TKwnot.id;
-if(var_tkwnotnode4 == NULL) {
-var16 = 1;
+var_tkwsupernode3 = var_nodearraylist2;
+/* <var_tkwsupernode3:nullable Object> isa nullable TKwsuper */
+cltype5 = type_nullable__nit__TKwsuper.color;
+idtype6 = type_nullable__nit__TKwsuper.id;
+if(var_tkwsupernode3 == NULL) {
+var4 = 1;
 } else {
-if(cltype17 >= var_tkwnotnode4->type->table_size) {
-var16 = 0;
+if(cltype5 >= (((long)var_tkwsupernode3&3)?type_info[((long)var_tkwsupernode3&3)]:var_tkwsupernode3->type)->table_size) {
+var4 = 0;
 } else {
-var16 = var_tkwnotnode4->type->type_table[cltype17] == idtype18;
+var4 = (((long)var_tkwsupernode3&3)?type_info[((long)var_tkwsupernode3&3)]:var_tkwsupernode3->type)->type_table[cltype5] == idtype6;
 }
 }
-if (unlikely(!var16)) {
+if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5052);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5458);
+fatal_exit(1);
 }
-var_tkwnullablenode5 = var_nodearraylist9;
-/* <var_tkwnullablenode5:nullable Object> isa nullable TKwnullable */
-cltype20 = type_nullable__nit__TKwnullable.color;
-idtype21 = type_nullable__nit__TKwnullable.id;
-if(var_tkwnullablenode5 == NULL) {
-var19 = 1;
+var_pexprsnode4 = var_nodearraylist3;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype8 = type_nullable__nit__AExprs.color;
+idtype9 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var7 = 1;
 } else {
-if(cltype20 >= var_tkwnullablenode5->type->table_size) {
-var19 = 0;
+if(cltype8 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var7 = 0;
 } else {
-var19 = var_tkwnullablenode5->type->type_table[cltype20] == idtype21;
+var7 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var19)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5054);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5460);
+fatal_exit(1);
 }
-var22 = NEW_nit__AAsNotNullableExternCall(&type_nit__AAsNotNullableExternCall);
+var10 = NEW_nit__ASuperExpr(&type_nit__ASuperExpr);
 {
-nit__parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(var22, var_ptypenode2, var_tkwasnode3, var_tkwnotnode4, var_tkwnullablenode5); /* Direct call parser_prod#AAsNotNullableExternCall#init_aasnotnullableexterncall on <var22:AAsNotNullableExternCall>*/
+nit__parser_prod___ASuperExpr___init_asuperexpr(var10, var_pqualifiednode2, var_tkwsupernode3, var_pexprsnode4); /* Direct call parser_prod#ASuperExpr#init_asuperexpr on <var10:ASuperExpr>*/
 }
-var_pexterncallnode1 = var22;
-var_node_list = var_pexterncallnode1;
-var23 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction139> */
+var_pexprnode1 = var10;
+var_node_list = var_pexprnode1;
+var11 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction191> */
 {
-var24 = nit___nit__Parser___go_to(var_p, var23);
+var12 = nit___nit__Parser___go_to(var_p, var11);
 }
 {
-nit___nit__Parser___push(var_p, var24, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var12, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction140#action for (self: ReduceAction140, Parser) */
-void nit__parser___nit__parser__ReduceAction140___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction192#action for (self: ReduceAction192, Parser) */
+void nit__parser___nit__parser__ReduceAction192___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_ptypenode2 /* var ptypenode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwasnode3 /* var tkwasnode3: nullable Object */;
+val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_tkwnotnode4 /* var tkwnotnode4: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var_tkwnullablenode5 /* var tkwnullablenode5: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var18 /* : AAsNotNullableExternCall */;
-val* var_pexterncallnode1 /* var pexterncallnode1: nullable AAsNotNullableExternCall */;
-long var19 /* : Int */;
-long var20 /* : Int */;
+val* var12 /* : AInitExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+long var13 /* : Int */;
+long var14 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist4 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist3 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
+var_nodearraylist2 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var7;
-var_ptypenode2 = var_nodearraylist1;
-/* <var_ptypenode2:nullable Object> isa nullable AType */
-cltype = type_nullable__nit__AType.color;
-idtype = type_nullable__nit__AType.id;
-if(var_ptypenode2 == NULL) {
-var8 = 1;
-} else {
-if(cltype >= var_ptypenode2->type->table_size) {
-var8 = 0;
-} else {
-var8 = var_ptypenode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var8)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5078);
-show_backtrace(1);
-}
-var_tkwasnode3 = var_nodearraylist3;
-/* <var_tkwasnode3:nullable Object> isa nullable TKwas */
-cltype10 = type_nullable__nit__TKwas.color;
-idtype11 = type_nullable__nit__TKwas.id;
-if(var_tkwasnode3 == NULL) {
-var9 = 1;
+var_nodearraylist1 = var4;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var5 = 1;
 } else {
-if(cltype10 >= var_tkwasnode3->type->table_size) {
-var9 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var5 = 0;
 } else {
-var9 = var_tkwasnode3->type->type_table[cltype10] == idtype11;
+var5 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5080);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5481);
+fatal_exit(1);
 }
-var_tkwnotnode4 = var_nodearraylist5;
-/* <var_tkwnotnode4:nullable Object> isa nullable TKwnot */
-cltype13 = type_nullable__nit__TKwnot.color;
-idtype14 = type_nullable__nit__TKwnot.id;
-if(var_tkwnotnode4 == NULL) {
-var12 = 1;
+var_tkwinitnode3 = var_nodearraylist4;
+/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
+cltype7 = type_nullable__nit__TKwinit.color;
+idtype8 = type_nullable__nit__TKwinit.id;
+if(var_tkwinitnode3 == NULL) {
+var6 = 1;
 } else {
-if(cltype13 >= var_tkwnotnode4->type->table_size) {
-var12 = 0;
+if(cltype7 >= (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->table_size) {
+var6 = 0;
 } else {
-var12 = var_tkwnotnode4->type->type_table[cltype13] == idtype14;
+var6 = (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->type_table[cltype7] == idtype8;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5082);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5483);
+fatal_exit(1);
 }
-var_tkwnullablenode5 = var_nodearraylist7;
-/* <var_tkwnullablenode5:nullable Object> isa nullable TKwnullable */
-cltype16 = type_nullable__nit__TKwnullable.color;
-idtype17 = type_nullable__nit__TKwnullable.id;
-if(var_tkwnullablenode5 == NULL) {
-var15 = 1;
+var_pexprsnode4 = var_nodearraylist5;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype10 = type_nullable__nit__AExprs.color;
+idtype11 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var9 = 1;
 } else {
-if(cltype16 >= var_tkwnullablenode5->type->table_size) {
-var15 = 0;
+if(cltype10 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var9 = 0;
 } else {
-var15 = var_tkwnullablenode5->type->type_table[cltype16] == idtype17;
+var9 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5084);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5485);
+fatal_exit(1);
 }
-var18 = NEW_nit__AAsNotNullableExternCall(&type_nit__AAsNotNullableExternCall);
+var12 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
 {
-nit__parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(var18, var_ptypenode2, var_tkwasnode3, var_tkwnotnode4, var_tkwnullablenode5); /* Direct call parser_prod#AAsNotNullableExternCall#init_aasnotnullableexterncall on <var18:AAsNotNullableExternCall>*/
+nit__parser_prod___AInitExpr___init_ainitexpr(var12, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var12:AInitExpr>*/
 }
-var_pexterncallnode1 = var18;
-var_node_list = var_pexterncallnode1;
-var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction140> */
+var_pexprnode1 = var12;
+var_node_list = var_pexprnode1;
+var13 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction192> */
 {
-var20 = nit___nit__Parser___go_to(var_p, var19);
+var14 = nit___nit__Parser___go_to(var_p, var13);
 }
 {
-nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var14, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction142#action for (self: ReduceAction142, Parser) */
-void nit__parser___nit__parser__ReduceAction142___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction193#action for (self: ReduceAction193, Parser) */
+void nit__parser___nit__parser__ReduceAction193___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tstringnode1 /* var tstringnode1: nullable Object */;
-long var2 /* : Int */;
-long var3 /* : Int */;
+val* var2 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+short int var3 /* : Bool */;
+int cltype;
+int idtype;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var7 /* : AInitExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+long var8 /* : Int */;
+long var9 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var1;
-var_tstringnode1 = var_nodearraylist1;
-var_node_list = var_tstringnode1;
-var2 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction142> */
+var2 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+{
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var2); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var2:AImplicitSelfExpr>*/
+}
+var_pexprnode2 = var2;
+var_tkwinitnode3 = var_nodearraylist1;
+/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
+cltype = type_nullable__nit__TKwinit.color;
+idtype = type_nullable__nit__TKwinit.id;
+if(var_tkwinitnode3 == NULL) {
+var3 = 1;
+} else {
+if(cltype >= (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->table_size) {
+var3 = 0;
+} else {
+var3 = (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->type_table[cltype] == idtype;
+}
+}
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5504);
+fatal_exit(1);
+}
+var_pexprsnode4 = var_nodearraylist2;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype5 = type_nullable__nit__AExprs.color;
+idtype6 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var4 = 1;
+} else {
+if(cltype5 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var4 = 0;
+} else {
+var4 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype5] == idtype6;
+}
+}
+if (unlikely(!var4)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5506);
+fatal_exit(1);
+}
+var7 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+{
+nit__parser_prod___AInitExpr___init_ainitexpr(var7, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var7:AInitExpr>*/
+}
+var_pexprnode1 = var7;
+var_node_list = var_pexprnode1;
+var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction193> */
 {
-var3 = nit___nit__Parser___go_to(var_p, var2);
+var9 = nit___nit__Parser___go_to(var_p, var8);
 }
 {
-nit___nit__Parser___push(var_p, var3, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction143#action for (self: ReduceAction143, Parser) */
-void nit__parser___nit__parser__ReduceAction143___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction194#action for (self: ReduceAction194, Parser) */
+void nit__parser___nit__parser__ReduceAction194___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwinnode2 /* var tkwinnode2: nullable Object */;
-short int var5 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tstringnode3 /* var tstringnode3: nullable Object */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-val* var9 /* : AInLanguage */;
-val* var_pinlanguagenode1 /* var pinlanguagenode1: nullable AInLanguage */;
-long var10 /* : Int */;
-long var11 /* : Int */;
+val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var13 /* : AInitExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+long var14 /* : Int */;
+long var15 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist3 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var_tkwinnode2 = var_nodearraylist1;
-/* <var_tkwinnode2:nullable Object> isa nullable TKwin */
-cltype = type_nullable__nit__TKwin.color;
-idtype = type_nullable__nit__TKwin.id;
-if(var_tkwinnode2 == NULL) {
-var5 = 1;
-} else {
-if(cltype >= var_tkwinnode2->type->table_size) {
-var5 = 0;
-} else {
-var5 = var_tkwinnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var5)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5116);
-show_backtrace(1);
+var_nodearraylist2 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
 }
-var_tstringnode3 = var_nodearraylist3;
-/* <var_tstringnode3:nullable Object> isa nullable TString */
-cltype7 = type_nullable__nit__TString.color;
-idtype8 = type_nullable__nit__TString.id;
-if(var_tstringnode3 == NULL) {
+var_nodearraylist1 = var5;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
 var6 = 1;
 } else {
-if(cltype7 >= var_tstringnode3->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var6 = 0;
 } else {
-var6 = var_tstringnode3->type->type_table[cltype7] == idtype8;
+var6 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5118);
-show_backtrace(1);
-}
-var9 = NEW_nit__AInLanguage(&type_nit__AInLanguage);
-{
-nit__parser_prod___AInLanguage___init_ainlanguage(var9, var_tkwinnode2, var_tstringnode3); /* Direct call parser_prod#AInLanguage#init_ainlanguage on <var9:AInLanguage>*/
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5528);
+fatal_exit(1);
 }
-var_pinlanguagenode1 = var9;
-var_node_list = var_pinlanguagenode1;
-var10 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction143> */
-{
-var11 = nit___nit__Parser___go_to(var_p, var10);
-}
-{
-nit___nit__Parser___push(var_p, var11, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+var_tkwinitnode3 = var_nodearraylist5;
+/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
+cltype8 = type_nullable__nit__TKwinit.color;
+idtype9 = type_nullable__nit__TKwinit.id;
+if(var_tkwinitnode3 == NULL) {
+var7 = 1;
+} else {
+if(cltype8 >= (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->table_size) {
+var7 = 0;
+} else {
+var7 = (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->type_table[cltype8] == idtype9;
 }
-RET_LABEL:;
 }
-/* method parser#ReduceAction144#action for (self: ReduceAction144, Parser) */
-void nit__parser___nit__parser__ReduceAction144___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_texterncodesegmentnode3 /* var texterncodesegmentnode3: nullable Object */;
-short int var2 /* : Bool */;
-int cltype;
-int idtype;
-val* var3 /* : AExternCodeBlock */;
-val* var4 /* : null */;
-val* var_pexterncodeblocknode1 /* var pexterncodeblocknode1: nullable AExternCodeBlock */;
-long var5 /* : Int */;
-long var6 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5530);
+fatal_exit(1);
 }
-var_nodearraylist1 = var1;
-var_texterncodesegmentnode3 = var_nodearraylist1;
-/* <var_texterncodesegmentnode3:nullable Object> isa nullable TExternCodeSegment */
-cltype = type_nullable__nit__TExternCodeSegment.color;
-idtype = type_nullable__nit__TExternCodeSegment.id;
-if(var_texterncodesegmentnode3 == NULL) {
-var2 = 1;
+var_pexprsnode4 = var_nodearraylist6;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype11 = type_nullable__nit__AExprs.color;
+idtype12 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var10 = 1;
 } else {
-if(cltype >= var_texterncodesegmentnode3->type->table_size) {
-var2 = 0;
+if(cltype11 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var10 = 0;
 } else {
-var2 = var_texterncodesegmentnode3->type->type_table[cltype] == idtype;
+var10 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var2)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5134);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5532);
+fatal_exit(1);
 }
-var3 = NEW_nit__AExternCodeBlock(&type_nit__AExternCodeBlock);
-var4 = NULL;
+var13 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
 {
-nit__parser_prod___AExternCodeBlock___init_aexterncodeblock(var3, var4, var_texterncodesegmentnode3); /* Direct call parser_prod#AExternCodeBlock#init_aexterncodeblock on <var3:AExternCodeBlock>*/
+nit__parser_prod___AInitExpr___init_ainitexpr(var13, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var13:AInitExpr>*/
 }
-var_pexterncodeblocknode1 = var3;
-var_node_list = var_pexterncodeblocknode1;
-var5 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction144> */
+var_pexprnode1 = var13;
+var_node_list = var_pexprnode1;
+var14 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction194> */
 {
-var6 = nit___nit__Parser___go_to(var_p, var5);
+var15 = nit___nit__Parser___go_to(var_p, var14);
 }
 {
-nit___nit__Parser___push(var_p, var6, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var15, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction145#action for (self: ReduceAction145, Parser) */
-void nit__parser___nit__parser__ReduceAction145___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction195#action for (self: ReduceAction195, Parser) */
+void nit__parser___nit__parser__ReduceAction195___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var3 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pinlanguagenode2 /* var pinlanguagenode2: nullable Object */;
-short int var3 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_texterncodesegmentnode3 /* var texterncodesegmentnode3: nullable Object */;
-short int var4 /* : Bool */;
-int cltype5;
-int idtype6;
-val* var7 /* : AExternCodeBlock */;
-val* var_pexterncodeblocknode1 /* var pexterncodeblocknode1: nullable AExternCodeBlock */;
-long var8 /* : Int */;
-long var9 /* : Int */;
+val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var14 /* : AInitExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var2;
-var_pinlanguagenode2 = var_nodearraylist1;
-/* <var_pinlanguagenode2:nullable Object> isa nullable AInLanguage */
-cltype = type_nullable__nit__AInLanguage.color;
-idtype = type_nullable__nit__AInLanguage.id;
-if(var_pinlanguagenode2 == NULL) {
-var3 = 1;
-} else {
-if(cltype >= var_pinlanguagenode2->type->table_size) {
-var3 = 0;
-} else {
-var3 = var_pinlanguagenode2->type->type_table[cltype] == idtype;
+var_nodearraylist5 = var2;
+{
+var3 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist4 = var3;
+{
+var4 = nit___nit__Parser___pop(var_p);
 }
-if (unlikely(!var3)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5151);
-show_backtrace(1);
+var_nodearraylist3 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
 }
-var_texterncodesegmentnode3 = var_nodearraylist2;
-/* <var_texterncodesegmentnode3:nullable Object> isa nullable TExternCodeSegment */
-cltype5 = type_nullable__nit__TExternCodeSegment.color;
-idtype6 = type_nullable__nit__TExternCodeSegment.id;
-if(var_texterncodesegmentnode3 == NULL) {
-var4 = 1;
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var6;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var7 = 1;
 } else {
-if(cltype5 >= var_texterncodesegmentnode3->type->table_size) {
-var4 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var7 = 0;
 } else {
-var4 = var_texterncodesegmentnode3->type->type_table[cltype5] == idtype6;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var4)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5153);
-show_backtrace(1);
-}
-var7 = NEW_nit__AExternCodeBlock(&type_nit__AExternCodeBlock);
-{
-nit__parser_prod___AExternCodeBlock___init_aexterncodeblock(var7, var_pinlanguagenode2, var_texterncodesegmentnode3); /* Direct call parser_prod#AExternCodeBlock#init_aexterncodeblock on <var7:AExternCodeBlock>*/
-}
-var_pexterncodeblocknode1 = var7;
-var_node_list = var_pexterncodeblocknode1;
-var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction145> */
-{
-var9 = nit___nit__Parser___go_to(var_p, var8);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5555);
+fatal_exit(1);
 }
-{
-nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
+var_tkwinitnode3 = var_nodearraylist6;
+/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
+cltype9 = type_nullable__nit__TKwinit.color;
+idtype10 = type_nullable__nit__TKwinit.id;
+if(var_tkwinitnode3 == NULL) {
+var8 = 1;
+} else {
+if(cltype9 >= (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->table_size) {
+var8 = 0;
+} else {
+var8 = (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->type_table[cltype9] == idtype10;
 }
-/* method parser#ReduceAction146#action for (self: ReduceAction146, Parser) */
-void nit__parser___nit__parser__ReduceAction146___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexterncodeblocknode1 /* var pexterncodeblocknode1: nullable Object */;
-long var2 /* : Int */;
-long var3 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var_pexterncodeblocknode1 = var_nodearraylist1;
-var_node_list = var_pexterncodeblocknode1;
-var2 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction146> */
-{
-var3 = nit___nit__Parser___go_to(var_p, var2);
+if (unlikely(!var8)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5557);
+fatal_exit(1);
 }
-{
-nit___nit__Parser___push(var_p, var3, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+var_pexprsnode4 = var_nodearraylist7;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype12 = type_nullable__nit__AExprs.color;
+idtype13 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var11 = 1;
+} else {
+if(cltype12 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype12] == idtype13;
 }
-RET_LABEL:;
 }
-/* method parser#ReduceAction148#action for (self: ReduceAction148, Parser) */
-void nit__parser___nit__parser__ReduceAction148___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexterncodeblocknode1 /* var pexterncodeblocknode1: nullable Object */;
-long var3 /* : Int */;
-long var4 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5559);
+fatal_exit(1);
 }
-var_nodearraylist2 = var1;
+var14 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
 {
-var2 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AInitExpr___init_ainitexpr(var14, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var14:AInitExpr>*/
 }
-var_nodearraylist1 = var2;
-var_pexterncodeblocknode1 = var_nodearraylist2;
-var_node_list = var_pexterncodeblocknode1;
-var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction148> */
+var_pexprnode1 = var14;
+var_node_list = var_pexprnode1;
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction195> */
 {
-var4 = nit___nit__Parser___go_to(var_p, var3);
+var16 = nit___nit__Parser___go_to(var_p, var15);
 }
 {
-nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction149#action for (self: ReduceAction149, Parser) */
-void nit__parser___nit__parser__ReduceAction149___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction197#action for (self: ReduceAction197, Parser) */
+void nit__parser___nit__parser__ReduceAction197___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : Array[Object] */;
-val* var_listnode4 /* var listnode4: Array[Object] */;
-val* var_tclassidnode3 /* var tclassidnode3: nullable Object */;
+val* var3 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
 short int var4 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pannotationsnode5 /* var pannotationsnode5: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var5 /* : Bool */;
 int cltype6;
 int idtype7;
-val* var8 /* : AType */;
-val* var9 /* : null */;
-val* var_ptypenode1 /* var ptypenode1: nullable AType */;
+val* var8 /* : AInitExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+long var9 /* : Int */;
 long var10 /* : Int */;
-long var11 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -1112,95 +1030,94 @@ var_nodearraylist2 = var1;
 var2 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var2;
-var3 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var3 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-standard___standard__Array___standard__kernel__Object__init(var3); /* Direct call array#Array#init on <var3:Array[Object]>*/
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var3); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var3:AImplicitSelfExpr>*/
 }
-var_listnode4 = var3;
-var_tclassidnode3 = var_nodearraylist1;
-/* <var_tclassidnode3:nullable Object> isa nullable TClassid */
-cltype = type_nullable__nit__TClassid.color;
-idtype = type_nullable__nit__TClassid.id;
-if(var_tclassidnode3 == NULL) {
+var_pexprnode2 = var3;
+var_tkwinitnode3 = var_nodearraylist2;
+/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
+cltype = type_nullable__nit__TKwinit.color;
+idtype = type_nullable__nit__TKwinit.id;
+if(var_tkwinitnode3 == NULL) {
 var4 = 1;
 } else {
-if(cltype >= var_tclassidnode3->type->table_size) {
+if(cltype >= (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->table_size) {
 var4 = 0;
 } else {
-var4 = var_tclassidnode3->type->type_table[cltype] == idtype;
+var4 = (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5194);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5579);
+fatal_exit(1);
 }
-var_pannotationsnode5 = var_nodearraylist2;
-/* <var_pannotationsnode5:nullable Object> isa nullable AAnnotations */
-cltype6 = type_nullable__nit__AAnnotations.color;
-idtype7 = type_nullable__nit__AAnnotations.id;
-if(var_pannotationsnode5 == NULL) {
+var_pexprsnode4 = var_nodearraylist3;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype6 = type_nullable__nit__AExprs.color;
+idtype7 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
 var5 = 1;
 } else {
-if(cltype6 >= var_pannotationsnode5->type->table_size) {
+if(cltype6 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
 var5 = 0;
 } else {
-var5 = var_pannotationsnode5->type->type_table[cltype6] == idtype7;
+var5 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype6] == idtype7;
 }
 }
 if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5196);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5581);
+fatal_exit(1);
 }
-var8 = NEW_nit__AType(&type_nit__AType);
-var9 = NULL;
+var8 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
 {
-nit__parser_prod___AType___init_atype(var8, var9, var_tclassidnode3, var_listnode4, var_pannotationsnode5); /* Direct call parser_prod#AType#init_atype on <var8:AType>*/
+nit__parser_prod___AInitExpr___init_ainitexpr(var8, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var8:AInitExpr>*/
 }
-var_ptypenode1 = var8;
-var_node_list = var_ptypenode1;
-var10 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction149> */
+var_pexprnode1 = var8;
+var_node_list = var_pexprnode1;
+var9 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction197> */
 {
-var11 = nit___nit__Parser___go_to(var_p, var10);
+var10 = nit___nit__Parser___go_to(var_p, var9);
 }
 {
-nit___nit__Parser___push(var_p, var11, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var10, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction150#action for (self: ReduceAction150, Parser) */
-void nit__parser___nit__parser__ReduceAction150___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction198#action for (self: ReduceAction198, Parser) */
+void nit__parser___nit__parser__ReduceAction198___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var4 /* : Array[Object] */;
-val* var_listnode4 /* var listnode4: Array[Object] */;
-val* var_tkwnullablenode2 /* var tkwnullablenode2: nullable Object */;
+val* var4 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
 short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tclassidnode3 /* var tclassidnode3: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var6 /* : Bool */;
 int cltype7;
 int idtype8;
-val* var_pannotationsnode5 /* var pannotationsnode5: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var12 /* : AType */;
-val* var_ptypenode1 /* var ptypenode1: nullable AType */;
-long var13 /* : Int */;
-long var14 /* : Int */;
+val* var9 /* : AInitExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+long var10 /* : Int */;
+long var11 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -1213,483 +1130,371 @@ var_nodearraylist2 = var2;
 var3 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var3;
-var4 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-standard___standard__Array___standard__kernel__Object__init(var4); /* Direct call array#Array#init on <var4:Array[Object]>*/
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-var_listnode4 = var4;
-var_tkwnullablenode2 = var_nodearraylist1;
-/* <var_tkwnullablenode2:nullable Object> isa nullable TKwnullable */
-cltype = type_nullable__nit__TKwnullable.color;
-idtype = type_nullable__nit__TKwnullable.id;
-if(var_tkwnullablenode2 == NULL) {
+var_pexprnode2 = var4;
+var_tkwinitnode3 = var_nodearraylist3;
+/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
+cltype = type_nullable__nit__TKwinit.color;
+idtype = type_nullable__nit__TKwinit.id;
+if(var_tkwinitnode3 == NULL) {
 var5 = 1;
 } else {
-if(cltype >= var_tkwnullablenode2->type->table_size) {
+if(cltype >= (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->table_size) {
 var5 = 0;
 } else {
-var5 = var_tkwnullablenode2->type->type_table[cltype] == idtype;
+var5 = (((long)var_tkwinitnode3&3)?type_info[((long)var_tkwinitnode3&3)]:var_tkwinitnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5217);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5602);
+fatal_exit(1);
 }
-var_tclassidnode3 = var_nodearraylist2;
-/* <var_tclassidnode3:nullable Object> isa nullable TClassid */
-cltype7 = type_nullable__nit__TClassid.color;
-idtype8 = type_nullable__nit__TClassid.id;
-if(var_tclassidnode3 == NULL) {
+var_pexprsnode4 = var_nodearraylist4;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype7 = type_nullable__nit__AExprs.color;
+idtype8 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
 var6 = 1;
 } else {
-if(cltype7 >= var_tclassidnode3->type->table_size) {
+if(cltype7 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
 var6 = 0;
 } else {
-var6 = var_tclassidnode3->type->type_table[cltype7] == idtype8;
+var6 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype7] == idtype8;
 }
 }
 if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5219);
-show_backtrace(1);
-}
-var_pannotationsnode5 = var_nodearraylist3;
-/* <var_pannotationsnode5:nullable Object> isa nullable AAnnotations */
-cltype10 = type_nullable__nit__AAnnotations.color;
-idtype11 = type_nullable__nit__AAnnotations.id;
-if(var_pannotationsnode5 == NULL) {
-var9 = 1;
-} else {
-if(cltype10 >= var_pannotationsnode5->type->table_size) {
-var9 = 0;
-} else {
-var9 = var_pannotationsnode5->type->type_table[cltype10] == idtype11;
-}
-}
-if (unlikely(!var9)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5221);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5604);
+fatal_exit(1);
 }
-var12 = NEW_nit__AType(&type_nit__AType);
+var9 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
 {
-nit__parser_prod___AType___init_atype(var12, var_tkwnullablenode2, var_tclassidnode3, var_listnode4, var_pannotationsnode5); /* Direct call parser_prod#AType#init_atype on <var12:AType>*/
+nit__parser_prod___AInitExpr___init_ainitexpr(var9, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var9:AInitExpr>*/
 }
-var_ptypenode1 = var12;
-var_node_list = var_ptypenode1;
-var13 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction150> */
+var_pexprnode1 = var9;
+var_node_list = var_pexprnode1;
+var10 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction198> */
 {
-var14 = nit___nit__Parser___go_to(var_p, var13);
+var11 = nit___nit__Parser___go_to(var_p, var10);
 }
 {
-nit___nit__Parser___push(var_p, var14, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var11, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction151#action for (self: ReduceAction151, Parser) */
-void nit__parser___nit__parser__ReduceAction151___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction200#action for (self: ReduceAction200, Parser) */
+void nit__parser___nit__parser__ReduceAction200___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var8 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var_tclassidnode3 /* var tclassidnode3: nullable Object */;
-short int var9 /* : Bool */;
+val* var_tkwdebugnode2 /* var tkwdebugnode2: nullable Object */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_listnode4 /* var listnode4: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var13 /* : Array[Object] */;
-val* var_pannotationsnode6 /* var pannotationsnode6: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-val* var17 /* : AType */;
-val* var18 /* : null */;
-val* var_ptypenode1 /* var ptypenode1: nullable AType */;
-long var19 /* : Int */;
-long var20 /* : Int */;
+val* var_tkwtypenode3 /* var tkwtypenode3: nullable Object */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var_pexprnode4 /* var pexprnode4: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var_ptypenode5 /* var ptypenode5: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var15 /* : ADebugTypeExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ADebugTypeExpr */;
+long var16 /* : Int */;
+long var17 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist4 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist3 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
+var_nodearraylist2 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var4;
+var_tkwdebugnode2 = var_nodearraylist1;
+/* <var_tkwdebugnode2:nullable Object> isa nullable TKwdebug */
+cltype = type_nullable__nit__TKwdebug.color;
+idtype = type_nullable__nit__TKwdebug.id;
+if(var_tkwdebugnode2 == NULL) {
+var5 = 1;
+} else {
+if(cltype >= (((long)var_tkwdebugnode2&3)?type_info[((long)var_tkwdebugnode2&3)]:var_tkwdebugnode2->type)->table_size) {
+var5 = 0;
+} else {
+var5 = (((long)var_tkwdebugnode2&3)?type_info[((long)var_tkwdebugnode2&3)]:var_tkwdebugnode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist3 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var5)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5625);
+fatal_exit(1);
 }
-var_nodearraylist1 = var7;
-var8 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var8); /* Direct call array#Array#init on <var8:Array[Object]>*/
+var_tkwtypenode3 = var_nodearraylist2;
+/* <var_tkwtypenode3:nullable Object> isa nullable TKwtype */
+cltype7 = type_nullable__nit__TKwtype.color;
+idtype8 = type_nullable__nit__TKwtype.id;
+if(var_tkwtypenode3 == NULL) {
+var6 = 1;
+} else {
+if(cltype7 >= (((long)var_tkwtypenode3&3)?type_info[((long)var_tkwtypenode3&3)]:var_tkwtypenode3->type)->table_size) {
+var6 = 0;
+} else {
+var6 = (((long)var_tkwtypenode3&3)?type_info[((long)var_tkwtypenode3&3)]:var_tkwtypenode3->type)->type_table[cltype7] == idtype8;
+}
+}
+if (unlikely(!var6)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5627);
+fatal_exit(1);
 }
-var_listnode5 = var8;
-var_tclassidnode3 = var_nodearraylist1;
-/* <var_tclassidnode3:nullable Object> isa nullable TClassid */
-cltype = type_nullable__nit__TClassid.color;
-idtype = type_nullable__nit__TClassid.id;
-if(var_tclassidnode3 == NULL) {
+var_pexprnode4 = var_nodearraylist5;
+/* <var_pexprnode4:nullable Object> isa nullable AExpr */
+cltype10 = type_nullable__nit__AExpr.color;
+idtype11 = type_nullable__nit__AExpr.id;
+if(var_pexprnode4 == NULL) {
 var9 = 1;
 } else {
-if(cltype >= var_tclassidnode3->type->table_size) {
+if(cltype10 >= (((long)var_pexprnode4&3)?type_info[((long)var_pexprnode4&3)]:var_pexprnode4->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_tclassidnode3->type->type_table[cltype] == idtype;
+var9 = (((long)var_pexprnode4&3)?type_info[((long)var_pexprnode4&3)]:var_pexprnode4->type)->type_table[cltype10] == idtype11;
 }
 }
 if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5246);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5629);
+fatal_exit(1);
 }
-var_listnode4 = var_nodearraylist4;
-/* <var_listnode4:nullable Object> isa Array[Object] */
-cltype11 = type_standard__Array__standard__Object.color;
-idtype12 = type_standard__Array__standard__Object.id;
-if(var_listnode4 == NULL) {
-var10 = 0;
+var_ptypenode5 = var_nodearraylist3;
+/* <var_ptypenode5:nullable Object> isa nullable AType */
+cltype13 = type_nullable__nit__AType.color;
+idtype14 = type_nullable__nit__AType.id;
+if(var_ptypenode5 == NULL) {
+var12 = 1;
 } else {
-if(cltype11 >= var_listnode4->type->table_size) {
-var10 = 0;
+if(cltype13 >= (((long)var_ptypenode5&3)?type_info[((long)var_ptypenode5&3)]:var_ptypenode5->type)->table_size) {
+var12 = 0;
 } else {
-var10 = var_listnode4->type->type_table[cltype11] == idtype12;
+var12 = (((long)var_ptypenode5&3)?type_info[((long)var_ptypenode5&3)]:var_ptypenode5->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5248);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5631);
+fatal_exit(1);
 }
+var15 = NEW_nit__ADebugTypeExpr(&type_nit__ADebugTypeExpr);
 {
-var13 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode5, var_listnode4);
+nit__parser_prod___ADebugTypeExpr___init_adebugtypeexpr(var15, var_tkwdebugnode2, var_tkwtypenode3, var_pexprnode4, var_ptypenode5); /* Direct call parser_prod#ADebugTypeExpr#init_adebugtypeexpr on <var15:ADebugTypeExpr>*/
 }
-var_listnode5 = var13;
-var_pannotationsnode6 = var_nodearraylist7;
-/* <var_pannotationsnode6:nullable Object> isa nullable AAnnotations */
-cltype15 = type_nullable__nit__AAnnotations.color;
-idtype16 = type_nullable__nit__AAnnotations.id;
-if(var_pannotationsnode6 == NULL) {
-var14 = 1;
-} else {
-if(cltype15 >= var_pannotationsnode6->type->table_size) {
-var14 = 0;
-} else {
-var14 = var_pannotationsnode6->type->type_table[cltype15] == idtype16;
-}
-}
-if (unlikely(!var14)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5251);
-show_backtrace(1);
-}
-var17 = NEW_nit__AType(&type_nit__AType);
-var18 = NULL;
-{
-nit__parser_prod___AType___init_atype(var17, var18, var_tclassidnode3, var_listnode5, var_pannotationsnode6); /* Direct call parser_prod#AType#init_atype on <var17:AType>*/
-}
-var_ptypenode1 = var17;
-var_node_list = var_ptypenode1;
-var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction151> */
+var_pexprnode1 = var15;
+var_node_list = var_pexprnode1;
+var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction200> */
 {
-var20 = nit___nit__Parser___go_to(var_p, var19);
+var17 = nit___nit__Parser___go_to(var_p, var16);
 }
 {
-nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction152#action for (self: ReduceAction152, Parser) */
-void nit__parser___nit__parser__ReduceAction152___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction201#action for (self: ReduceAction201, Parser) */
+void nit__parser___nit__parser__ReduceAction201___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var5 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var6 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var7 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var9 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var_tkwnullablenode2 /* var tkwnullablenode2: nullable Object */;
-short int var10 /* : Bool */;
+val* var_tkwlabelnode2 /* var tkwlabelnode2: nullable Object */;
+short int var1 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tclassidnode3 /* var tclassidnode3: nullable Object */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
-val* var_listnode4 /* var listnode4: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-val* var17 /* : Array[Object] */;
-val* var_pannotationsnode6 /* var pannotationsnode6: nullable Object */;
-short int var18 /* : Bool */;
-int cltype19;
-int idtype20;
-val* var21 /* : AType */;
-val* var_ptypenode1 /* var ptypenode1: nullable AType */;
-long var22 /* : Int */;
-long var23 /* : Int */;
+val* var2 /* : ALabel */;
+val* var_plabelnode1 /* var plabelnode1: nullable ALabel */;
+long var3 /* : Int */;
+long var4 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist8 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist7 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist6 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist5 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var7;
-{
-var8 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var8;
-var9 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var9); /* Direct call array#Array#init on <var9:Array[Object]>*/
-}
-var_listnode5 = var9;
-var_tkwnullablenode2 = var_nodearraylist1;
-/* <var_tkwnullablenode2:nullable Object> isa nullable TKwnullable */
-cltype = type_nullable__nit__TKwnullable.color;
-idtype = type_nullable__nit__TKwnullable.id;
-if(var_tkwnullablenode2 == NULL) {
-var10 = 1;
-} else {
-if(cltype >= var_tkwnullablenode2->type->table_size) {
-var10 = 0;
-} else {
-var10 = var_tkwnullablenode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var10)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5277);
-show_backtrace(1);
-}
-var_tclassidnode3 = var_nodearraylist2;
-/* <var_tclassidnode3:nullable Object> isa nullable TClassid */
-cltype12 = type_nullable__nit__TClassid.color;
-idtype13 = type_nullable__nit__TClassid.id;
-if(var_tclassidnode3 == NULL) {
-var11 = 1;
-} else {
-if(cltype12 >= var_tclassidnode3->type->table_size) {
-var11 = 0;
-} else {
-var11 = var_tclassidnode3->type->type_table[cltype12] == idtype13;
-}
-}
-if (unlikely(!var11)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5279);
-show_backtrace(1);
-}
-var_listnode4 = var_nodearraylist5;
-/* <var_listnode4:nullable Object> isa Array[Object] */
-cltype15 = type_standard__Array__standard__Object.color;
-idtype16 = type_standard__Array__standard__Object.id;
-if(var_listnode4 == NULL) {
-var14 = 0;
-} else {
-if(cltype15 >= var_listnode4->type->table_size) {
-var14 = 0;
-} else {
-var14 = var_listnode4->type->type_table[cltype15] == idtype16;
-}
-}
-if (unlikely(!var14)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5281);
-show_backtrace(1);
-}
+var_node_list = ((val*)NULL);
 {
-var17 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode5, var_listnode4);
+var = nit___nit__Parser___pop(var_p);
 }
-var_listnode5 = var17;
-var_pannotationsnode6 = var_nodearraylist8;
-/* <var_pannotationsnode6:nullable Object> isa nullable AAnnotations */
-cltype19 = type_nullable__nit__AAnnotations.color;
-idtype20 = type_nullable__nit__AAnnotations.id;
-if(var_pannotationsnode6 == NULL) {
-var18 = 1;
+var_nodearraylist1 = var;
+var_tkwlabelnode2 = var_nodearraylist1;
+/* <var_tkwlabelnode2:nullable Object> isa nullable TKwlabel */
+cltype = type_nullable__nit__TKwlabel.color;
+idtype = type_nullable__nit__TKwlabel.id;
+if(var_tkwlabelnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype19 >= var_pannotationsnode6->type->table_size) {
-var18 = 0;
+if(cltype >= (((long)var_tkwlabelnode2&3)?type_info[((long)var_tkwlabelnode2&3)]:var_tkwlabelnode2->type)->table_size) {
+var1 = 0;
 } else {
-var18 = var_pannotationsnode6->type->type_table[cltype19] == idtype20;
+var1 = (((long)var_tkwlabelnode2&3)?type_info[((long)var_tkwlabelnode2&3)]:var_tkwlabelnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var18)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5284);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5649);
+fatal_exit(1);
 }
-var21 = NEW_nit__AType(&type_nit__AType);
+var2 = NEW_nit__ALabel(&type_nit__ALabel);
 {
-nit__parser_prod___AType___init_atype(var21, var_tkwnullablenode2, var_tclassidnode3, var_listnode5, var_pannotationsnode6); /* Direct call parser_prod#AType#init_atype on <var21:AType>*/
+nit__parser_prod___ALabel___init_alabel(var2, var_tkwlabelnode2, ((val*)NULL)); /* Direct call parser_prod#ALabel#init_alabel on <var2:ALabel>*/
 }
-var_ptypenode1 = var21;
-var_node_list = var_ptypenode1;
-var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction152> */
+var_plabelnode1 = var2;
+var_node_list = var_plabelnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction201> */
 {
-var23 = nit___nit__Parser___go_to(var_p, var22);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
 {
-nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction153#action for (self: ReduceAction153, Parser) */
-void nit__parser___nit__parser__ReduceAction153___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction202#action for (self: ReduceAction202, Parser) */
+void nit__parser___nit__parser__ReduceAction202___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var2 /* : Array[Object] */;
-val* var_listnode2 /* var listnode2: Array[Object] */;
-val* var_ptypenode1 /* var ptypenode1: nullable Object */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-long var6 /* : Int */;
+val* var_tkwlabelnode2 /* var tkwlabelnode2: nullable Object */;
+short int var2 /* : Bool */;
+int cltype;
+int idtype;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var3 /* : Bool */;
+int cltype4;
+int idtype5;
+val* var6 /* : ALabel */;
+val* var_plabelnode1 /* var plabelnode1: nullable ALabel */;
 long var7 /* : Int */;
+long var8 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var2 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var_nodearraylist2 = var;
 {
-standard___standard__Array___standard__kernel__Object__init(var2); /* Direct call array#Array#init on <var2:Array[Object]>*/
+var1 = nit___nit__Parser___pop(var_p);
 }
-var_listnode2 = var2;
-var_ptypenode1 = var_nodearraylist1;
-var3 = NULL;
-if (var_ptypenode1 == NULL) {
-var4 = 0; /* is null */
+var_nodearraylist1 = var1;
+var_tkwlabelnode2 = var_nodearraylist1;
+/* <var_tkwlabelnode2:nullable Object> isa nullable TKwlabel */
+cltype = type_nullable__nit__TKwlabel.color;
+idtype = type_nullable__nit__TKwlabel.id;
+if(var_tkwlabelnode2 == NULL) {
+var2 = 1;
+} else {
+if(cltype >= (((long)var_tkwlabelnode2&3)?type_info[((long)var_tkwlabelnode2&3)]:var_tkwlabelnode2->type)->table_size) {
+var2 = 0;
 } else {
-var4 = 1; /* arg is null and recv is not */
+var2 = (((long)var_tkwlabelnode2&3)?type_info[((long)var_tkwlabelnode2&3)]:var_tkwlabelnode2->type)->type_table[cltype] == idtype;
 }
-if (0) {
-var5 = ((short int (*)(val* self, val* p0))(var_ptypenode1->class->vft[COLOR_standard__kernel__Object___33d_61d]))(var_ptypenode1, var3) /* != on <var_ptypenode1:nullable Object>*/;
-var4 = var5;
 }
-if (var4){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode2, var_ptypenode1); /* Direct call array#Array#add on <var_listnode2:Array[Object]>*/
+if (unlikely(!var2)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5666);
+fatal_exit(1);
 }
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype4 = type_nullable__nit__TId.color;
+idtype5 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var3 = 1;
+} else {
+if(cltype4 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var3 = 0;
 } else {
+var3 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype4] == idtype5;
+}
+}
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5668);
+fatal_exit(1);
+}
+var6 = NEW_nit__ALabel(&type_nit__ALabel);
+{
+nit__parser_prod___ALabel___init_alabel(var6, var_tkwlabelnode2, var_tidnode3); /* Direct call parser_prod#ALabel#init_alabel on <var6:ALabel>*/
 }
-var_node_list = var_listnode2;
-var6 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction153> */
+var_plabelnode1 = var6;
+var_node_list = var_plabelnode1;
+var7 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction202> */
 {
-var7 = nit___nit__Parser___go_to(var_p, var6);
+var8 = nit___nit__Parser___go_to(var_p, var7);
 }
 {
-nit___nit__Parser___push(var_p, var7, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var8, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction154#action for (self: ReduceAction154, Parser) */
-void nit__parser___nit__parser__ReduceAction154___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction203#action for (self: ReduceAction203, Parser) */
+void nit__parser___nit__parser__ReduceAction203___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : Array[Object] */;
-val* var_listnode3 /* var listnode3: Array[Object] */;
-val* var_ptypenode1 /* var ptypenode1: nullable Object */;
-val* var_listnode2 /* var listnode2: nullable Object */;
-short int var4 /* : Bool */;
+val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
+short int var3 /* : Bool */;
 int cltype;
 int idtype;
-val* var5 /* : null */;
-short int var6 /* : Bool */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var_ptypenode4 /* var ptypenode4: nullable Object */;
 short int var7 /* : Bool */;
-val* var8 /* : Array[Object] */;
-long var9 /* : Int */;
-long var10 /* : Int */;
+int cltype8;
+int idtype9;
+val* var10 /* : AVardeclExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
+long var11 /* : Int */;
+long var12 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -1698,77 +1503,113 @@ var_nodearraylist2 = var1;
 var2 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var2;
-var3 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var3); /* Direct call array#Array#init on <var3:Array[Object]>*/
+var_tkwvarnode2 = var_nodearraylist1;
+/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
+cltype = type_nullable__nit__TKwvar.color;
+idtype = type_nullable__nit__TKwvar.id;
+if(var_tkwvarnode2 == NULL) {
+var3 = 1;
+} else {
+if(cltype >= (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->table_size) {
+var3 = 0;
+} else {
+var3 = (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->type_table[cltype] == idtype;
 }
-var_listnode3 = var3;
-var_ptypenode1 = var_nodearraylist1;
-var_listnode2 = var_nodearraylist2;
-/* <var_listnode2:nullable Object> isa Array[Object] */
-cltype = type_standard__Array__standard__Object.color;
-idtype = type_standard__Array__standard__Object.id;
-if(var_listnode2 == NULL) {
-var4 = 0;
+}
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5686);
+fatal_exit(1);
+}
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype5 = type_nullable__nit__TId.color;
+idtype6 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var4 = 1;
 } else {
-if(cltype >= var_listnode2->type->table_size) {
+if(cltype5 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var4 = 0;
 } else {
-var4 = var_listnode2->type->type_table[cltype] == idtype;
+var4 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype5] == idtype6;
 }
 }
 if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5320);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5688);
+fatal_exit(1);
 }
-var5 = NULL;
-if (var_ptypenode1 == NULL) {
-var6 = 0; /* is null */
+var_ptypenode4 = var_nodearraylist3;
+/* <var_ptypenode4:nullable Object> isa nullable AType */
+cltype8 = type_nullable__nit__AType.color;
+idtype9 = type_nullable__nit__AType.id;
+if(var_ptypenode4 == NULL) {
+var7 = 1;
 } else {
-var6 = 1; /* arg is null and recv is not */
-}
-if (0) {
-var7 = ((short int (*)(val* self, val* p0))(var_ptypenode1->class->vft[COLOR_standard__kernel__Object___33d_61d]))(var_ptypenode1, var5) /* != on <var_ptypenode1:nullable Object>*/;
-var6 = var7;
+if(cltype8 >= (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->table_size) {
+var7 = 0;
+} else {
+var7 = (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->type_table[cltype8] == idtype9;
 }
-if (var6){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode3, var_ptypenode1); /* Direct call array#Array#add on <var_listnode3:Array[Object]>*/
 }
-} else {
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5690);
+fatal_exit(1);
 }
+var10 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
 {
-var8 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode3, var_listnode2);
+nit__parser_prod___AVardeclExpr___init_avardeclexpr(var10, var_tkwvarnode2, var_tidnode3, var_ptypenode4, ((val*)NULL), ((val*)NULL), ((val*)NULL)); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var10:AVardeclExpr>*/
 }
-var_listnode3 = var8;
-var_node_list = var_listnode3;
-var9 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction154> */
+var_pexprnode1 = var10;
+var_node_list = var_pexprnode1;
+var11 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction203> */
 {
-var10 = nit___nit__Parser___go_to(var_p, var9);
+var12 = nit___nit__Parser___go_to(var_p, var11);
 }
 {
-nit___nit__Parser___push(var_p, var10, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var12, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction155#action for (self: ReduceAction155, Parser) */
-void nit__parser___nit__parser__ReduceAction155___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction204#action for (self: ReduceAction204, Parser) */
+void nit__parser___nit__parser__ReduceAction204___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_ptypenode1 /* var ptypenode1: nullable Object */;
-long var4 /* : Int */;
-long var5 /* : Int */;
+val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
+short int var4 /* : Bool */;
+int cltype;
+int idtype;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+val* var_ptypenode4 /* var ptypenode4: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pannotationsnode7 /* var pannotationsnode7: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var14 /* : AVardeclExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -1781,659 +1622,610 @@ var_nodearraylist2 = var2;
 var3 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var3;
-var_ptypenode1 = var_nodearraylist3;
-var_node_list = var_ptypenode1;
-var4 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction155> */
-{
-var5 = nit___nit__Parser___go_to(var_p, var4);
-}
-{
-nit___nit__Parser___push(var_p, var5, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
-}
-/* method parser#ReduceAction159#action for (self: ReduceAction159, Parser) */
-void nit__parser___nit__parser__ReduceAction159___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode1 /* var pexprnode1: nullable Object */;
-long var3 /* : Int */;
-long var4 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var2;
-var_pexprnode1 = var_nodearraylist2;
-var_node_list = var_pexprnode1;
-var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction159> */
-{
-var4 = nit___nit__Parser___go_to(var_p, var3);
-}
-{
-nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
-}
-/* method parser#ReduceAction160#action for (self: ReduceAction160, Parser) */
-void nit__parser___nit__parser__ReduceAction160___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : Array[Object] */;
-val* var_listnode2 /* var listnode2: Array[Object] */;
-val* var_tkwendnode3 /* var tkwendnode3: nullable Object */;
-short int var4 /* : Bool */;
-int cltype;
-int idtype;
-val* var5 /* : ABlockExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
-long var6 /* : Int */;
-long var7 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var2;
-var3 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var3); /* Direct call array#Array#init on <var3:Array[Object]>*/
-}
-var_listnode2 = var3;
-var_tkwendnode3 = var_nodearraylist2;
-/* <var_tkwendnode3:nullable Object> isa nullable TKwend */
-cltype = type_nullable__nit__TKwend.color;
-idtype = type_nullable__nit__TKwend.id;
-if(var_tkwendnode3 == NULL) {
+var_tkwvarnode2 = var_nodearraylist1;
+/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
+cltype = type_nullable__nit__TKwvar.color;
+idtype = type_nullable__nit__TKwvar.id;
+if(var_tkwvarnode2 == NULL) {
 var4 = 1;
 } else {
-if(cltype >= var_tkwendnode3->type->table_size) {
+if(cltype >= (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->table_size) {
 var4 = 0;
 } else {
-var4 = var_tkwendnode3->type->type_table[cltype] == idtype;
+var4 = (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5363);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5713);
+fatal_exit(1);
 }
-var5 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
-{
-nit__parser_prod___ABlockExpr___init_ablockexpr(var5, var_listnode2, var_tkwendnode3); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var5:ABlockExpr>*/
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype6 = type_nullable__nit__TId.color;
+idtype7 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var5 = 1;
+} else {
+if(cltype6 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var5 = 0;
+} else {
+var5 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype6] == idtype7;
 }
-var_pexprnode1 = var5;
-var_node_list = var_pexprnode1;
-var6 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction160> */
-{
-var7 = nit___nit__Parser___go_to(var_p, var6);
 }
-{
-nit___nit__Parser___push(var_p, var7, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+if (unlikely(!var5)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5715);
+fatal_exit(1);
 }
-RET_LABEL:;
+var_ptypenode4 = var_nodearraylist4;
+/* <var_ptypenode4:nullable Object> isa nullable AType */
+cltype9 = type_nullable__nit__AType.color;
+idtype10 = type_nullable__nit__AType.id;
+if(var_ptypenode4 == NULL) {
+var8 = 1;
+} else {
+if(cltype9 >= (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->table_size) {
+var8 = 0;
+} else {
+var8 = (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->type_table[cltype9] == idtype10;
 }
-/* method parser#ReduceAction161#action for (self: ReduceAction161, Parser) */
-void nit__parser___nit__parser__ReduceAction161___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var2 /* : Array[Object] */;
-val* var_listnode2 /* var listnode2: Array[Object] */;
-val* var_tkwendnode3 /* var tkwendnode3: nullable Object */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-val* var4 /* : ABlockExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
-long var5 /* : Int */;
-long var6 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var2 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var2); /* Direct call array#Array#init on <var2:Array[Object]>*/
+if (unlikely(!var8)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5717);
+fatal_exit(1);
 }
-var_listnode2 = var2;
-var_tkwendnode3 = var_nodearraylist1;
-/* <var_tkwendnode3:nullable Object> isa nullable TKwend */
-cltype = type_nullable__nit__TKwend.color;
-idtype = type_nullable__nit__TKwend.id;
-if(var_tkwendnode3 == NULL) {
-var3 = 1;
+var_pannotationsnode7 = var_nodearraylist3;
+/* <var_pannotationsnode7:nullable Object> isa nullable AAnnotations */
+cltype12 = type_nullable__nit__AAnnotations.color;
+idtype13 = type_nullable__nit__AAnnotations.id;
+if(var_pannotationsnode7 == NULL) {
+var11 = 1;
 } else {
-if(cltype >= var_tkwendnode3->type->table_size) {
-var3 = 0;
+if(cltype12 >= (((long)var_pannotationsnode7&3)?type_info[((long)var_pannotationsnode7&3)]:var_pannotationsnode7->type)->table_size) {
+var11 = 0;
 } else {
-var3 = var_tkwendnode3->type->type_table[cltype] == idtype;
+var11 = (((long)var_pannotationsnode7&3)?type_info[((long)var_pannotationsnode7&3)]:var_pannotationsnode7->type)->type_table[cltype12] == idtype13;
 }
 }
-if (unlikely(!var3)) {
+if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5380);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5719);
+fatal_exit(1);
 }
-var4 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
+var14 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
 {
-nit__parser_prod___ABlockExpr___init_ablockexpr(var4, var_listnode2, var_tkwendnode3); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var4:ABlockExpr>*/
+nit__parser_prod___AVardeclExpr___init_avardeclexpr(var14, var_tkwvarnode2, var_tidnode3, var_ptypenode4, ((val*)NULL), ((val*)NULL), var_pannotationsnode7); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var14:AVardeclExpr>*/
 }
-var_pexprnode1 = var4;
+var_pexprnode1 = var14;
 var_node_list = var_pexprnode1;
-var5 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction161> */
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction204> */
 {
-var6 = nit___nit__Parser___go_to(var_p, var5);
+var16 = nit___nit__Parser___go_to(var_p, var15);
 }
 {
-nit___nit__Parser___push(var_p, var6, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction162#action for (self: ReduceAction162, Parser) */
-void nit__parser___nit__parser__ReduceAction162___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction205#action for (self: ReduceAction205, Parser) */
+void nit__parser___nit__parser__ReduceAction205___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var1 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var2 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var3 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode1 /* var pexprnode1: nullable Object */;
-long var2 /* : Int */;
-long var3 /* : Int */;
+val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
+short int var6 /* : Bool */;
+int cltype;
+int idtype;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_ptypenode4 /* var ptypenode4: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
+val* var19 /* : AVardeclExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
+long var20 /* : Int */;
+long var21 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var_pexprnode1 = var_nodearraylist1;
-var_node_list = var_pexprnode1;
-var2 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction162> */
+var_nodearraylist6 = var;
 {
-var3 = nit___nit__Parser___go_to(var_p, var2);
+var1 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist5 = var1;
 {
-nit___nit__Parser___push(var_p, var3, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+var2 = nit___nit__Parser___pop(var_p);
 }
-RET_LABEL:;
+var_nodearraylist4 = var2;
+{
+var3 = nit___nit__Parser___pop(var_p);
 }
-/* method parser#ReduceAction163#action for (self: ReduceAction163, Parser) */
-void nit__parser___nit__parser__ReduceAction163___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var2 /* : Array[Object] */;
-val* var_listnode3 /* var listnode3: Array[Object] */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-val* var4 /* : null */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var8 /* : Bool */;
-short int var9 /* : Bool */;
-val* var10 /* : ABlockExpr */;
-val* var11 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
-long var12 /* : Int */;
-long var13 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
+var_nodearraylist3 = var3;
 {
-var1 = nit___nit__Parser___pop(var_p);
+var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var2 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var_nodearraylist2 = var4;
 {
-standard___standard__Array___standard__kernel__Object__init(var2); /* Direct call array#Array#init on <var2:Array[Object]>*/
+var5 = nit___nit__Parser___pop(var_p);
 }
-var_listnode3 = var2;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var3 = 1;
+var_nodearraylist1 = var5;
+var_tkwvarnode2 = var_nodearraylist1;
+/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
+cltype = type_nullable__nit__TKwvar.color;
+idtype = type_nullable__nit__TKwvar.id;
+if(var_tkwvarnode2 == NULL) {
+var6 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var3 = 0;
+if(cltype >= (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->table_size) {
+var6 = 0;
 } else {
-var3 = var_pexprnode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var3)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5408);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5744);
+fatal_exit(1);
 }
-var4 = NULL;
-if (var_pexprnode2 == NULL) {
-var5 = 0; /* is null */
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype8 = type_nullable__nit__TId.color;
+idtype9 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var7 = 1;
+} else {
+if(cltype8 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var7 = 0;
 } else {
-var5 = 1; /* arg is null and recv is not */
+var7 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype8] == idtype9;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_pexprnode2,var4) on <var_pexprnode2:nullable Object(nullable AExpr)> */
-var_other = var4;
-{
-var8 = ((short int (*)(val* self, val* p0))(var_pexprnode2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_pexprnode2, var_other) /* == on <var_pexprnode2:nullable AExpr(AExpr)>*/;
 }
-var9 = !var8;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5746);
+fatal_exit(1);
+}
+var_ptypenode4 = var_nodearraylist3;
+/* <var_ptypenode4:nullable Object> isa nullable AType */
+cltype11 = type_nullable__nit__AType.color;
+idtype12 = type_nullable__nit__AType.id;
+if(var_ptypenode4 == NULL) {
+var10 = 1;
+} else {
+if(cltype11 >= (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->table_size) {
+var10 = 0;
+} else {
+var10 = (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->type_table[cltype11] == idtype12;
+}
 }
-var5 = var6;
+if (unlikely(!var10)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5748);
+fatal_exit(1);
 }
-if (var5){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode3, var_pexprnode2); /* Direct call array#Array#add on <var_listnode3:Array[Object]>*/
+var_tassignnode5 = var_nodearraylist4;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype14 = type_nullable__nit__TAssign.color;
+idtype15 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
+var13 = 1;
+} else {
+if(cltype14 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
+var13 = 0;
+} else {
+var13 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype14] == idtype15;
 }
+}
+if (unlikely(!var13)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5750);
+fatal_exit(1);
+}
+var_pexprnode6 = var_nodearraylist6;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype17 = type_nullable__nit__AExpr.color;
+idtype18 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var16 = 1;
 } else {
+if(cltype17 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var16 = 0;
+} else {
+var16 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype17] == idtype18;
+}
+}
+if (unlikely(!var16)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5752);
+fatal_exit(1);
 }
-var10 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
-var11 = NULL;
+var19 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
 {
-nit__parser_prod___ABlockExpr___init_ablockexpr(var10, var_listnode3, var11); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var10:ABlockExpr>*/
+nit__parser_prod___AVardeclExpr___init_avardeclexpr(var19, var_tkwvarnode2, var_tidnode3, var_ptypenode4, var_tassignnode5, var_pexprnode6, ((val*)NULL)); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var19:AVardeclExpr>*/
 }
-var_pexprnode1 = var10;
+var_pexprnode1 = var19;
 var_node_list = var_pexprnode1;
-var12 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction163> */
+var20 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction205> */
 {
-var13 = nit___nit__Parser___go_to(var_p, var12);
+var21 = nit___nit__Parser___go_to(var_p, var20);
 }
 {
-nit___nit__Parser___push(var_p, var13, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var21, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction164#action for (self: ReduceAction164, Parser) */
-void nit__parser___nit__parser__ReduceAction164___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction206#action for (self: ReduceAction206, Parser) */
+void nit__parser___nit__parser__ReduceAction206___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var3 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : Array[Object] */;
-val* var_listnode4 /* var listnode4: Array[Object] */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var4 /* : Bool */;
+val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_listnode3 /* var listnode3: nullable Object */;
-short int var5 /* : Bool */;
-int cltype6;
-int idtype7;
-val* var8 /* : null */;
-short int var9 /* : Bool */;
-short int var10 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-val* var14 /* : Array[Object] */;
-val* var15 /* : ABlockExpr */;
-val* var16 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
-long var17 /* : Int */;
-long var18 /* : Int */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_ptypenode4 /* var ptypenode4: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var_pannotationsnode7 /* var pannotationsnode7: nullable Object */;
+short int var20 /* : Bool */;
+int cltype21;
+int idtype22;
+val* var23 /* : AVardeclExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
+long var24 /* : Int */;
+long var25 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var1;
+var_nodearraylist7 = var;
 {
-var2 = nit___nit__Parser___pop(var_p);
+var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var2;
-var3 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var_nodearraylist6 = var1;
 {
-standard___standard__Array___standard__kernel__Object__init(var3); /* Direct call array#Array#init on <var3:Array[Object]>*/
-}
-var_listnode4 = var3;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var4 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var4 = 0;
-} else {
-var4 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var4)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5429);
-show_backtrace(1);
-}
-var_listnode3 = var_nodearraylist2;
-/* <var_listnode3:nullable Object> isa Array[Object] */
-cltype6 = type_standard__Array__standard__Object.color;
-idtype7 = type_standard__Array__standard__Object.id;
-if(var_listnode3 == NULL) {
-var5 = 0;
-} else {
-if(cltype6 >= var_listnode3->type->table_size) {
-var5 = 0;
-} else {
-var5 = var_listnode3->type->type_table[cltype6] == idtype7;
-}
-}
-if (unlikely(!var5)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5431);
-show_backtrace(1);
-}
-var8 = NULL;
-if (var_pexprnode2 == NULL) {
-var9 = 0; /* is null */
-} else {
-var9 = 1; /* arg is null and recv is not */
+var2 = nit___nit__Parser___pop(var_p);
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_pexprnode2,var8) on <var_pexprnode2:nullable Object(nullable AExpr)> */
-var_other = var8;
+var_nodearraylist5 = var2;
 {
-var12 = ((short int (*)(val* self, val* p0))(var_pexprnode2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_pexprnode2, var_other) /* == on <var_pexprnode2:nullable AExpr(AExpr)>*/;
+var3 = nit___nit__Parser___pop(var_p);
 }
-var13 = !var12;
-var10 = var13;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+var_nodearraylist4 = var3;
+{
+var4 = nit___nit__Parser___pop(var_p);
 }
-var9 = var10;
+var_nodearraylist3 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
 }
-if (var9){
+var_nodearraylist2 = var5;
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode4, var_pexprnode2); /* Direct call array#Array#add on <var_listnode4:Array[Object]>*/
+var6 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist1 = var6;
+var_tkwvarnode2 = var_nodearraylist1;
+/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
+cltype = type_nullable__nit__TKwvar.color;
+idtype = type_nullable__nit__TKwvar.id;
+if(var_tkwvarnode2 == NULL) {
+var7 = 1;
+} else {
+if(cltype >= (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->table_size) {
+var7 = 0;
 } else {
+var7 = (((long)var_tkwvarnode2&3)?type_info[((long)var_tkwvarnode2&3)]:var_tkwvarnode2->type)->type_table[cltype] == idtype;
 }
-{
-var14 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode4, var_listnode3);
 }
-var_listnode4 = var14;
-var15 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
-var16 = NULL;
-{
-nit__parser_prod___ABlockExpr___init_ablockexpr(var15, var_listnode4, var16); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var15:ABlockExpr>*/
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5778);
+fatal_exit(1);
 }
-var_pexprnode1 = var15;
-var_node_list = var_pexprnode1;
-var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction164> */
-{
-var18 = nit___nit__Parser___go_to(var_p, var17);
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype9 = type_nullable__nit__TId.color;
+idtype10 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var8 = 1;
+} else {
+if(cltype9 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var8 = 0;
+} else {
+var8 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype9] == idtype10;
 }
-{
-nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
-RET_LABEL:;
+if (unlikely(!var8)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5780);
+fatal_exit(1);
 }
-/* method parser#ReduceAction165#action for (self: ReduceAction165, Parser) */
-void nit__parser___nit__parser__ReduceAction165___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : Array[Object] */;
-val* var_listnode3 /* var listnode3: Array[Object] */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var4 /* : Bool */;
-int cltype;
-int idtype;
-val* var5 /* : null */;
-short int var6 /* : Bool */;
-short int var7 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var9 /* : Bool */;
-short int var10 /* : Bool */;
-val* var11 /* : ABlockExpr */;
-val* var12 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
-long var13 /* : Int */;
-long var14 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
+var_ptypenode4 = var_nodearraylist4;
+/* <var_ptypenode4:nullable Object> isa nullable AType */
+cltype12 = type_nullable__nit__AType.color;
+idtype13 = type_nullable__nit__AType.id;
+if(var_ptypenode4 == NULL) {
+var11 = 1;
+} else {
+if(cltype12 >= (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_ptypenode4&3)?type_info[((long)var_ptypenode4&3)]:var_ptypenode4->type)->type_table[cltype12] == idtype13;
 }
-var_nodearraylist2 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var2;
-var3 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var3); /* Direct call array#Array#init on <var3:Array[Object]>*/
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5782);
+fatal_exit(1);
 }
-var_listnode3 = var3;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var4 = 1;
+var_tassignnode5 = var_nodearraylist5;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype15 = type_nullable__nit__TAssign.color;
+idtype16 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
+var14 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var4 = 0;
+if(cltype15 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
+var14 = 0;
 } else {
-var4 = var_pexprnode2->type->type_table[cltype] == idtype;
+var14 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var4)) {
+if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5453);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5784);
+fatal_exit(1);
 }
-var5 = NULL;
-if (var_pexprnode2 == NULL) {
-var6 = 0; /* is null */
+var_pexprnode6 = var_nodearraylist7;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype18 = type_nullable__nit__AExpr.color;
+idtype19 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var17 = 1;
+} else {
+if(cltype18 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var17 = 0;
 } else {
-var6 = 1; /* arg is null and recv is not */
+var17 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype18] == idtype19;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_pexprnode2,var5) on <var_pexprnode2:nullable Object(nullable AExpr)> */
-var_other = var5;
-{
-var9 = ((short int (*)(val* self, val* p0))(var_pexprnode2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_pexprnode2, var_other) /* == on <var_pexprnode2:nullable AExpr(AExpr)>*/;
 }
-var10 = !var9;
-var7 = var10;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+if (unlikely(!var17)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5786);
+fatal_exit(1);
 }
-var6 = var7;
+var_pannotationsnode7 = var_nodearraylist3;
+/* <var_pannotationsnode7:nullable Object> isa nullable AAnnotations */
+cltype21 = type_nullable__nit__AAnnotations.color;
+idtype22 = type_nullable__nit__AAnnotations.id;
+if(var_pannotationsnode7 == NULL) {
+var20 = 1;
+} else {
+if(cltype21 >= (((long)var_pannotationsnode7&3)?type_info[((long)var_pannotationsnode7&3)]:var_pannotationsnode7->type)->table_size) {
+var20 = 0;
+} else {
+var20 = (((long)var_pannotationsnode7&3)?type_info[((long)var_pannotationsnode7&3)]:var_pannotationsnode7->type)->type_table[cltype21] == idtype22;
 }
-if (var6){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode3, var_pexprnode2); /* Direct call array#Array#add on <var_listnode3:Array[Object]>*/
 }
-} else {
+if (unlikely(!var20)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5788);
+fatal_exit(1);
 }
-var11 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
-var12 = NULL;
+var23 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
 {
-nit__parser_prod___ABlockExpr___init_ablockexpr(var11, var_listnode3, var12); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var11:ABlockExpr>*/
+nit__parser_prod___AVardeclExpr___init_avardeclexpr(var23, var_tkwvarnode2, var_tidnode3, var_ptypenode4, var_tassignnode5, var_pexprnode6, var_pannotationsnode7); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var23:AVardeclExpr>*/
 }
-var_pexprnode1 = var11;
+var_pexprnode1 = var23;
 var_node_list = var_pexprnode1;
-var13 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction165> */
+var24 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction206> */
 {
-var14 = nit___nit__Parser___go_to(var_p, var13);
+var25 = nit___nit__Parser___go_to(var_p, var24);
 }
 {
-nit___nit__Parser___push(var_p, var14, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var25, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction166#action for (self: ReduceAction166, Parser) */
-void nit__parser___nit__parser__ReduceAction166___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction207#action for (self: ReduceAction207, Parser) */
+void nit__parser___nit__parser__ReduceAction207___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var4 /* : Array[Object] */;
-val* var_listnode4 /* var listnode4: Array[Object] */;
 val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var5 /* : Bool */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_listnode3 /* var listnode3: nullable Object */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-val* var9 /* : null */;
-short int var10 /* : Bool */;
+val* var_tattridnode3 /* var tattridnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_tassignnode4 /* var tassignnode4: nullable Object */;
 short int var11 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var13 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
 short int var14 /* : Bool */;
-val* var15 /* : Array[Object] */;
-val* var16 /* : ABlockExpr */;
-val* var17 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
+int cltype15;
+int idtype16;
+val* var17 /* : AAttrAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AAttrAssignExpr */;
 long var18 /* : Int */;
 long var19 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var3;
-var4 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var_nodearraylist4 = var3;
+{
+var4 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var5;
 {
-standard___standard__Array___standard__kernel__Object__init(var4); /* Direct call array#Array#init on <var4:Array[Object]>*/
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_listnode4 = var4;
+var_nodearraylist1 = var6;
 var_pexprnode2 = var_nodearraylist1;
 /* <var_pexprnode2:nullable Object> isa nullable AExpr */
 cltype = type_nullable__nit__AExpr.color;
 idtype = type_nullable__nit__AExpr.id;
 if(var_pexprnode2 == NULL) {
-var5 = 1;
+var7 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var5 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var7 = 0;
 } else {
-var5 = var_pexprnode2->type->type_table[cltype] == idtype;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var5)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5475);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5814);
+fatal_exit(1);
 }
-var_listnode3 = var_nodearraylist2;
-/* <var_listnode3:nullable Object> isa Array[Object] */
-cltype7 = type_standard__Array__standard__Object.color;
-idtype8 = type_standard__Array__standard__Object.id;
-if(var_listnode3 == NULL) {
-var6 = 0;
+var_tattridnode3 = var_nodearraylist5;
+/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
+cltype9 = type_nullable__nit__TAttrid.color;
+idtype10 = type_nullable__nit__TAttrid.id;
+if(var_tattridnode3 == NULL) {
+var8 = 1;
 } else {
-if(cltype7 >= var_listnode3->type->table_size) {
-var6 = 0;
+if(cltype9 >= (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->table_size) {
+var8 = 0;
 } else {
-var6 = var_listnode3->type->type_table[cltype7] == idtype8;
+var8 = (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5477);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5816);
+fatal_exit(1);
 }
-var9 = NULL;
-if (var_pexprnode2 == NULL) {
-var10 = 0; /* is null */
+var_tassignnode4 = var_nodearraylist6;
+/* <var_tassignnode4:nullable Object> isa nullable TAssign */
+cltype12 = type_nullable__nit__TAssign.color;
+idtype13 = type_nullable__nit__TAssign.id;
+if(var_tassignnode4 == NULL) {
+var11 = 1;
 } else {
-var10 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_pexprnode2,var9) on <var_pexprnode2:nullable Object(nullable AExpr)> */
-var_other = var9;
-{
-var13 = ((short int (*)(val* self, val* p0))(var_pexprnode2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_pexprnode2, var_other) /* == on <var_pexprnode2:nullable AExpr(AExpr)>*/;
-}
-var14 = !var13;
-var11 = var14;
-goto RET_LABEL12;
-RET_LABEL12:(void)0;
+if(cltype12 >= (((long)var_tassignnode4&3)?type_info[((long)var_tassignnode4&3)]:var_tassignnode4->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_tassignnode4&3)?type_info[((long)var_tassignnode4&3)]:var_tassignnode4->type)->type_table[cltype12] == idtype13;
 }
-var10 = var11;
 }
-if (var10){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode4, var_pexprnode2); /* Direct call array#Array#add on <var_listnode4:Array[Object]>*/
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5818);
+fatal_exit(1);
 }
+var_pexprnode5 = var_nodearraylist7;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype15 = type_nullable__nit__AExpr.color;
+idtype16 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var14 = 1;
 } else {
+if(cltype15 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var14 = 0;
+} else {
+var14 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype15] == idtype16;
 }
-{
-var15 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode4, var_listnode3);
 }
-var_listnode4 = var15;
-var16 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
-var17 = NULL;
+if (unlikely(!var14)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5820);
+fatal_exit(1);
+}
+var17 = NEW_nit__AAttrAssignExpr(&type_nit__AAttrAssignExpr);
 {
-nit__parser_prod___ABlockExpr___init_ablockexpr(var16, var_listnode4, var17); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var16:ABlockExpr>*/
+nit__parser_prod___AAttrAssignExpr___init_aattrassignexpr(var17, var_pexprnode2, var_tattridnode3, var_tassignnode4, var_pexprnode5); /* Direct call parser_prod#AAttrAssignExpr#init_aattrassignexpr on <var17:AAttrAssignExpr>*/
 }
-var_pexprnode1 = var16;
+var_pexprnode1 = var17;
 var_node_list = var_pexprnode1;
-var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction166> */
+var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction207> */
 {
 var19 = nit___nit__Parser___go_to(var_p, var18);
 }
@@ -2442,40 +2234,42 @@ nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_wor
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction167#action for (self: ReduceAction167, Parser) */
-void nit__parser___nit__parser__ReduceAction167___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction208#action for (self: ReduceAction208, Parser) */
+void nit__parser___nit__parser__ReduceAction208___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var4 /* : Array[Object] */;
-val* var_listnode3 /* var listnode3: Array[Object] */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+val* var4 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tattridnode3 /* var tattridnode3: nullable Object */;
 short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var6 /* : null */;
-short int var7 /* : Bool */;
-short int var8 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-val* var_tkwendnode4 /* var tkwendnode4: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var15 /* : ABlockExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
-long var16 /* : Int */;
-long var17 /* : Int */;
+val* var_tassignnode4 /* var tassignnode4: nullable Object */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var12 /* : AAttrAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AAttrAssignExpr */;
+long var13 /* : Int */;
+long var14 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -2488,239 +2282,249 @@ var_nodearraylist2 = var2;
 var3 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var3;
-var4 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-standard___standard__Array___standard__kernel__Object__init(var4); /* Direct call array#Array#init on <var4:Array[Object]>*/
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-var_listnode3 = var4;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
+var_pexprnode2 = var4;
+var_tattridnode3 = var_nodearraylist2;
+/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
+cltype = type_nullable__nit__TAttrid.color;
+idtype = type_nullable__nit__TAttrid.id;
+if(var_tattridnode3 == NULL) {
 var5 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
+if(cltype >= (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->table_size) {
 var5 = 0;
 } else {
-var5 = var_pexprnode2->type->type_table[cltype] == idtype;
+var5 = (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5500);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5842);
+fatal_exit(1);
 }
-var6 = NULL;
-if (var_pexprnode2 == NULL) {
-var7 = 0; /* is null */
+var_tassignnode4 = var_nodearraylist3;
+/* <var_tassignnode4:nullable Object> isa nullable TAssign */
+cltype7 = type_nullable__nit__TAssign.color;
+idtype8 = type_nullable__nit__TAssign.id;
+if(var_tassignnode4 == NULL) {
+var6 = 1;
 } else {
-var7 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_pexprnode2,var6) on <var_pexprnode2:nullable Object(nullable AExpr)> */
-var_other = var6;
-{
-var10 = ((short int (*)(val* self, val* p0))(var_pexprnode2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_pexprnode2, var_other) /* == on <var_pexprnode2:nullable AExpr(AExpr)>*/;
-}
-var11 = !var10;
-var8 = var11;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-var7 = var8;
+if(cltype7 >= (((long)var_tassignnode4&3)?type_info[((long)var_tassignnode4&3)]:var_tassignnode4->type)->table_size) {
+var6 = 0;
+} else {
+var6 = (((long)var_tassignnode4&3)?type_info[((long)var_tassignnode4&3)]:var_tassignnode4->type)->type_table[cltype7] == idtype8;
 }
-if (var7){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode3, var_pexprnode2); /* Direct call array#Array#add on <var_listnode3:Array[Object]>*/
 }
-} else {
+if (unlikely(!var6)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5844);
+fatal_exit(1);
 }
-var_tkwendnode4 = var_nodearraylist3;
-/* <var_tkwendnode4:nullable Object> isa nullable TKwend */
-cltype13 = type_nullable__nit__TKwend.color;
-idtype14 = type_nullable__nit__TKwend.id;
-if(var_tkwendnode4 == NULL) {
-var12 = 1;
+var_pexprnode5 = var_nodearraylist4;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype10 = type_nullable__nit__AExpr.color;
+idtype11 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var9 = 1;
 } else {
-if(cltype13 >= var_tkwendnode4->type->table_size) {
-var12 = 0;
+if(cltype10 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var9 = 0;
 } else {
-var12 = var_tkwendnode4->type->type_table[cltype13] == idtype14;
+var9 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5505);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5846);
+fatal_exit(1);
 }
-var15 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
+var12 = NEW_nit__AAttrAssignExpr(&type_nit__AAttrAssignExpr);
 {
-nit__parser_prod___ABlockExpr___init_ablockexpr(var15, var_listnode3, var_tkwendnode4); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var15:ABlockExpr>*/
+nit__parser_prod___AAttrAssignExpr___init_aattrassignexpr(var12, var_pexprnode2, var_tattridnode3, var_tassignnode4, var_pexprnode5); /* Direct call parser_prod#AAttrAssignExpr#init_aattrassignexpr on <var12:AAttrAssignExpr>*/
 }
-var_pexprnode1 = var15;
+var_pexprnode1 = var12;
 var_node_list = var_pexprnode1;
-var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction167> */
+var13 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction208> */
 {
-var17 = nit___nit__Parser___go_to(var_p, var16);
+var14 = nit___nit__Parser___go_to(var_p, var13);
 }
 {
-nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var14, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction168#action for (self: ReduceAction168, Parser) */
-void nit__parser___nit__parser__ReduceAction168___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction209#action for (self: ReduceAction209, Parser) */
+void nit__parser___nit__parser__ReduceAction209___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : Array[Object] */;
-val* var_listnode4 /* var listnode4: Array[Object] */;
 val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var6 /* : Bool */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_listnode3 /* var listnode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var10 /* : null */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var11 /* : Bool */;
-short int var12 /* : Bool */;
-val* var_other /* var other: nullable Object */;
+int cltype12;
+int idtype13;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
 short int var14 /* : Bool */;
-short int var15 /* : Bool */;
-val* var16 /* : Array[Object] */;
-val* var_tkwendnode5 /* var tkwendnode5: nullable Object */;
+int cltype15;
+int idtype16;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
 short int var17 /* : Bool */;
 int cltype18;
 int idtype19;
-val* var20 /* : ABlockExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABlockExpr */;
+val* var20 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
 long var21 /* : Int */;
 long var22 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var5 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var_nodearraylist3 = var4;
 {
-standard___standard__Array___standard__kernel__Object__init(var5); /* Direct call array#Array#init on <var5:Array[Object]>*/
+var5 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_listnode4 = var5;
+var_nodearraylist1 = var6;
 var_pexprnode2 = var_nodearraylist1;
 /* <var_pexprnode2:nullable Object> isa nullable AExpr */
 cltype = type_nullable__nit__AExpr.color;
 idtype = type_nullable__nit__AExpr.id;
 if(var_pexprnode2 == NULL) {
-var6 = 1;
+var7 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var6 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var7 = 0;
 } else {
-var6 = var_pexprnode2->type->type_table[cltype] == idtype;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5525);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5870);
+fatal_exit(1);
 }
-var_listnode3 = var_nodearraylist2;
-/* <var_listnode3:nullable Object> isa Array[Object] */
-cltype8 = type_standard__Array__standard__Object.color;
-idtype9 = type_standard__Array__standard__Object.id;
-if(var_listnode3 == NULL) {
-var7 = 0;
+var_tidnode3 = var_nodearraylist4;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype9 = type_nullable__nit__TId.color;
+idtype10 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var8 = 1;
 } else {
-if(cltype8 >= var_listnode3->type->table_size) {
-var7 = 0;
+if(cltype9 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var8 = 0;
 } else {
-var7 = var_listnode3->type->type_table[cltype8] == idtype9;
+var8 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5527);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5872);
+fatal_exit(1);
 }
-var10 = NULL;
-if (var_pexprnode2 == NULL) {
-var11 = 0; /* is null */
+var_pexprsnode4 = var_nodearraylist5;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype12 = type_nullable__nit__AExprs.color;
+idtype13 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var11 = 1;
 } else {
-var11 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_pexprnode2,var10) on <var_pexprnode2:nullable Object(nullable AExpr)> */
-var_other = var10;
-{
-var14 = ((short int (*)(val* self, val* p0))(var_pexprnode2->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_pexprnode2, var_other) /* == on <var_pexprnode2:nullable AExpr(AExpr)>*/;
-}
-var15 = !var14;
-var12 = var15;
-goto RET_LABEL13;
-RET_LABEL13:(void)0;
+if(cltype12 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype12] == idtype13;
 }
-var11 = var12;
 }
-if (var11){
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_listnode4, var_pexprnode2); /* Direct call array#Array#add on <var_listnode4:Array[Object]>*/
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5874);
+fatal_exit(1);
 }
+var_tassignnode5 = var_nodearraylist6;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype15 = type_nullable__nit__TAssign.color;
+idtype16 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
+var14 = 1;
+} else {
+if(cltype15 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
+var14 = 0;
 } else {
+var14 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype15] == idtype16;
 }
-{
-var16 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode4, var_listnode3);
 }
-var_listnode4 = var16;
-var_tkwendnode5 = var_nodearraylist4;
-/* <var_tkwendnode5:nullable Object> isa nullable TKwend */
-cltype18 = type_nullable__nit__TKwend.color;
-idtype19 = type_nullable__nit__TKwend.id;
-if(var_tkwendnode5 == NULL) {
+if (unlikely(!var14)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5876);
+fatal_exit(1);
+}
+var_pexprnode6 = var_nodearraylist7;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype18 = type_nullable__nit__AExpr.color;
+idtype19 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
 var17 = 1;
 } else {
-if(cltype18 >= var_tkwendnode5->type->table_size) {
+if(cltype18 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
 var17 = 0;
 } else {
-var17 = var_tkwendnode5->type->type_table[cltype18] == idtype19;
+var17 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype18] == idtype19;
 }
 }
 if (unlikely(!var17)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5533);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5878);
+fatal_exit(1);
 }
-var20 = NEW_nit__ABlockExpr(&type_nit__ABlockExpr);
+var20 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ABlockExpr___init_ablockexpr(var20, var_listnode4, var_tkwendnode5); /* Direct call parser_prod#ABlockExpr#init_ablockexpr on <var20:ABlockExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var20, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var20:ACallAssignExpr>*/
 }
 var_pexprnode1 = var20;
 var_node_list = var_pexprnode1;
-var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction168> */
+var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction209> */
 {
 var22 = nit___nit__Parser___go_to(var_p, var21);
 }
@@ -2729,738 +2533,716 @@ nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_wor
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction172#action for (self: ReduceAction172, Parser) */
-void nit__parser___nit__parser__ReduceAction172___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction210#action for (self: ReduceAction210, Parser) */
+void nit__parser___nit__parser__ReduceAction210___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var1 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var2 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var3 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwreturnnode2 /* var tkwreturnnode2: nullable Object */;
-short int var2 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var3 /* : AReturnExpr */;
-val* var4 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable AReturnExpr */;
-long var5 /* : Int */;
-long var6 /* : Int */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var10 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var11 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_tassignnode6 /* var tassignnode6: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+val* var18 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var19 /* : Int */;
+long var20 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var1;
-var_tkwreturnnode2 = var_nodearraylist1;
-/* <var_tkwreturnnode2:nullable Object> isa nullable TKwreturn */
-cltype = type_nullable__nit__TKwreturn.color;
-idtype = type_nullable__nit__TKwreturn.id;
-if(var_tkwreturnnode2 == NULL) {
-var2 = 1;
-} else {
-if(cltype >= var_tkwreturnnode2->type->table_size) {
-var2 = 0;
-} else {
-var2 = var_tkwreturnnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var2)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5549);
-show_backtrace(1);
-}
-var3 = NEW_nit__AReturnExpr(&type_nit__AReturnExpr);
-var4 = NULL;
-{
-nit__parser_prod___AReturnExpr___init_areturnexpr(var3, var_tkwreturnnode2, var4); /* Direct call parser_prod#AReturnExpr#init_areturnexpr on <var3:AReturnExpr>*/
-}
-var_pexprnode1 = var3;
-var_node_list = var_pexprnode1;
-var5 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction172> */
-{
-var6 = nit___nit__Parser___go_to(var_p, var5);
-}
+var_node_list = ((val*)NULL);
 {
-nit___nit__Parser___push(var_p, var6, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
+var = nit___nit__Parser___pop(var_p);
 }
-/* method parser#ReduceAction173#action for (self: ReduceAction173, Parser) */
-void nit__parser___nit__parser__ReduceAction173___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwreturnnode2 /* var tkwreturnnode2: nullable Object */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-val* var_pexprnode3 /* var pexprnode3: nullable Object */;
-short int var4 /* : Bool */;
-int cltype5;
-int idtype6;
-val* var7 /* : AReturnExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AReturnExpr */;
-long var8 /* : Int */;
-long var9 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var2;
-var_tkwreturnnode2 = var_nodearraylist1;
-/* <var_tkwreturnnode2:nullable Object> isa nullable TKwreturn */
-cltype = type_nullable__nit__TKwreturn.color;
-idtype = type_nullable__nit__TKwreturn.id;
-if(var_tkwreturnnode2 == NULL) {
-var3 = 1;
-} else {
-if(cltype >= var_tkwreturnnode2->type->table_size) {
-var3 = 0;
-} else {
-var3 = var_tkwreturnnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var3)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5566);
-show_backtrace(1);
-}
-var_pexprnode3 = var_nodearraylist2;
-/* <var_pexprnode3:nullable Object> isa nullable AExpr */
-cltype5 = type_nullable__nit__AExpr.color;
-idtype6 = type_nullable__nit__AExpr.id;
-if(var_pexprnode3 == NULL) {
-var4 = 1;
-} else {
-if(cltype5 >= var_pexprnode3->type->table_size) {
-var4 = 0;
-} else {
-var4 = var_pexprnode3->type->type_table[cltype5] == idtype6;
-}
-}
-if (unlikely(!var4)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5568);
-show_backtrace(1);
-}
-var7 = NEW_nit__AReturnExpr(&type_nit__AReturnExpr);
-{
-nit__parser_prod___AReturnExpr___init_areturnexpr(var7, var_tkwreturnnode2, var_pexprnode3); /* Direct call parser_prod#AReturnExpr#init_areturnexpr on <var7:AReturnExpr>*/
-}
-var_pexprnode1 = var7;
-var_node_list = var_pexprnode1;
-var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction173> */
-{
-var9 = nit___nit__Parser___go_to(var_p, var8);
-}
-{
-nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
-}
-/* method parser#ReduceAction174#action for (self: ReduceAction174, Parser) */
-void nit__parser___nit__parser__ReduceAction174___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwbreaknode2 /* var tkwbreaknode2: nullable Object */;
-short int var2 /* : Bool */;
-int cltype;
-int idtype;
-val* var3 /* : ABreakExpr */;
-val* var4 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABreakExpr */;
-long var5 /* : Int */;
-long var6 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
+var_nodearraylist4 = var2;
 {
-var1 = nit___nit__Parser___pop(var_p);
+var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var_tkwbreaknode2 = var_nodearraylist1;
-/* <var_tkwbreaknode2:nullable Object> isa nullable TKwbreak */
-cltype = type_nullable__nit__TKwbreak.color;
-idtype = type_nullable__nit__TKwbreak.id;
-if(var_tkwbreaknode2 == NULL) {
-var2 = 1;
+var_nodearraylist3 = var3;
+{
+var4 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var5;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var6 = 1;
 } else {
-if(cltype >= var_tkwbreaknode2->type->table_size) {
-var2 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var6 = 0;
 } else {
-var2 = var_tkwbreaknode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var2)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5584);
-show_backtrace(1);
-}
-var3 = NEW_nit__ABreakExpr(&type_nit__ABreakExpr);
-var4 = NULL;
-{
-nit__parser_prod___ABreakExpr___init_abreakexpr(var3, var_tkwbreaknode2, var4); /* Direct call parser_prod#ABreakExpr#init_abreakexpr on <var3:ABreakExpr>*/
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5902);
+fatal_exit(1);
 }
-var_pexprnode1 = var3;
-var_node_list = var_pexprnode1;
-var5 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction174> */
-{
-var6 = nit___nit__Parser___go_to(var_p, var5);
+var_tidnode3 = var_nodearraylist4;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype8 = type_nullable__nit__TId.color;
+idtype9 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var7 = 1;
+} else {
+if(cltype8 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var7 = 0;
+} else {
+var7 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype8] == idtype9;
 }
-{
-nit___nit__Parser___push(var_p, var6, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
-RET_LABEL:;
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5904);
+fatal_exit(1);
 }
-/* method parser#ReduceAction175#action for (self: ReduceAction175, Parser) */
-void nit__parser___nit__parser__ReduceAction175___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwbreaknode2 /* var tkwbreaknode2: nullable Object */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-val* var_plabelnode3 /* var plabelnode3: nullable Object */;
-short int var4 /* : Bool */;
-int cltype5;
-int idtype6;
-val* var7 /* : ABreakExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABreakExpr */;
-long var8 /* : Int */;
-long var9 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
+var10 = NEW_standard__Array(&type_standard__Array__standard__Object);
 {
-var1 = nit___nit__Parser___pop(var_p);
+standard___standard__Array___standard__kernel__Object__init(var10); /* Direct call array#Array#init on <var10:Array[Object]>*/
 }
-var_nodearraylist2 = var1;
+var_listnode5 = var10;
+var11 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-var2 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AListExprs___init_alistexprs(var11, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var11:AListExprs>*/
 }
-var_nodearraylist1 = var2;
-var_tkwbreaknode2 = var_nodearraylist1;
-/* <var_tkwbreaknode2:nullable Object> isa nullable TKwbreak */
-cltype = type_nullable__nit__TKwbreak.color;
-idtype = type_nullable__nit__TKwbreak.id;
-if(var_tkwbreaknode2 == NULL) {
-var3 = 1;
+var_pexprsnode4 = var11;
+var_tassignnode6 = var_nodearraylist5;
+/* <var_tassignnode6:nullable Object> isa nullable TAssign */
+cltype13 = type_nullable__nit__TAssign.color;
+idtype14 = type_nullable__nit__TAssign.id;
+if(var_tassignnode6 == NULL) {
+var12 = 1;
 } else {
-if(cltype >= var_tkwbreaknode2->type->table_size) {
-var3 = 0;
+if(cltype13 >= (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->table_size) {
+var12 = 0;
 } else {
-var3 = var_tkwbreaknode2->type->type_table[cltype] == idtype;
+var12 = (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var3)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5601);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5910);
+fatal_exit(1);
 }
-var_plabelnode3 = var_nodearraylist2;
-/* <var_plabelnode3:nullable Object> isa nullable ALabel */
-cltype5 = type_nullable__nit__ALabel.color;
-idtype6 = type_nullable__nit__ALabel.id;
-if(var_plabelnode3 == NULL) {
-var4 = 1;
+var_pexprnode7 = var_nodearraylist6;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype16 = type_nullable__nit__AExpr.color;
+idtype17 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var15 = 1;
 } else {
-if(cltype5 >= var_plabelnode3->type->table_size) {
-var4 = 0;
+if(cltype16 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var15 = 0;
 } else {
-var4 = var_plabelnode3->type->type_table[cltype5] == idtype6;
+var15 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype16] == idtype17;
 }
 }
-if (unlikely(!var4)) {
+if (unlikely(!var15)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5603);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5912);
+fatal_exit(1);
 }
-var7 = NEW_nit__ABreakExpr(&type_nit__ABreakExpr);
+var18 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ABreakExpr___init_abreakexpr(var7, var_tkwbreaknode2, var_plabelnode3); /* Direct call parser_prod#ABreakExpr#init_abreakexpr on <var7:ABreakExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var18, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var18:ACallAssignExpr>*/
 }
-var_pexprnode1 = var7;
+var_pexprnode1 = var18;
 var_node_list = var_pexprnode1;
-var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction175> */
+var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction210> */
 {
-var9 = nit___nit__Parser___go_to(var_p, var8);
+var20 = nit___nit__Parser___go_to(var_p, var19);
 }
 {
-nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction176#action for (self: ReduceAction176, Parser) */
-void nit__parser___nit__parser__ReduceAction176___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction211#action for (self: ReduceAction211, Parser) */
+void nit__parser___nit__parser__ReduceAction211___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var1 /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
+val* var2 /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var3 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var6 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var7 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwabortnode2 /* var tkwabortnode2: nullable Object */;
-short int var2 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var8 /* : Bool */;
 int cltype;
 int idtype;
-val* var3 /* : AAbortExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AAbortExpr */;
-long var4 /* : Int */;
-long var5 /* : Int */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var18 /* : Bool */;
+int cltype19;
+int idtype20;
+val* var21 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var22 /* : Int */;
+long var23 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var1;
-var_tkwabortnode2 = var_nodearraylist1;
-/* <var_tkwabortnode2:nullable Object> isa nullable TKwabort */
-cltype = type_nullable__nit__TKwabort.color;
-idtype = type_nullable__nit__TKwabort.id;
-if(var_tkwabortnode2 == NULL) {
-var2 = 1;
-} else {
-if(cltype >= var_tkwabortnode2->type->table_size) {
-var2 = 0;
-} else {
-var2 = var_tkwabortnode2->type->type_table[cltype] == idtype;
+var = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist8 = var;
+{
+var1 = nit___nit__Parser___pop(var_p);
 }
-if (unlikely(!var2)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5619);
-show_backtrace(1);
+var_nodearraylist7 = var1;
+{
+var2 = nit___nit__Parser___pop(var_p);
 }
-var3 = NEW_nit__AAbortExpr(&type_nit__AAbortExpr);
+var_nodearraylist6 = var2;
 {
-nit__parser_prod___AAbortExpr___init_aabortexpr(var3, var_tkwabortnode2); /* Direct call parser_prod#AAbortExpr#init_aabortexpr on <var3:AAbortExpr>*/
+var3 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode1 = var3;
-var_node_list = var_pexprnode1;
-var4 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction176> */
+var_nodearraylist5 = var3;
 {
-var5 = nit___nit__Parser___go_to(var_p, var4);
+var4 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist4 = var4;
 {
-nit___nit__Parser___push(var_p, var5, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+var5 = nit___nit__Parser___pop(var_p);
 }
-RET_LABEL:;
+var_nodearraylist3 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-/* method parser#ReduceAction177#action for (self: ReduceAction177, Parser) */
-void nit__parser___nit__parser__ReduceAction177___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwcontinuenode2 /* var tkwcontinuenode2: nullable Object */;
-short int var2 /* : Bool */;
-int cltype;
-int idtype;
-val* var3 /* : AContinueExpr */;
-val* var4 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable AContinueExpr */;
-long var5 /* : Int */;
-long var6 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
+var_nodearraylist2 = var6;
 {
-var1 = nit___nit__Parser___pop(var_p);
+var7 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var_tkwcontinuenode2 = var_nodearraylist1;
-/* <var_tkwcontinuenode2:nullable Object> isa nullable TKwcontinue */
-cltype = type_nullable__nit__TKwcontinue.color;
-idtype = type_nullable__nit__TKwcontinue.id;
-if(var_tkwcontinuenode2 == NULL) {
-var2 = 1;
+var_nodearraylist1 = var7;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var8 = 1;
 } else {
-if(cltype >= var_tkwcontinuenode2->type->table_size) {
-var2 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var8 = 0;
 } else {
-var2 = var_tkwcontinuenode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var2)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5634);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5938);
+fatal_exit(1);
 }
-var3 = NEW_nit__AContinueExpr(&type_nit__AContinueExpr);
-var4 = NULL;
-{
-nit__parser_prod___AContinueExpr___init_acontinueexpr(var3, var_tkwcontinuenode2, var4); /* Direct call parser_prod#AContinueExpr#init_acontinueexpr on <var3:AContinueExpr>*/
+var_tidnode3 = var_nodearraylist5;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype10 = type_nullable__nit__TId.color;
+idtype11 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var9 = 1;
+} else {
+if(cltype10 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var9 = 0;
+} else {
+var9 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype10] == idtype11;
 }
-var_pexprnode1 = var3;
-var_node_list = var_pexprnode1;
-var5 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction177> */
-{
-var6 = nit___nit__Parser___go_to(var_p, var5);
 }
-{
-nit___nit__Parser___push(var_p, var6, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+if (unlikely(!var9)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5940);
+fatal_exit(1);
 }
-RET_LABEL:;
+var_pexprsnode4 = var_nodearraylist6;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype13 = type_nullable__nit__AExprs.color;
+idtype14 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var12 = 1;
+} else {
+if(cltype13 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var12 = 0;
+} else {
+var12 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype13] == idtype14;
 }
-/* method parser#ReduceAction178#action for (self: ReduceAction178, Parser) */
-void nit__parser___nit__parser__ReduceAction178___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwcontinuenode2 /* var tkwcontinuenode2: nullable Object */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-val* var_plabelnode3 /* var plabelnode3: nullable Object */;
-short int var4 /* : Bool */;
-int cltype5;
-int idtype6;
-val* var7 /* : AContinueExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AContinueExpr */;
-long var8 /* : Int */;
-long var9 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var12)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5942);
+fatal_exit(1);
 }
-var_nodearraylist1 = var2;
-var_tkwcontinuenode2 = var_nodearraylist1;
-/* <var_tkwcontinuenode2:nullable Object> isa nullable TKwcontinue */
-cltype = type_nullable__nit__TKwcontinue.color;
-idtype = type_nullable__nit__TKwcontinue.id;
-if(var_tkwcontinuenode2 == NULL) {
-var3 = 1;
+var_tassignnode5 = var_nodearraylist7;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype16 = type_nullable__nit__TAssign.color;
+idtype17 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
+var15 = 1;
 } else {
-if(cltype >= var_tkwcontinuenode2->type->table_size) {
-var3 = 0;
+if(cltype16 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
+var15 = 0;
 } else {
-var3 = var_tkwcontinuenode2->type->type_table[cltype] == idtype;
+var15 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype16] == idtype17;
 }
 }
-if (unlikely(!var3)) {
+if (unlikely(!var15)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5651);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5944);
+fatal_exit(1);
 }
-var_plabelnode3 = var_nodearraylist2;
-/* <var_plabelnode3:nullable Object> isa nullable ALabel */
-cltype5 = type_nullable__nit__ALabel.color;
-idtype6 = type_nullable__nit__ALabel.id;
-if(var_plabelnode3 == NULL) {
-var4 = 1;
+var_pexprnode6 = var_nodearraylist8;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype19 = type_nullable__nit__AExpr.color;
+idtype20 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var18 = 1;
 } else {
-if(cltype5 >= var_plabelnode3->type->table_size) {
-var4 = 0;
+if(cltype19 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var18 = 0;
 } else {
-var4 = var_plabelnode3->type->type_table[cltype5] == idtype6;
+var18 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype19] == idtype20;
 }
 }
-if (unlikely(!var4)) {
+if (unlikely(!var18)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5653);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5946);
+fatal_exit(1);
 }
-var7 = NEW_nit__AContinueExpr(&type_nit__AContinueExpr);
+var21 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___AContinueExpr___init_acontinueexpr(var7, var_tkwcontinuenode2, var_plabelnode3); /* Direct call parser_prod#AContinueExpr#init_acontinueexpr on <var7:AContinueExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var21, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var21:ACallAssignExpr>*/
 }
-var_pexprnode1 = var7;
+var_pexprnode1 = var21;
 var_node_list = var_pexprnode1;
-var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction178> */
+var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction211> */
 {
-var9 = nit___nit__Parser___go_to(var_p, var8);
+var23 = nit___nit__Parser___go_to(var_p, var22);
 }
 {
-nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction185#action for (self: ReduceAction185, Parser) */
-void nit__parser___nit__parser__ReduceAction185___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction212#action for (self: ReduceAction212, Parser) */
+void nit__parser___nit__parser__ReduceAction212___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
 val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var6 /* : Bool */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
 val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var13 /* : ACallExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
-long var14 /* : Int */;
-long var15 /* : Int */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var11 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var12 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_tassignnode6 /* var tassignnode6: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
+val* var19 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var20 /* : Int */;
+long var21 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var4;
+var_nodearraylist3 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var5;
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var6;
 var_pexprnode2 = var_nodearraylist1;
 /* <var_pexprnode2:nullable Object> isa nullable AExpr */
 cltype = type_nullable__nit__AExpr.color;
 idtype = type_nullable__nit__AExpr.id;
 if(var_pexprnode2 == NULL) {
-var6 = 1;
+var7 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var6 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var7 = 0;
 } else {
-var6 = var_pexprnode2->type->type_table[cltype] == idtype;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5673);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5971);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist4;
+var_tidnode3 = var_nodearraylist5;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype8 = type_nullable__nit__TId.color;
-idtype9 = type_nullable__nit__TId.id;
+cltype9 = type_nullable__nit__TId.color;
+idtype10 = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var7 = 1;
+var8 = 1;
 } else {
-if(cltype8 >= var_tidnode3->type->table_size) {
-var7 = 0;
+if(cltype9 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var8 = 0;
 } else {
-var7 = var_tidnode3->type->type_table[cltype8] == idtype9;
+var8 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5675);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5973);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist5;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype11 = type_nullable__nit__AExprs.color;
-idtype12 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var10 = 1;
+var11 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var11); /* Direct call array#Array#init on <var11:Array[Object]>*/
+}
+var_listnode5 = var11;
+var12 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var12, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var12:AListExprs>*/
+}
+var_pexprsnode4 = var12;
+var_tassignnode6 = var_nodearraylist6;
+/* <var_tassignnode6:nullable Object> isa nullable TAssign */
+cltype14 = type_nullable__nit__TAssign.color;
+idtype15 = type_nullable__nit__TAssign.id;
+if(var_tassignnode6 == NULL) {
+var13 = 1;
 } else {
-if(cltype11 >= var_pexprsnode4->type->table_size) {
-var10 = 0;
+if(cltype14 >= (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->table_size) {
+var13 = 0;
 } else {
-var10 = var_pexprsnode4->type->type_table[cltype11] == idtype12;
+var13 = (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var13)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5979);
+fatal_exit(1);
+}
+var_pexprnode7 = var_nodearraylist7;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype17 = type_nullable__nit__AExpr.color;
+idtype18 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var16 = 1;
+} else {
+if(cltype17 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var16 = 0;
+} else {
+var16 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype17] == idtype18;
+}
+}
+if (unlikely(!var16)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5677);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5981);
+fatal_exit(1);
 }
-var13 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
+var19 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ACallExpr___init_acallexpr(var13, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var13:ACallExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var19, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var19:ACallAssignExpr>*/
 }
-var_pexprnode1 = var13;
+var_pexprnode1 = var19;
 var_node_list = var_pexprnode1;
-var14 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction185> */
+var20 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction212> */
 {
-var15 = nit___nit__Parser___go_to(var_p, var14);
+var21 = nit___nit__Parser___go_to(var_p, var20);
 }
 {
-nit___nit__Parser___push(var_p, var15, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var21, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction186#action for (self: ReduceAction186, Parser) */
-void nit__parser___nit__parser__ReduceAction186___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction213#action for (self: ReduceAction213, Parser) */
+void nit__parser___nit__parser__ReduceAction213___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var5 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var6 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var7 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var8 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
 val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var7 /* : Bool */;
+short int var9 /* : Bool */;
 int cltype;
 int idtype;
 val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
 val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
-val* var14 /* : ACallExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
-long var15 /* : Int */;
-long var16 /* : Int */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var19 /* : Bool */;
+int cltype20;
+int idtype21;
+val* var22 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var23 /* : Int */;
+long var24 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist9 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var1;
+var_nodearraylist8 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var2;
+var_nodearraylist7 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var3;
+var_nodearraylist6 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var4;
+var_nodearraylist5 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var5;
+var_nodearraylist4 = var5;
 {
 var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var6;
+var_nodearraylist3 = var6;
+{
+var7 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var7;
+{
+var8 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var8;
 var_pexprnode2 = var_nodearraylist1;
 /* <var_pexprnode2:nullable Object> isa nullable AExpr */
 cltype = type_nullable__nit__AExpr.color;
 idtype = type_nullable__nit__AExpr.id;
 if(var_pexprnode2 == NULL) {
-var7 = 1;
+var9 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var7 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var9 = 0;
 } else {
-var7 = var_pexprnode2->type->type_table[cltype] == idtype;
+var9 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5699);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6008);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist5;
+var_tidnode3 = var_nodearraylist6;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype9 = type_nullable__nit__TId.color;
-idtype10 = type_nullable__nit__TId.id;
+cltype11 = type_nullable__nit__TId.color;
+idtype12 = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var8 = 1;
+var10 = 1;
 } else {
-if(cltype9 >= var_tidnode3->type->table_size) {
-var8 = 0;
+if(cltype11 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var10 = 0;
 } else {
-var8 = var_tidnode3->type->type_table[cltype9] == idtype10;
+var10 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5701);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6010);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist6;
+var_pexprsnode4 = var_nodearraylist7;
 /* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype12 = type_nullable__nit__AExprs.color;
-idtype13 = type_nullable__nit__AExprs.id;
+cltype14 = type_nullable__nit__AExprs.color;
+idtype15 = type_nullable__nit__AExprs.id;
 if(var_pexprsnode4 == NULL) {
-var11 = 1;
+var13 = 1;
 } else {
-if(cltype12 >= var_pexprsnode4->type->table_size) {
-var11 = 0;
+if(cltype14 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var13 = 0;
+} else {
+var13 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype14] == idtype15;
+}
+}
+if (unlikely(!var13)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6012);
+fatal_exit(1);
+}
+var_tassignnode5 = var_nodearraylist8;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype17 = type_nullable__nit__TAssign.color;
+idtype18 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
+var16 = 1;
+} else {
+if(cltype17 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
+var16 = 0;
+} else {
+var16 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype17] == idtype18;
+}
+}
+if (unlikely(!var16)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6014);
+fatal_exit(1);
+}
+var_pexprnode6 = var_nodearraylist9;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype20 = type_nullable__nit__AExpr.color;
+idtype21 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var19 = 1;
+} else {
+if(cltype20 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var19 = 0;
 } else {
-var11 = var_pexprsnode4->type->type_table[cltype12] == idtype13;
+var19 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype20] == idtype21;
 }
 }
-if (unlikely(!var11)) {
+if (unlikely(!var19)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5703);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6016);
+fatal_exit(1);
 }
-var14 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
+var22 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ACallExpr___init_acallexpr(var14, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var14:ACallExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var22, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var22:ACallAssignExpr>*/
 }
-var_pexprnode1 = var14;
+var_pexprnode1 = var22;
 var_node_list = var_pexprnode1;
-var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction186> */
+var23 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction213> */
 {
-var16 = nit___nit__Parser___go_to(var_p, var15);
+var24 = nit___nit__Parser___go_to(var_p, var23);
 }
 {
-nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var24, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction187#action for (self: ReduceAction187, Parser) */
-void nit__parser___nit__parser__ReduceAction187___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction214#action for (self: ReduceAction214, Parser) */
+void nit__parser___nit__parser__ReduceAction214___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var2 /* : nullable Object */;
@@ -3483,17 +3265,28 @@ val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var15 /* : ACallExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
-long var16 /* : Int */;
-long var17 /* : Int */;
+val* var12 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var13 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_tassignnode6 /* var tassignnode6: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var20 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var21 /* : Int */;
+long var22 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist8 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -3529,16 +3322,16 @@ idtype = type_nullable__nit__AExpr.id;
 if(var_pexprnode2 == NULL) {
 var8 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5726);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6042);
+fatal_exit(1);
 }
 var_tidnode3 = var_nodearraylist6;
 /* <var_tidnode3:nullable Object> isa nullable TId */
@@ -3547,147 +3340,84 @@ idtype11 = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
 var9 = 1;
 } else {
-if(cltype10 >= var_tidnode3->type->table_size) {
+if(cltype10 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype10] == idtype11;
+var9 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype10] == idtype11;
 }
 }
 if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5728);
-show_backtrace(1);
-}
-var_pexprsnode4 = var_nodearraylist7;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype13 = type_nullable__nit__AExprs.color;
-idtype14 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var12 = 1;
-} else {
-if(cltype13 >= var_pexprsnode4->type->table_size) {
-var12 = 0;
-} else {
-var12 = var_pexprsnode4->type->type_table[cltype13] == idtype14;
-}
-}
-if (unlikely(!var12)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5730);
-show_backtrace(1);
-}
-var15 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
-{
-nit__parser_prod___ACallExpr___init_acallexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var15:ACallExpr>*/
-}
-var_pexprnode1 = var15;
-var_node_list = var_pexprnode1;
-var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction187> */
-{
-var17 = nit___nit__Parser___go_to(var_p, var16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6044);
+fatal_exit(1);
 }
+var12 = NEW_standard__Array(&type_standard__Array__standard__Object);
 {
-nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
-}
-/* method parser#ReduceAction189#action for (self: ReduceAction189, Parser) */
-void nit__parser___nit__parser__ReduceAction189___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var5 /* : Bool */;
-int cltype;
-int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-val* var9 /* : ACallExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
-long var10 /* : Int */;
-long var11 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
+standard___standard__Array___standard__kernel__Object__init(var12); /* Direct call array#Array#init on <var12:Array[Object]>*/
 }
-var_nodearraylist1 = var2;
-var3 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_listnode5 = var12;
+var13 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var3) on <var3:AImplicitSelfExpr> */
-RET_LABEL4:(void)0;
-}
+nit__parser_prod___AListExprs___init_alistexprs(var13, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var13:AListExprs>*/
 }
-var_pexprnode2 = var3;
-var_tidnode3 = var_nodearraylist1;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var5 = 1;
+var_pexprsnode4 = var13;
+var_tassignnode6 = var_nodearraylist7;
+/* <var_tassignnode6:nullable Object> isa nullable TAssign */
+cltype15 = type_nullable__nit__TAssign.color;
+idtype16 = type_nullable__nit__TAssign.id;
+if(var_tassignnode6 == NULL) {
+var14 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var5 = 0;
+if(cltype15 >= (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->table_size) {
+var14 = 0;
 } else {
-var5 = var_tidnode3->type->type_table[cltype] == idtype;
+var14 = (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var5)) {
+if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5749);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6050);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist2;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype7 = type_nullable__nit__AExprs.color;
-idtype8 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var6 = 1;
+var_pexprnode7 = var_nodearraylist8;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype18 = type_nullable__nit__AExpr.color;
+idtype19 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var17 = 1;
 } else {
-if(cltype7 >= var_pexprsnode4->type->table_size) {
-var6 = 0;
+if(cltype18 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var17 = 0;
 } else {
-var6 = var_pexprsnode4->type->type_table[cltype7] == idtype8;
+var17 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype18] == idtype19;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var17)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5751);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6052);
+fatal_exit(1);
 }
-var9 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
+var20 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ACallExpr___init_acallexpr(var9, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var9:ACallExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var20, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var20:ACallAssignExpr>*/
 }
-var_pexprnode1 = var9;
+var_pexprnode1 = var20;
 var_node_list = var_pexprnode1;
-var10 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction189> */
+var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction214> */
 {
-var11 = nit___nit__Parser___go_to(var_p, var10);
+var22 = nit___nit__Parser___go_to(var_p, var21);
 }
 {
-nit___nit__Parser___push(var_p, var11, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction190#action for (self: ReduceAction190, Parser) */
-void nit__parser___nit__parser__ReduceAction190___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction217#action for (self: ReduceAction217, Parser) */
+void nit__parser___nit__parser__ReduceAction217___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var2 /* : nullable Object */;
@@ -3697,776 +3427,841 @@ val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
 val* var4 /* : AImplicitSelfExpr */;
 val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
 val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var6 /* : Bool */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
 val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var10 /* : ACallExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
-long var11 /* : Int */;
-long var12 /* : Int */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var15 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var16 /* : Int */;
+long var17 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var3;
-var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
-{
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var4) on <var4:AImplicitSelfExpr> */
-RET_LABEL5:(void)0;
-}
-}
-var_pexprnode2 = var4;
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var6 = 1;
-} else {
-if(cltype >= var_tidnode3->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_tidnode3->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5771);
-show_backtrace(1);
-}
-var_pexprsnode4 = var_nodearraylist3;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype8 = type_nullable__nit__AExprs.color;
-idtype9 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var7 = 1;
-} else {
-if(cltype8 >= var_pexprsnode4->type->table_size) {
-var7 = 0;
-} else {
-var7 = var_pexprsnode4->type->type_table[cltype8] == idtype9;
-}
-}
-if (unlikely(!var7)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5773);
-show_backtrace(1);
-}
-var10 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
-{
-nit__parser_prod___ACallExpr___init_acallexpr(var10, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var10:ACallExpr>*/
-}
-var_pexprnode1 = var10;
-var_node_list = var_pexprnode1;
-var11 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction190> */
+var_node_list = ((val*)NULL);
 {
-var12 = nit___nit__Parser___go_to(var_p, var11);
-}
-{
-nit___nit__Parser___push(var_p, var12, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+var = nit___nit__Parser___pop(var_p);
 }
-RET_LABEL:;
-}
-/* method parser#ReduceAction191#action for (self: ReduceAction191, Parser) */
-void nit__parser___nit__parser__ReduceAction191___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype;
-int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
-val* var11 /* : ACallExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallExpr */;
-long var12 /* : Int */;
-long var13 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist2 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist1 = var3;
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-}
-var_pexprnode2 = var5;
-var_tidnode3 = var_nodearraylist3;
+var_pexprnode2 = var4;
+var_tidnode3 = var_nodearraylist1;
 /* <var_tidnode3:nullable Object> isa nullable TId */
 cltype = type_nullable__nit__TId.color;
 idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var7 = 1;
+var5 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var7 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var5 = 0;
 } else {
-var7 = var_tidnode3->type->type_table[cltype] == idtype;
+var5 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5794);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6075);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist4;
+var_pexprsnode4 = var_nodearraylist2;
 /* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype9 = type_nullable__nit__AExprs.color;
-idtype10 = type_nullable__nit__AExprs.id;
+cltype7 = type_nullable__nit__AExprs.color;
+idtype8 = type_nullable__nit__AExprs.id;
 if(var_pexprsnode4 == NULL) {
-var8 = 1;
+var6 = 1;
 } else {
-if(cltype9 >= var_pexprsnode4->type->table_size) {
-var8 = 0;
+if(cltype7 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var6 = 0;
 } else {
-var8 = var_pexprsnode4->type->type_table[cltype9] == idtype10;
+var6 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype7] == idtype8;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var6)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6077);
+fatal_exit(1);
+}
+var_tassignnode5 = var_nodearraylist3;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype10 = type_nullable__nit__TAssign.color;
+idtype11 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
+var9 = 1;
+} else {
+if(cltype10 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
+var9 = 0;
+} else {
+var9 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype10] == idtype11;
+}
+}
+if (unlikely(!var9)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6079);
+fatal_exit(1);
+}
+var_pexprnode6 = var_nodearraylist4;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype13 = type_nullable__nit__AExpr.color;
+idtype14 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var12 = 1;
+} else {
+if(cltype13 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var12 = 0;
+} else {
+var12 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype13] == idtype14;
+}
+}
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5796);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6081);
+fatal_exit(1);
 }
-var11 = NEW_nit__ACallExpr(&type_nit__ACallExpr);
+var15 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ACallExpr___init_acallexpr(var11, var_pexprnode2, var_tidnode3, var_pexprsnode4); /* Direct call parser_prod#ACallExpr#init_acallexpr on <var11:ACallExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var15:ACallAssignExpr>*/
 }
-var_pexprnode1 = var11;
+var_pexprnode1 = var15;
 var_node_list = var_pexprnode1;
-var12 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction191> */
+var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction217> */
 {
-var13 = nit___nit__Parser___go_to(var_p, var12);
+var17 = nit___nit__Parser___go_to(var_p, var16);
 }
 {
-nit___nit__Parser___push(var_p, var13, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction193#action for (self: ReduceAction193, Parser) */
-void nit__parser___nit__parser__ReduceAction193___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction218#action for (self: ReduceAction218, Parser) */
+void nit__parser___nit__parser__ReduceAction218___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pqualifiednode2 /* var pqualifiednode2: nullable Object */;
+val* var3 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var4 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwsupernode3 /* var tkwsupernode3: nullable Object */;
-short int var5 /* : Bool */;
-int cltype6;
-int idtype7;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
-val* var11 /* : ASuperExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ASuperExpr */;
-long var12 /* : Int */;
-long var13 /* : Int */;
+val* var5 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var6 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_tassignnode6 /* var tassignnode6: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var13 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var14 /* : Int */;
+long var15 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var1;
+var_nodearraylist2 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var2;
+var_nodearraylist1 = var2;
+var3 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var3 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var3); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var3:AImplicitSelfExpr>*/
 }
-var_nodearraylist1 = var3;
-var_pqualifiednode2 = var_nodearraylist1;
-/* <var_pqualifiednode2:nullable Object> isa nullable AQualified */
-cltype = type_nullable__nit__AQualified.color;
-idtype = type_nullable__nit__AQualified.id;
-if(var_pqualifiednode2 == NULL) {
+var_pexprnode2 = var3;
+var_tidnode3 = var_nodearraylist1;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
 var4 = 1;
 } else {
-if(cltype >= var_pqualifiednode2->type->table_size) {
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var4 = 0;
 } else {
-var4 = var_pqualifiednode2->type->type_table[cltype] == idtype;
+var4 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5815);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6103);
+fatal_exit(1);
 }
-var_tkwsupernode3 = var_nodearraylist2;
-/* <var_tkwsupernode3:nullable Object> isa nullable TKwsuper */
-cltype6 = type_nullable__nit__TKwsuper.color;
-idtype7 = type_nullable__nit__TKwsuper.id;
-if(var_tkwsupernode3 == NULL) {
-var5 = 1;
+var5 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var5); /* Direct call array#Array#init on <var5:Array[Object]>*/
+}
+var_listnode5 = var5;
+var6 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var6, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var6:AListExprs>*/
+}
+var_pexprsnode4 = var6;
+var_tassignnode6 = var_nodearraylist2;
+/* <var_tassignnode6:nullable Object> isa nullable TAssign */
+cltype8 = type_nullable__nit__TAssign.color;
+idtype9 = type_nullable__nit__TAssign.id;
+if(var_tassignnode6 == NULL) {
+var7 = 1;
 } else {
-if(cltype6 >= var_tkwsupernode3->type->table_size) {
-var5 = 0;
+if(cltype8 >= (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->table_size) {
+var7 = 0;
 } else {
-var5 = var_tkwsupernode3->type->type_table[cltype6] == idtype7;
+var7 = (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var5)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5817);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6109);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist3;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype9 = type_nullable__nit__AExprs.color;
-idtype10 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var8 = 1;
+var_pexprnode7 = var_nodearraylist3;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype11 = type_nullable__nit__AExpr.color;
+idtype12 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var10 = 1;
 } else {
-if(cltype9 >= var_pexprsnode4->type->table_size) {
-var8 = 0;
+if(cltype11 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var10 = 0;
 } else {
-var8 = var_pexprsnode4->type->type_table[cltype9] == idtype10;
+var10 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5819);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6111);
+fatal_exit(1);
 }
-var11 = NEW_nit__ASuperExpr(&type_nit__ASuperExpr);
+var13 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___ASuperExpr___init_asuperexpr(var11, var_pqualifiednode2, var_tkwsupernode3, var_pexprsnode4); /* Direct call parser_prod#ASuperExpr#init_asuperexpr on <var11:ASuperExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var13, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var13:ACallAssignExpr>*/
 }
-var_pexprnode1 = var11;
+var_pexprnode1 = var13;
 var_node_list = var_pexprnode1;
-var12 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction193> */
+var14 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction218> */
 {
-var13 = nit___nit__Parser___go_to(var_p, var12);
+var15 = nit___nit__Parser___go_to(var_p, var14);
 }
 {
-nit___nit__Parser___push(var_p, var13, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var15, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction194#action for (self: ReduceAction194, Parser) */
-void nit__parser___nit__parser__ReduceAction194___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction219#action for (self: ReduceAction219, Parser) */
+void nit__parser___nit__parser__ReduceAction219___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+val* var5 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var7 /* : Bool */;
 int cltype8;
 int idtype9;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
 short int var10 /* : Bool */;
 int cltype11;
 int idtype12;
-val* var13 /* : AInitExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
-long var14 /* : Int */;
-long var15 /* : Int */;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var16 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var17 /* : Int */;
+long var18 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist4 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist3 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
+var_nodearraylist2 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var4;
+var_nodearraylist1 = var4;
+var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var5 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var5); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var5:AImplicitSelfExpr>*/
 }
-var_nodearraylist1 = var5;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
+var_pexprnode2 = var5;
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
 var6 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var6 = 0;
 } else {
-var6 = var_pexprnode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5840);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6135);
+fatal_exit(1);
 }
-var_tkwinitnode3 = var_nodearraylist4;
-/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
-cltype8 = type_nullable__nit__TKwinit.color;
-idtype9 = type_nullable__nit__TKwinit.id;
-if(var_tkwinitnode3 == NULL) {
+var_pexprsnode4 = var_nodearraylist3;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype8 = type_nullable__nit__AExprs.color;
+idtype9 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
 var7 = 1;
 } else {
-if(cltype8 >= var_tkwinitnode3->type->table_size) {
+if(cltype8 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_tkwinitnode3->type->type_table[cltype8] == idtype9;
+var7 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype8] == idtype9;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5842);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6137);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist5;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype11 = type_nullable__nit__AExprs.color;
-idtype12 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_tassignnode5 = var_nodearraylist4;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype11 = type_nullable__nit__TAssign.color;
+idtype12 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
 var10 = 1;
 } else {
-if(cltype11 >= var_pexprsnode4->type->table_size) {
+if(cltype11 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
 var10 = 0;
 } else {
-var10 = var_pexprsnode4->type->type_table[cltype11] == idtype12;
+var10 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype11] == idtype12;
+}
+}
+if (unlikely(!var10)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6139);
+fatal_exit(1);
+}
+var_pexprnode6 = var_nodearraylist5;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype14 = type_nullable__nit__AExpr.color;
+idtype15 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var13 = 1;
+} else {
+if(cltype14 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var13 = 0;
+} else {
+var13 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5844);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6141);
+fatal_exit(1);
 }
-var13 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+var16 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___AInitExpr___init_ainitexpr(var13, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var13:AInitExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var16, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var16:ACallAssignExpr>*/
 }
-var_pexprnode1 = var13;
+var_pexprnode1 = var16;
 var_node_list = var_pexprnode1;
-var14 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction194> */
+var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction219> */
 {
-var15 = nit___nit__Parser___go_to(var_p, var14);
+var18 = nit___nit__Parser___go_to(var_p, var17);
 }
 {
-nit___nit__Parser___push(var_p, var15, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction195#action for (self: ReduceAction195, Parser) */
-void nit__parser___nit__parser__ReduceAction195___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction220#action for (self: ReduceAction220, Parser) */
+void nit__parser___nit__parser__ReduceAction220___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var2 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var3 /* : AImplicitSelfExpr */;
+val* var4 /* : AImplicitSelfExpr */;
 val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-val* var9 /* : AInitExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
-long var10 /* : Int */;
-long var11 /* : Int */;
+val* var6 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var7 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_tassignnode6 /* var tassignnode6: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var14 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var2;
-var3 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist2 = var2;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var3) on <var3:AImplicitSelfExpr> */
-RET_LABEL4:(void)0;
+var3 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist1 = var3;
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+{
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-var_pexprnode2 = var3;
-var_tkwinitnode3 = var_nodearraylist1;
-/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
-cltype = type_nullable__nit__TKwinit.color;
-idtype = type_nullable__nit__TKwinit.id;
-if(var_tkwinitnode3 == NULL) {
+var_pexprnode2 = var4;
+var_tidnode3 = var_nodearraylist2;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
 var5 = 1;
 } else {
-if(cltype >= var_tkwinitnode3->type->table_size) {
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var5 = 0;
 } else {
-var5 = var_tkwinitnode3->type->type_table[cltype] == idtype;
+var5 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5863);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6164);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist2;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype7 = type_nullable__nit__AExprs.color;
-idtype8 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var6 = 1;
+var6 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var6); /* Direct call array#Array#init on <var6:Array[Object]>*/
+}
+var_listnode5 = var6;
+var7 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var7, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var7:AListExprs>*/
+}
+var_pexprsnode4 = var7;
+var_tassignnode6 = var_nodearraylist3;
+/* <var_tassignnode6:nullable Object> isa nullable TAssign */
+cltype9 = type_nullable__nit__TAssign.color;
+idtype10 = type_nullable__nit__TAssign.id;
+if(var_tassignnode6 == NULL) {
+var8 = 1;
 } else {
-if(cltype7 >= var_pexprsnode4->type->table_size) {
-var6 = 0;
+if(cltype9 >= (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->table_size) {
+var8 = 0;
 } else {
-var6 = var_pexprsnode4->type->type_table[cltype7] == idtype8;
+var8 = (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5865);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6170);
+fatal_exit(1);
 }
-var9 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+var_pexprnode7 = var_nodearraylist4;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype12 = type_nullable__nit__AExpr.color;
+idtype13 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var11 = 1;
+} else {
+if(cltype12 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype12] == idtype13;
+}
+}
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6172);
+fatal_exit(1);
+}
+var14 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___AInitExpr___init_ainitexpr(var9, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var9:AInitExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var14, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var14:ACallAssignExpr>*/
 }
-var_pexprnode1 = var9;
+var_pexprnode1 = var14;
 var_node_list = var_pexprnode1;
-var10 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction195> */
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction220> */
 {
-var11 = nit___nit__Parser___go_to(var_p, var10);
+var16 = nit___nit__Parser___go_to(var_p, var15);
 }
 {
-nit___nit__Parser___push(var_p, var11, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction196#action for (self: ReduceAction196, Parser) */
-void nit__parser___nit__parser__ReduceAction196___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction221#action for (self: ReduceAction221, Parser) */
+void nit__parser___nit__parser__ReduceAction221___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+val* var6 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_tassignnode5 /* var tassignnode5: nullable Object */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-val* var14 /* : AInitExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
-long var15 /* : Int */;
-long var16 /* : Int */;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var17 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
+long var18 /* : Int */;
+long var19 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var3;
+var_nodearraylist3 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var4;
+var_nodearraylist2 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var5;
+var_nodearraylist1 = var5;
+var6 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var6 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var6); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var6:AImplicitSelfExpr>*/
 }
-var_nodearraylist1 = var6;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
+var_pexprnode2 = var6;
+var_tidnode3 = var_nodearraylist3;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
 var7 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_pexprnode2->type->type_table[cltype] == idtype;
+var7 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5887);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6197);
+fatal_exit(1);
 }
-var_tkwinitnode3 = var_nodearraylist5;
-/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
-cltype9 = type_nullable__nit__TKwinit.color;
-idtype10 = type_nullable__nit__TKwinit.id;
-if(var_tkwinitnode3 == NULL) {
+var_pexprsnode4 = var_nodearraylist4;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype9 = type_nullable__nit__AExprs.color;
+idtype10 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
 var8 = 1;
 } else {
-if(cltype9 >= var_tkwinitnode3->type->table_size) {
+if(cltype9 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_tkwinitnode3->type->type_table[cltype9] == idtype10;
+var8 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype9] == idtype10;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5889);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6199);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist6;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype12 = type_nullable__nit__AExprs.color;
-idtype13 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_tassignnode5 = var_nodearraylist5;
+/* <var_tassignnode5:nullable Object> isa nullable TAssign */
+cltype12 = type_nullable__nit__TAssign.color;
+idtype13 = type_nullable__nit__TAssign.id;
+if(var_tassignnode5 == NULL) {
 var11 = 1;
 } else {
-if(cltype12 >= var_pexprsnode4->type->table_size) {
+if(cltype12 >= (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->table_size) {
 var11 = 0;
 } else {
-var11 = var_pexprsnode4->type->type_table[cltype12] == idtype13;
+var11 = (((long)var_tassignnode5&3)?type_info[((long)var_tassignnode5&3)]:var_tassignnode5->type)->type_table[cltype12] == idtype13;
 }
 }
 if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5891);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6201);
+fatal_exit(1);
 }
-var14 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+var_pexprnode6 = var_nodearraylist6;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype15 = type_nullable__nit__AExpr.color;
+idtype16 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var14 = 1;
+} else {
+if(cltype15 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var14 = 0;
+} else {
+var14 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype15] == idtype16;
+}
+}
+if (unlikely(!var14)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6203);
+fatal_exit(1);
+}
+var17 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___AInitExpr___init_ainitexpr(var14, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var14:AInitExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var17, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var17:ACallAssignExpr>*/
 }
-var_pexprnode1 = var14;
+var_pexprnode1 = var17;
 var_node_list = var_pexprnode1;
-var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction196> */
+var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction221> */
 {
-var16 = nit___nit__Parser___go_to(var_p, var15);
+var19 = nit___nit__Parser___go_to(var_p, var18);
 }
 {
-nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction197#action for (self: ReduceAction197, Parser) */
-void nit__parser___nit__parser__ReduceAction197___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction222#action for (self: ReduceAction222, Parser) */
+void nit__parser___nit__parser__ReduceAction222___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var5 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+val* var7 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var8 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_tassignnode6 /* var tassignnode6: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
 short int var12 /* : Bool */;
 int cltype13;
 int idtype14;
-val* var15 /* : AInitExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
+val* var15 /* : ACallAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
 long var16 /* : Int */;
 long var17 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist4 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist3 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
+var_nodearraylist2 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var6;
+var_nodearraylist1 = var4;
+var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var7 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var5); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var5:AImplicitSelfExpr>*/
 }
-var_nodearraylist1 = var7;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var8 = 1;
+var_pexprnode2 = var5;
+var_tidnode3 = var_nodearraylist3;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var6 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var8 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var6 = 0;
 } else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5914);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6227);
+fatal_exit(1);
 }
-var_tkwinitnode3 = var_nodearraylist6;
-/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
-cltype10 = type_nullable__nit__TKwinit.color;
-idtype11 = type_nullable__nit__TKwinit.id;
-if(var_tkwinitnode3 == NULL) {
+var7 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var7); /* Direct call array#Array#init on <var7:Array[Object]>*/
+}
+var_listnode5 = var7;
+var8 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var8, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var8:AListExprs>*/
+}
+var_pexprsnode4 = var8;
+var_tassignnode6 = var_nodearraylist4;
+/* <var_tassignnode6:nullable Object> isa nullable TAssign */
+cltype10 = type_nullable__nit__TAssign.color;
+idtype11 = type_nullable__nit__TAssign.id;
+if(var_tassignnode6 == NULL) {
 var9 = 1;
 } else {
-if(cltype10 >= var_tkwinitnode3->type->table_size) {
+if(cltype10 >= (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_tkwinitnode3->type->type_table[cltype10] == idtype11;
+var9 = (((long)var_tassignnode6&3)?type_info[((long)var_tassignnode6&3)]:var_tassignnode6->type)->type_table[cltype10] == idtype11;
 }
 }
 if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5916);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6233);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist7;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype13 = type_nullable__nit__AExprs.color;
-idtype14 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_pexprnode7 = var_nodearraylist5;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype13 = type_nullable__nit__AExpr.color;
+idtype14 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
 var12 = 1;
 } else {
-if(cltype13 >= var_pexprsnode4->type->table_size) {
+if(cltype13 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
 var12 = 0;
 } else {
-var12 = var_pexprsnode4->type->type_table[cltype13] == idtype14;
+var12 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype13] == idtype14;
 }
 }
 if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5918);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6235);
+fatal_exit(1);
 }
-var15 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+var15 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
 {
-nit__parser_prod___AInitExpr___init_ainitexpr(var15, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var15:AInitExpr>*/
+nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var15:ACallAssignExpr>*/
 }
 var_pexprnode1 = var15;
 var_node_list = var_pexprnode1;
-var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction197> */
+var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction222> */
 {
 var17 = nit___nit__Parser___go_to(var_p, var16);
 }
@@ -4475,34 +4270,44 @@ nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_wor
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction199#action for (self: ReduceAction199, Parser) */
-void nit__parser___nit__parser__ReduceAction199___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction225#action for (self: ReduceAction225, Parser) */
+void nit__parser___nit__parser__ReduceAction225___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var4 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
-short int var6 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var4 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var10 /* : AInitExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
-long var11 /* : Int */;
-long var12 /* : Int */;
+val* var_pexprsnode3 /* var pexprsnode3: nullable Object */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+val* var_tassignnode4 /* var tassignnode4: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var14 /* : ABraAssignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ABraAssignExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -4515,718 +4320,899 @@ var_nodearraylist2 = var2;
 var3 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var3;
-var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
-{
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var4) on <var4:AImplicitSelfExpr> */
-RET_LABEL5:(void)0;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var4 = 1;
+} else {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var4 = 0;
+} else {
+var4 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-var_pexprnode2 = var4;
-var_tkwinitnode3 = var_nodearraylist2;
-/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
-cltype = type_nullable__nit__TKwinit.color;
-idtype = type_nullable__nit__TKwinit.id;
-if(var_tkwinitnode3 == NULL) {
-var6 = 1;
+if (unlikely(!var4)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6257);
+fatal_exit(1);
+}
+var_pexprsnode3 = var_nodearraylist2;
+/* <var_pexprsnode3:nullable Object> isa nullable AExprs */
+cltype6 = type_nullable__nit__AExprs.color;
+idtype7 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode3 == NULL) {
+var5 = 1;
 } else {
-if(cltype >= var_tkwinitnode3->type->table_size) {
-var6 = 0;
+if(cltype6 >= (((long)var_pexprsnode3&3)?type_info[((long)var_pexprsnode3&3)]:var_pexprsnode3->type)->table_size) {
+var5 = 0;
 } else {
-var6 = var_tkwinitnode3->type->type_table[cltype] == idtype;
+var5 = (((long)var_pexprsnode3&3)?type_info[((long)var_pexprsnode3&3)]:var_pexprsnode3->type)->type_table[cltype6] == idtype7;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5938);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6259);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist3;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype8 = type_nullable__nit__AExprs.color;
-idtype9 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var7 = 1;
+var_tassignnode4 = var_nodearraylist3;
+/* <var_tassignnode4:nullable Object> isa nullable TAssign */
+cltype9 = type_nullable__nit__TAssign.color;
+idtype10 = type_nullable__nit__TAssign.id;
+if(var_tassignnode4 == NULL) {
+var8 = 1;
 } else {
-if(cltype8 >= var_pexprsnode4->type->table_size) {
-var7 = 0;
+if(cltype9 >= (((long)var_tassignnode4&3)?type_info[((long)var_tassignnode4&3)]:var_tassignnode4->type)->table_size) {
+var8 = 0;
 } else {
-var7 = var_pexprsnode4->type->type_table[cltype8] == idtype9;
+var8 = (((long)var_tassignnode4&3)?type_info[((long)var_tassignnode4&3)]:var_tassignnode4->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5940);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6261);
+fatal_exit(1);
+}
+var_pexprnode5 = var_nodearraylist4;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype12 = type_nullable__nit__AExpr.color;
+idtype13 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var11 = 1;
+} else {
+if(cltype12 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype12] == idtype13;
+}
+}
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6263);
+fatal_exit(1);
 }
-var10 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+var14 = NEW_nit__ABraAssignExpr(&type_nit__ABraAssignExpr);
 {
-nit__parser_prod___AInitExpr___init_ainitexpr(var10, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var10:AInitExpr>*/
+nit__parser_prod___ABraAssignExpr___init_abraassignexpr(var14, var_pexprnode2, var_pexprsnode3, var_tassignnode4, var_pexprnode5); /* Direct call parser_prod#ABraAssignExpr#init_abraassignexpr on <var14:ABraAssignExpr>*/
 }
-var_pexprnode1 = var10;
+var_pexprnode1 = var14;
 var_node_list = var_pexprnode1;
-var11 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction199> */
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction225> */
 {
-var12 = nit___nit__Parser___go_to(var_p, var11);
+var16 = nit___nit__Parser___go_to(var_p, var15);
 }
 {
-nit___nit__Parser___push(var_p, var12, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction200#action for (self: ReduceAction200, Parser) */
-void nit__parser___nit__parser__ReduceAction200___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction226#action for (self: ReduceAction226, Parser) */
+void nit__parser___nit__parser__ReduceAction226___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tkwinitnode3 /* var tkwinitnode3: nullable Object */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
 short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_tattridnode3 /* var tattridnode3: nullable Object */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-val* var11 /* : AInitExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AInitExpr */;
-long var12 /* : Int */;
-long var13 /* : Int */;
+val* var_passignopnode4 /* var passignopnode4: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var17 /* : AAttrReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AAttrReassignExpr */;
+long var18 /* : Int */;
+long var19 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist3 = var4;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
+var5 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var5;
-var_tkwinitnode3 = var_nodearraylist3;
-/* <var_tkwinitnode3:nullable Object> isa nullable TKwinit */
-cltype = type_nullable__nit__TKwinit.color;
-idtype = type_nullable__nit__TKwinit.id;
-if(var_tkwinitnode3 == NULL) {
+var_nodearraylist1 = var6;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
 var7 = 1;
 } else {
-if(cltype >= var_tkwinitnode3->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_tkwinitnode3->type->type_table[cltype] == idtype;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5961);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6287);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist4;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype9 = type_nullable__nit__AExprs.color;
-idtype10 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_tattridnode3 = var_nodearraylist5;
+/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
+cltype9 = type_nullable__nit__TAttrid.color;
+idtype10 = type_nullable__nit__TAttrid.id;
+if(var_tattridnode3 == NULL) {
 var8 = 1;
 } else {
-if(cltype9 >= var_pexprsnode4->type->table_size) {
-var8 = 0;
+if(cltype9 >= (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->table_size) {
+var8 = 0;
+} else {
+var8 = (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->type_table[cltype9] == idtype10;
+}
+}
+if (unlikely(!var8)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6289);
+fatal_exit(1);
+}
+var_passignopnode4 = var_nodearraylist6;
+/* <var_passignopnode4:nullable Object> isa nullable AAssignOp */
+cltype12 = type_nullable__nit__AAssignOp.color;
+idtype13 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode4 == NULL) {
+var11 = 1;
+} else {
+if(cltype12 >= (((long)var_passignopnode4&3)?type_info[((long)var_passignopnode4&3)]:var_passignopnode4->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_passignopnode4&3)?type_info[((long)var_passignopnode4&3)]:var_passignopnode4->type)->type_table[cltype12] == idtype13;
+}
+}
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6291);
+fatal_exit(1);
+}
+var_pexprnode5 = var_nodearraylist7;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype15 = type_nullable__nit__AExpr.color;
+idtype16 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var14 = 1;
+} else {
+if(cltype15 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var14 = 0;
 } else {
-var8 = var_pexprsnode4->type->type_table[cltype9] == idtype10;
+var14 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5963);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6293);
+fatal_exit(1);
 }
-var11 = NEW_nit__AInitExpr(&type_nit__AInitExpr);
+var17 = NEW_nit__AAttrReassignExpr(&type_nit__AAttrReassignExpr);
 {
-nit__parser_prod___AInitExpr___init_ainitexpr(var11, var_pexprnode2, var_tkwinitnode3, var_pexprsnode4); /* Direct call parser_prod#AInitExpr#init_ainitexpr on <var11:AInitExpr>*/
+nit__parser_prod___AAttrReassignExpr___init_aattrreassignexpr(var17, var_pexprnode2, var_tattridnode3, var_passignopnode4, var_pexprnode5); /* Direct call parser_prod#AAttrReassignExpr#init_aattrreassignexpr on <var17:AAttrReassignExpr>*/
 }
-var_pexprnode1 = var11;
+var_pexprnode1 = var17;
 var_node_list = var_pexprnode1;
-var12 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction200> */
+var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction226> */
 {
-var13 = nit___nit__Parser___go_to(var_p, var12);
+var19 = nit___nit__Parser___go_to(var_p, var18);
 }
 {
-nit___nit__Parser___push(var_p, var13, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction202#action for (self: ReduceAction202, Parser) */
-void nit__parser___nit__parser__ReduceAction202___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction227#action for (self: ReduceAction227, Parser) */
+void nit__parser___nit__parser__ReduceAction227___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwdebugnode2 /* var tkwdebugnode2: nullable Object */;
-short int var6 /* : Bool */;
+val* var4 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tattridnode3 /* var tattridnode3: nullable Object */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tkwtypenode3 /* var tkwtypenode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype8;
-int idtype9;
-val* var_pexprnode4 /* var pexprnode4: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var_ptypenode5 /* var ptypenode5: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var16 /* : ADebugTypeExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ADebugTypeExpr */;
-long var17 /* : Int */;
-long var18 /* : Int */;
+val* var_passignopnode4 /* var passignopnode4: nullable Object */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var12 /* : AAttrReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AAttrReassignExpr */;
+long var13 /* : Int */;
+long var14 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist2 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var4;
+var_nodearraylist1 = var3;
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var5;
-var_tkwdebugnode2 = var_nodearraylist1;
-/* <var_tkwdebugnode2:nullable Object> isa nullable TKwdebug */
-cltype = type_nullable__nit__TKwdebug.color;
-idtype = type_nullable__nit__TKwdebug.id;
-if(var_tkwdebugnode2 == NULL) {
-var6 = 1;
-} else {
-if(cltype >= var_tkwdebugnode2->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_tkwdebugnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5984);
-show_backtrace(1);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-var_tkwtypenode3 = var_nodearraylist2;
-/* <var_tkwtypenode3:nullable Object> isa nullable TKwtype */
-cltype8 = type_nullable__nit__TKwtype.color;
-idtype9 = type_nullable__nit__TKwtype.id;
-if(var_tkwtypenode3 == NULL) {
-var7 = 1;
+var_pexprnode2 = var4;
+var_tattridnode3 = var_nodearraylist2;
+/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
+cltype = type_nullable__nit__TAttrid.color;
+idtype = type_nullable__nit__TAttrid.id;
+if(var_tattridnode3 == NULL) {
+var5 = 1;
 } else {
-if(cltype8 >= var_tkwtypenode3->type->table_size) {
-var7 = 0;
+if(cltype >= (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->table_size) {
+var5 = 0;
 } else {
-var7 = var_tkwtypenode3->type->type_table[cltype8] == idtype9;
+var5 = (((long)var_tattridnode3&3)?type_info[((long)var_tattridnode3&3)]:var_tattridnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5986);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6315);
+fatal_exit(1);
 }
-var_pexprnode4 = var_nodearraylist5;
-/* <var_pexprnode4:nullable Object> isa nullable AExpr */
-cltype11 = type_nullable__nit__AExpr.color;
-idtype12 = type_nullable__nit__AExpr.id;
-if(var_pexprnode4 == NULL) {
-var10 = 1;
+var_passignopnode4 = var_nodearraylist3;
+/* <var_passignopnode4:nullable Object> isa nullable AAssignOp */
+cltype7 = type_nullable__nit__AAssignOp.color;
+idtype8 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode4 == NULL) {
+var6 = 1;
 } else {
-if(cltype11 >= var_pexprnode4->type->table_size) {
-var10 = 0;
+if(cltype7 >= (((long)var_passignopnode4&3)?type_info[((long)var_passignopnode4&3)]:var_passignopnode4->type)->table_size) {
+var6 = 0;
 } else {
-var10 = var_pexprnode4->type->type_table[cltype11] == idtype12;
+var6 = (((long)var_passignopnode4&3)?type_info[((long)var_passignopnode4&3)]:var_passignopnode4->type)->type_table[cltype7] == idtype8;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5988);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6317);
+fatal_exit(1);
 }
-var_ptypenode5 = var_nodearraylist3;
-/* <var_ptypenode5:nullable Object> isa nullable AType */
-cltype14 = type_nullable__nit__AType.color;
-idtype15 = type_nullable__nit__AType.id;
-if(var_ptypenode5 == NULL) {
-var13 = 1;
+var_pexprnode5 = var_nodearraylist4;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype10 = type_nullable__nit__AExpr.color;
+idtype11 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var9 = 1;
 } else {
-if(cltype14 >= var_ptypenode5->type->table_size) {
-var13 = 0;
+if(cltype10 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var9 = 0;
 } else {
-var13 = var_ptypenode5->type->type_table[cltype14] == idtype15;
+var9 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 5990);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6319);
+fatal_exit(1);
 }
-var16 = NEW_nit__ADebugTypeExpr(&type_nit__ADebugTypeExpr);
+var12 = NEW_nit__AAttrReassignExpr(&type_nit__AAttrReassignExpr);
 {
-nit__parser_prod___ADebugTypeExpr___init_adebugtypeexpr(var16, var_tkwdebugnode2, var_tkwtypenode3, var_pexprnode4, var_ptypenode5); /* Direct call parser_prod#ADebugTypeExpr#init_adebugtypeexpr on <var16:ADebugTypeExpr>*/
+nit__parser_prod___AAttrReassignExpr___init_aattrreassignexpr(var12, var_pexprnode2, var_tattridnode3, var_passignopnode4, var_pexprnode5); /* Direct call parser_prod#AAttrReassignExpr#init_aattrreassignexpr on <var12:AAttrReassignExpr>*/
 }
-var_pexprnode1 = var16;
+var_pexprnode1 = var12;
 var_node_list = var_pexprnode1;
-var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction202> */
+var13 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction227> */
 {
-var18 = nit___nit__Parser___go_to(var_p, var17);
+var14 = nit___nit__Parser___go_to(var_p, var13);
 }
 {
-nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var14, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction203#action for (self: ReduceAction203, Parser) */
-void nit__parser___nit__parser__ReduceAction203___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction228#action for (self: ReduceAction228, Parser) */
+void nit__parser___nit__parser__ReduceAction228___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var2 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var3 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwlabelnode2 /* var tkwlabelnode2: nullable Object */;
-short int var2 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var3 /* : ALabel */;
-val* var4 /* : null */;
-val* var_plabelnode1 /* var plabelnode1: nullable ALabel */;
-long var5 /* : Int */;
-long var6 /* : Int */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var_passignopnode5 /* var passignopnode5: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var20 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var21 /* : Int */;
+long var22 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var1;
-var_tkwlabelnode2 = var_nodearraylist1;
-/* <var_tkwlabelnode2:nullable Object> isa nullable TKwlabel */
-cltype = type_nullable__nit__TKwlabel.color;
-idtype = type_nullable__nit__TKwlabel.id;
-if(var_tkwlabelnode2 == NULL) {
-var2 = 1;
-} else {
-if(cltype >= var_tkwlabelnode2->type->table_size) {
-var2 = 0;
-} else {
-var2 = var_tkwlabelnode2->type->type_table[cltype] == idtype;
+var_nodearraylist7 = var;
+{
+var1 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist6 = var1;
+{
+var2 = nit___nit__Parser___pop(var_p);
 }
-if (unlikely(!var2)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6008);
-show_backtrace(1);
+var_nodearraylist5 = var2;
+{
+var3 = nit___nit__Parser___pop(var_p);
 }
-var3 = NEW_nit__ALabel(&type_nit__ALabel);
-var4 = NULL;
+var_nodearraylist4 = var3;
 {
-nit__parser_prod___ALabel___init_alabel(var3, var_tkwlabelnode2, var4); /* Direct call parser_prod#ALabel#init_alabel on <var3:ALabel>*/
+var4 = nit___nit__Parser___pop(var_p);
 }
-var_plabelnode1 = var3;
-var_node_list = var_plabelnode1;
-var5 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction203> */
+var_nodearraylist3 = var4;
 {
-var6 = nit___nit__Parser___go_to(var_p, var5);
+var5 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist2 = var5;
 {
-nit___nit__Parser___push(var_p, var6, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+var6 = nit___nit__Parser___pop(var_p);
 }
-RET_LABEL:;
+var_nodearraylist1 = var6;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var7 = 1;
+} else {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var7 = 0;
+} else {
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
-/* method parser#ReduceAction204#action for (self: ReduceAction204, Parser) */
-void nit__parser___nit__parser__ReduceAction204___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwlabelnode2 /* var tkwlabelnode2: nullable Object */;
-short int var3 /* : Bool */;
-int cltype;
-int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var4 /* : Bool */;
-int cltype5;
-int idtype6;
-val* var7 /* : ALabel */;
-val* var_plabelnode1 /* var plabelnode1: nullable ALabel */;
-long var8 /* : Int */;
-long var9 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6343);
+fatal_exit(1);
+}
+var_tidnode3 = var_nodearraylist4;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype9 = type_nullable__nit__TId.color;
+idtype10 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var8 = 1;
+} else {
+if(cltype9 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var8 = 0;
+} else {
+var8 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype9] == idtype10;
+}
+}
+if (unlikely(!var8)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6345);
+fatal_exit(1);
+}
+var_pexprsnode4 = var_nodearraylist5;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype12 = type_nullable__nit__AExprs.color;
+idtype13 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var11 = 1;
+} else {
+if(cltype12 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var11 = 0;
+} else {
+var11 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype12] == idtype13;
+}
 }
-var_nodearraylist1 = var2;
-var_tkwlabelnode2 = var_nodearraylist1;
-/* <var_tkwlabelnode2:nullable Object> isa nullable TKwlabel */
-cltype = type_nullable__nit__TKwlabel.color;
-idtype = type_nullable__nit__TKwlabel.id;
-if(var_tkwlabelnode2 == NULL) {
-var3 = 1;
+if (unlikely(!var11)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6347);
+fatal_exit(1);
+}
+var_passignopnode5 = var_nodearraylist6;
+/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
+cltype15 = type_nullable__nit__AAssignOp.color;
+idtype16 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode5 == NULL) {
+var14 = 1;
 } else {
-if(cltype >= var_tkwlabelnode2->type->table_size) {
-var3 = 0;
+if(cltype15 >= (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->table_size) {
+var14 = 0;
 } else {
-var3 = var_tkwlabelnode2->type->type_table[cltype] == idtype;
+var14 = (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var3)) {
+if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6025);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6349);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype5 = type_nullable__nit__TId.color;
-idtype6 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var4 = 1;
+var_pexprnode6 = var_nodearraylist7;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype18 = type_nullable__nit__AExpr.color;
+idtype19 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var17 = 1;
 } else {
-if(cltype5 >= var_tidnode3->type->table_size) {
-var4 = 0;
+if(cltype18 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var17 = 0;
 } else {
-var4 = var_tidnode3->type->type_table[cltype5] == idtype6;
+var17 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype18] == idtype19;
 }
 }
-if (unlikely(!var4)) {
+if (unlikely(!var17)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6027);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6351);
+fatal_exit(1);
 }
-var7 = NEW_nit__ALabel(&type_nit__ALabel);
+var20 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ALabel___init_alabel(var7, var_tkwlabelnode2, var_tidnode3); /* Direct call parser_prod#ALabel#init_alabel on <var7:ALabel>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var20, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var20:ACallReassignExpr>*/
 }
-var_plabelnode1 = var7;
-var_node_list = var_plabelnode1;
-var8 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction204> */
+var_pexprnode1 = var20;
+var_node_list = var_pexprnode1;
+var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction228> */
 {
-var9 = nit___nit__Parser___go_to(var_p, var8);
+var22 = nit___nit__Parser___go_to(var_p, var21);
 }
 {
-nit___nit__Parser___push(var_p, var9, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction205#action for (self: ReduceAction205, Parser) */
-void nit__parser___nit__parser__ReduceAction205___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction229#action for (self: ReduceAction229, Parser) */
+void nit__parser___nit__parser__ReduceAction229___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var3 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
-short int var4 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
 val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var5 /* : Bool */;
-int cltype6;
-int idtype7;
-val* var_ptypenode4 /* var ptypenode4: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
-val* var11 /* : AVardeclExpr */;
-val* var12 /* : null */;
-val* var13 /* : null */;
-val* var14 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
-long var15 /* : Int */;
-long var16 /* : Int */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var10 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var11 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_passignopnode6 /* var passignopnode6: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+val* var18 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var19 /* : Int */;
+long var20 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var3;
-var_tkwvarnode2 = var_nodearraylist1;
-/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
-cltype = type_nullable__nit__TKwvar.color;
-idtype = type_nullable__nit__TKwvar.id;
-if(var_tkwvarnode2 == NULL) {
-var4 = 1;
+var_nodearraylist3 = var3;
+{
+var4 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var5;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var6 = 1;
 } else {
-if(cltype >= var_tkwvarnode2->type->table_size) {
-var4 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var6 = 0;
 } else {
-var4 = var_tkwvarnode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var4)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6045);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6375);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist2;
+var_tidnode3 = var_nodearraylist4;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype6 = type_nullable__nit__TId.color;
-idtype7 = type_nullable__nit__TId.id;
+cltype8 = type_nullable__nit__TId.color;
+idtype9 = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var5 = 1;
+var7 = 1;
 } else {
-if(cltype6 >= var_tidnode3->type->table_size) {
-var5 = 0;
+if(cltype8 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var7 = 0;
 } else {
-var5 = var_tidnode3->type->type_table[cltype6] == idtype7;
+var7 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var5)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6047);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6377);
+fatal_exit(1);
 }
-var_ptypenode4 = var_nodearraylist3;
-/* <var_ptypenode4:nullable Object> isa nullable AType */
-cltype9 = type_nullable__nit__AType.color;
-idtype10 = type_nullable__nit__AType.id;
-if(var_ptypenode4 == NULL) {
-var8 = 1;
+var10 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var10); /* Direct call array#Array#init on <var10:Array[Object]>*/
+}
+var_listnode5 = var10;
+var11 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var11, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var11:AListExprs>*/
+}
+var_pexprsnode4 = var11;
+var_passignopnode6 = var_nodearraylist5;
+/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
+cltype13 = type_nullable__nit__AAssignOp.color;
+idtype14 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode6 == NULL) {
+var12 = 1;
 } else {
-if(cltype9 >= var_ptypenode4->type->table_size) {
-var8 = 0;
+if(cltype13 >= (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->table_size) {
+var12 = 0;
 } else {
-var8 = var_ptypenode4->type->type_table[cltype9] == idtype10;
+var12 = (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var12)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6383);
+fatal_exit(1);
+}
+var_pexprnode7 = var_nodearraylist6;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype16 = type_nullable__nit__AExpr.color;
+idtype17 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var15 = 1;
+} else {
+if(cltype16 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var15 = 0;
+} else {
+var15 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype16] == idtype17;
+}
+}
+if (unlikely(!var15)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6049);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6385);
+fatal_exit(1);
 }
-var11 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
-var12 = NULL;
-var13 = NULL;
-var14 = NULL;
+var18 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___AVardeclExpr___init_avardeclexpr(var11, var_tkwvarnode2, var_tidnode3, var_ptypenode4, var12, var13, var14); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var11:AVardeclExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var18, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var18:ACallReassignExpr>*/
 }
-var_pexprnode1 = var11;
+var_pexprnode1 = var18;
 var_node_list = var_pexprnode1;
-var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction205> */
+var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction229> */
 {
-var16 = nit___nit__Parser___go_to(var_p, var15);
+var20 = nit___nit__Parser___go_to(var_p, var19);
 }
 {
-nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction206#action for (self: ReduceAction206, Parser) */
-void nit__parser___nit__parser__ReduceAction206___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction230#action for (self: ReduceAction230, Parser) */
+void nit__parser___nit__parser__ReduceAction230___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var6 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var7 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
-short int var5 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var8 /* : Bool */;
 int cltype;
 int idtype;
 val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-val* var_ptypenode4 /* var ptypenode4: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_pannotationsnode7 /* var pannotationsnode7: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
 short int var12 /* : Bool */;
 int cltype13;
 int idtype14;
-val* var15 /* : AVardeclExpr */;
-val* var16 /* : null */;
-val* var17 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
-long var18 /* : Int */;
-long var19 /* : Int */;
+val* var_passignopnode5 /* var passignopnode5: nullable Object */;
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var18 /* : Bool */;
+int cltype19;
+int idtype20;
+val* var21 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var22 /* : Int */;
+long var23 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist8 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist7 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist6 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist5 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var_tkwvarnode2 = var_nodearraylist1;
-/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
-cltype = type_nullable__nit__TKwvar.color;
-idtype = type_nullable__nit__TKwvar.id;
-if(var_tkwvarnode2 == NULL) {
-var5 = 1;
+var_nodearraylist4 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var6;
+{
+var7 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var7;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var8 = 1;
 } else {
-if(cltype >= var_tkwvarnode2->type->table_size) {
-var5 = 0;
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var8 = 0;
 } else {
-var5 = var_tkwvarnode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var5)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6072);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6411);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist2;
+var_tidnode3 = var_nodearraylist5;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype7 = type_nullable__nit__TId.color;
-idtype8 = type_nullable__nit__TId.id;
+cltype10 = type_nullable__nit__TId.color;
+idtype11 = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var6 = 1;
-} else {
-if(cltype7 >= var_tidnode3->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_tidnode3->type->type_table[cltype7] == idtype8;
-}
-}
-if (unlikely(!var6)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6074);
-show_backtrace(1);
-}
-var_ptypenode4 = var_nodearraylist4;
-/* <var_ptypenode4:nullable Object> isa nullable AType */
-cltype10 = type_nullable__nit__AType.color;
-idtype11 = type_nullable__nit__AType.id;
-if(var_ptypenode4 == NULL) {
 var9 = 1;
 } else {
-if(cltype10 >= var_ptypenode4->type->table_size) {
+if(cltype10 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_ptypenode4->type->type_table[cltype10] == idtype11;
+var9 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype10] == idtype11;
 }
 }
 if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6076);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6413);
+fatal_exit(1);
 }
-var_pannotationsnode7 = var_nodearraylist3;
-/* <var_pannotationsnode7:nullable Object> isa nullable AAnnotations */
-cltype13 = type_nullable__nit__AAnnotations.color;
-idtype14 = type_nullable__nit__AAnnotations.id;
-if(var_pannotationsnode7 == NULL) {
+var_pexprsnode4 = var_nodearraylist6;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype13 = type_nullable__nit__AExprs.color;
+idtype14 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
 var12 = 1;
 } else {
-if(cltype13 >= var_pannotationsnode7->type->table_size) {
+if(cltype13 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
 var12 = 0;
 } else {
-var12 = var_pannotationsnode7->type->type_table[cltype13] == idtype14;
+var12 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype13] == idtype14;
 }
 }
 if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6078);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6415);
+fatal_exit(1);
 }
-var15 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
-var16 = NULL;
-var17 = NULL;
+var_passignopnode5 = var_nodearraylist7;
+/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
+cltype16 = type_nullable__nit__AAssignOp.color;
+idtype17 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode5 == NULL) {
+var15 = 1;
+} else {
+if(cltype16 >= (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->table_size) {
+var15 = 0;
+} else {
+var15 = (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->type_table[cltype16] == idtype17;
+}
+}
+if (unlikely(!var15)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6417);
+fatal_exit(1);
+}
+var_pexprnode6 = var_nodearraylist8;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype19 = type_nullable__nit__AExpr.color;
+idtype20 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var18 = 1;
+} else {
+if(cltype19 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var18 = 0;
+} else {
+var18 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype19] == idtype20;
+}
+}
+if (unlikely(!var18)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6419);
+fatal_exit(1);
+}
+var21 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___AVardeclExpr___init_avardeclexpr(var15, var_tkwvarnode2, var_tidnode3, var_ptypenode4, var16, var17, var_pannotationsnode7); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var15:AVardeclExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var21, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var21:ACallReassignExpr>*/
 }
-var_pexprnode1 = var15;
+var_pexprnode1 = var21;
 var_node_list = var_pexprnode1;
-var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction206> */
+var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction230> */
 {
-var19 = nit___nit__Parser___go_to(var_p, var18);
+var23 = nit___nit__Parser___go_to(var_p, var22);
 }
 {
-nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction207#action for (self: ReduceAction207, Parser) */
-void nit__parser___nit__parser__ReduceAction207___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction231#action for (self: ReduceAction231, Parser) */
+void nit__parser___nit__parser__ReduceAction231___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
@@ -5239,7 +5225,7 @@ val* var5 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
 short int var7 /* : Bool */;
 int cltype;
 int idtype;
@@ -5247,26 +5233,28 @@ val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-val* var_ptypenode4 /* var ptypenode4: nullable Object */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-val* var20 /* : AVardeclExpr */;
-val* var21 /* : null */;
-val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
-long var22 /* : Int */;
-long var23 /* : Int */;
+val* var11 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var12 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_passignopnode6 /* var passignopnode6: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
+val* var19 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var20 /* : Int */;
+long var21 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -5291,318 +5279,298 @@ var_nodearraylist2 = var5;
 var6 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var6;
-var_tkwvarnode2 = var_nodearraylist1;
-/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
-cltype = type_nullable__nit__TKwvar.color;
-idtype = type_nullable__nit__TKwvar.id;
-if(var_tkwvarnode2 == NULL) {
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
 var7 = 1;
 } else {
-if(cltype >= var_tkwvarnode2->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_tkwvarnode2->type->type_table[cltype] == idtype;
+var7 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6103);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6444);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist2;
+var_tidnode3 = var_nodearraylist5;
 /* <var_tidnode3:nullable Object> isa nullable TId */
 cltype9 = type_nullable__nit__TId.color;
 idtype10 = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
 var8 = 1;
 } else {
-if(cltype9 >= var_tidnode3->type->table_size) {
+if(cltype9 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_tidnode3->type->type_table[cltype9] == idtype10;
+var8 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype9] == idtype10;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6105);
-show_backtrace(1);
-}
-var_ptypenode4 = var_nodearraylist3;
-/* <var_ptypenode4:nullable Object> isa nullable AType */
-cltype12 = type_nullable__nit__AType.color;
-idtype13 = type_nullable__nit__AType.id;
-if(var_ptypenode4 == NULL) {
-var11 = 1;
-} else {
-if(cltype12 >= var_ptypenode4->type->table_size) {
-var11 = 0;
-} else {
-var11 = var_ptypenode4->type->type_table[cltype12] == idtype13;
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6446);
+fatal_exit(1);
 }
+var11 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var11); /* Direct call array#Array#init on <var11:Array[Object]>*/
 }
-if (unlikely(!var11)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6107);
-show_backtrace(1);
+var_listnode5 = var11;
+var12 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var12, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var12:AListExprs>*/
 }
-var_tassignnode5 = var_nodearraylist4;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype15 = type_nullable__nit__TAssign.color;
-idtype16 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var14 = 1;
+var_pexprsnode4 = var12;
+var_passignopnode6 = var_nodearraylist6;
+/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
+cltype14 = type_nullable__nit__AAssignOp.color;
+idtype15 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode6 == NULL) {
+var13 = 1;
 } else {
-if(cltype15 >= var_tassignnode5->type->table_size) {
-var14 = 0;
+if(cltype14 >= (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->table_size) {
+var13 = 0;
 } else {
-var14 = var_tassignnode5->type->type_table[cltype15] == idtype16;
+var13 = (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6109);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6452);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist6;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype18 = type_nullable__nit__AExpr.color;
-idtype19 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var17 = 1;
+var_pexprnode7 = var_nodearraylist7;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype17 = type_nullable__nit__AExpr.color;
+idtype18 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var16 = 1;
 } else {
-if(cltype18 >= var_pexprnode6->type->table_size) {
-var17 = 0;
+if(cltype17 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var16 = 0;
 } else {
-var17 = var_pexprnode6->type->type_table[cltype18] == idtype19;
+var16 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype17] == idtype18;
 }
 }
-if (unlikely(!var17)) {
+if (unlikely(!var16)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6111);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6454);
+fatal_exit(1);
 }
-var20 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
-var21 = NULL;
+var19 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___AVardeclExpr___init_avardeclexpr(var20, var_tkwvarnode2, var_tidnode3, var_ptypenode4, var_tassignnode5, var_pexprnode6, var21); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var20:AVardeclExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var19, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var19:ACallReassignExpr>*/
 }
-var_pexprnode1 = var20;
+var_pexprnode1 = var19;
 var_node_list = var_pexprnode1;
-var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction207> */
+var20 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction231> */
 {
-var23 = nit___nit__Parser___go_to(var_p, var22);
+var21 = nit___nit__Parser___go_to(var_p, var20);
 }
 {
-nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var21, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction208#action for (self: ReduceAction208, Parser) */
-void nit__parser___nit__parser__ReduceAction208___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction232#action for (self: ReduceAction232, Parser) */
+void nit__parser___nit__parser__ReduceAction232___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var5 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var6 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var7 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var8 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_tkwvarnode2 /* var tkwvarnode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var9 /* : Bool */;
 int cltype;
 int idtype;
 val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var_ptypenode4 /* var ptypenode4: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var_passignopnode5 /* var passignopnode5: nullable Object */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
 val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var18 /* : Bool */;
-int cltype19;
-int idtype20;
-val* var_pannotationsnode7 /* var pannotationsnode7: nullable Object */;
-short int var21 /* : Bool */;
-int cltype22;
-int idtype23;
-val* var24 /* : AVardeclExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AVardeclExpr */;
-long var25 /* : Int */;
-long var26 /* : Int */;
+short int var19 /* : Bool */;
+int cltype20;
+int idtype21;
+val* var22 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var23 /* : Int */;
+long var24 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist9 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist8 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist7 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
+var_nodearraylist6 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var4;
+var_nodearraylist5 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var5;
+var_nodearraylist4 = var5;
 {
 var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var6;
+var_nodearraylist3 = var6;
 {
 var7 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var7;
-var_tkwvarnode2 = var_nodearraylist1;
-/* <var_tkwvarnode2:nullable Object> isa nullable TKwvar */
-cltype = type_nullable__nit__TKwvar.color;
-idtype = type_nullable__nit__TKwvar.id;
-if(var_tkwvarnode2 == NULL) {
-var8 = 1;
-} else {
-if(cltype >= var_tkwvarnode2->type->table_size) {
-var8 = 0;
-} else {
-var8 = var_tkwvarnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var8)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6137);
-show_backtrace(1);
+var_nodearraylist2 = var7;
+{
+var8 = nit___nit__Parser___pop(var_p);
 }
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype10 = type_nullable__nit__TId.color;
-idtype11 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
+var_nodearraylist1 = var8;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
 var9 = 1;
 } else {
-if(cltype10 >= var_tidnode3->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype10] == idtype11;
+var9 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6139);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6481);
+fatal_exit(1);
 }
-var_ptypenode4 = var_nodearraylist4;
-/* <var_ptypenode4:nullable Object> isa nullable AType */
-cltype13 = type_nullable__nit__AType.color;
-idtype14 = type_nullable__nit__AType.id;
-if(var_ptypenode4 == NULL) {
-var12 = 1;
+var_tidnode3 = var_nodearraylist6;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype11 = type_nullable__nit__TId.color;
+idtype12 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
+var10 = 1;
 } else {
-if(cltype13 >= var_ptypenode4->type->table_size) {
-var12 = 0;
+if(cltype11 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var10 = 0;
 } else {
-var12 = var_ptypenode4->type->type_table[cltype13] == idtype14;
+var10 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6141);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6483);
+fatal_exit(1);
 }
-var_tassignnode5 = var_nodearraylist5;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype16 = type_nullable__nit__TAssign.color;
-idtype17 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var15 = 1;
+var_pexprsnode4 = var_nodearraylist7;
+/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
+cltype14 = type_nullable__nit__AExprs.color;
+idtype15 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode4 == NULL) {
+var13 = 1;
 } else {
-if(cltype16 >= var_tassignnode5->type->table_size) {
-var15 = 0;
+if(cltype14 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var13 = 0;
 } else {
-var15 = var_tassignnode5->type->type_table[cltype16] == idtype17;
+var13 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6143);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6485);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist7;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype19 = type_nullable__nit__AExpr.color;
-idtype20 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var18 = 1;
+var_passignopnode5 = var_nodearraylist8;
+/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
+cltype17 = type_nullable__nit__AAssignOp.color;
+idtype18 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode5 == NULL) {
+var16 = 1;
 } else {
-if(cltype19 >= var_pexprnode6->type->table_size) {
-var18 = 0;
+if(cltype17 >= (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->table_size) {
+var16 = 0;
 } else {
-var18 = var_pexprnode6->type->type_table[cltype19] == idtype20;
+var16 = (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->type_table[cltype17] == idtype18;
 }
 }
-if (unlikely(!var18)) {
+if (unlikely(!var16)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6145);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6487);
+fatal_exit(1);
 }
-var_pannotationsnode7 = var_nodearraylist3;
-/* <var_pannotationsnode7:nullable Object> isa nullable AAnnotations */
-cltype22 = type_nullable__nit__AAnnotations.color;
-idtype23 = type_nullable__nit__AAnnotations.id;
-if(var_pannotationsnode7 == NULL) {
-var21 = 1;
+var_pexprnode6 = var_nodearraylist9;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype20 = type_nullable__nit__AExpr.color;
+idtype21 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var19 = 1;
 } else {
-if(cltype22 >= var_pannotationsnode7->type->table_size) {
-var21 = 0;
+if(cltype20 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var19 = 0;
 } else {
-var21 = var_pannotationsnode7->type->type_table[cltype22] == idtype23;
+var19 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype20] == idtype21;
 }
 }
-if (unlikely(!var21)) {
+if (unlikely(!var19)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6147);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6489);
+fatal_exit(1);
 }
-var24 = NEW_nit__AVardeclExpr(&type_nit__AVardeclExpr);
+var22 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___AVardeclExpr___init_avardeclexpr(var24, var_tkwvarnode2, var_tidnode3, var_ptypenode4, var_tassignnode5, var_pexprnode6, var_pannotationsnode7); /* Direct call parser_prod#AVardeclExpr#init_avardeclexpr on <var24:AVardeclExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var22, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var22:ACallReassignExpr>*/
 }
-var_pexprnode1 = var24;
+var_pexprnode1 = var22;
 var_node_list = var_pexprnode1;
-var25 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction208> */
+var23 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction232> */
 {
-var26 = nit___nit__Parser___go_to(var_p, var25);
+var24 = nit___nit__Parser___go_to(var_p, var23);
 }
 {
-nit___nit__Parser___push(var_p, var26, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var24, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction209#action for (self: ReduceAction209, Parser) */
-void nit__parser___nit__parser__ReduceAction209___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction233#action for (self: ReduceAction233, Parser) */
+void nit__parser___nit__parser__ReduceAction233___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var2 /* : nullable Object */;
@@ -5621,25 +5589,32 @@ val* var_pexprnode2 /* var pexprnode2: nullable Object */;
 short int var8 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tattridnode3 /* var tattridnode3: nullable Object */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_tassignnode4 /* var tassignnode4: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var_pexprnode5 /* var pexprnode5: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var18 /* : AAttrAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AAttrAssignExpr */;
-long var19 /* : Int */;
-long var20 /* : Int */;
+val* var12 /* : Array[Object] */;
+val* var_listnode5 /* var listnode5: Array[Object] */;
+val* var13 /* : AListExprs */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
+val* var_passignopnode6 /* var passignopnode6: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var20 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var21 /* : Int */;
+long var22 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist8 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -5675,2589 +5650,2612 @@ idtype = type_nullable__nit__AExpr.id;
 if(var_pexprnode2 == NULL) {
 var8 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6173);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6515);
+fatal_exit(1);
 }
-var_tattridnode3 = var_nodearraylist5;
-/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
-cltype10 = type_nullable__nit__TAttrid.color;
-idtype11 = type_nullable__nit__TAttrid.id;
-if(var_tattridnode3 == NULL) {
+var_tidnode3 = var_nodearraylist6;
+/* <var_tidnode3:nullable Object> isa nullable TId */
+cltype10 = type_nullable__nit__TId.color;
+idtype11 = type_nullable__nit__TId.id;
+if(var_tidnode3 == NULL) {
 var9 = 1;
 } else {
-if(cltype10 >= var_tattridnode3->type->table_size) {
+if(cltype10 >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_tattridnode3->type->type_table[cltype10] == idtype11;
-}
-}
-if (unlikely(!var9)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6175);
-show_backtrace(1);
-}
-var_tassignnode4 = var_nodearraylist6;
-/* <var_tassignnode4:nullable Object> isa nullable TAssign */
-cltype13 = type_nullable__nit__TAssign.color;
-idtype14 = type_nullable__nit__TAssign.id;
-if(var_tassignnode4 == NULL) {
-var12 = 1;
-} else {
-if(cltype13 >= var_tassignnode4->type->table_size) {
-var12 = 0;
-} else {
-var12 = var_tassignnode4->type->type_table[cltype13] == idtype14;
-}
-}
-if (unlikely(!var12)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6177);
-show_backtrace(1);
-}
-var_pexprnode5 = var_nodearraylist7;
-/* <var_pexprnode5:nullable Object> isa nullable AExpr */
-cltype16 = type_nullable__nit__AExpr.color;
-idtype17 = type_nullable__nit__AExpr.id;
-if(var_pexprnode5 == NULL) {
-var15 = 1;
-} else {
-if(cltype16 >= var_pexprnode5->type->table_size) {
-var15 = 0;
-} else {
-var15 = var_pexprnode5->type->type_table[cltype16] == idtype17;
-}
-}
-if (unlikely(!var15)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6179);
-show_backtrace(1);
-}
-var18 = NEW_nit__AAttrAssignExpr(&type_nit__AAttrAssignExpr);
-{
-nit__parser_prod___AAttrAssignExpr___init_aattrassignexpr(var18, var_pexprnode2, var_tattridnode3, var_tassignnode4, var_pexprnode5); /* Direct call parser_prod#AAttrAssignExpr#init_aattrassignexpr on <var18:AAttrAssignExpr>*/
-}
-var_pexprnode1 = var18;
-var_node_list = var_pexprnode1;
-var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction209> */
-{
-var20 = nit___nit__Parser___go_to(var_p, var19);
-}
-{
-nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
-}
-/* method parser#ReduceAction210#action for (self: ReduceAction210, Parser) */
-void nit__parser___nit__parser__ReduceAction210___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tattridnode3 /* var tattridnode3: nullable Object */;
-short int var7 /* : Bool */;
-int cltype;
-int idtype;
-val* var_tassignnode4 /* var tassignnode4: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
-val* var_pexprnode5 /* var pexprnode5: nullable Object */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
-val* var14 /* : AAttrAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AAttrAssignExpr */;
-long var15 /* : Int */;
-long var16 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
-{
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
-}
-}
-var_pexprnode2 = var5;
-var_tattridnode3 = var_nodearraylist2;
-/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
-cltype = type_nullable__nit__TAttrid.color;
-idtype = type_nullable__nit__TAttrid.id;
-if(var_tattridnode3 == NULL) {
-var7 = 1;
-} else {
-if(cltype >= var_tattridnode3->type->table_size) {
-var7 = 0;
-} else {
-var7 = var_tattridnode3->type->type_table[cltype] == idtype;
+var9 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6201);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6517);
+fatal_exit(1);
 }
-var_tassignnode4 = var_nodearraylist3;
-/* <var_tassignnode4:nullable Object> isa nullable TAssign */
-cltype9 = type_nullable__nit__TAssign.color;
-idtype10 = type_nullable__nit__TAssign.id;
-if(var_tassignnode4 == NULL) {
-var8 = 1;
+var12 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var12); /* Direct call array#Array#init on <var12:Array[Object]>*/
+}
+var_listnode5 = var12;
+var13 = NEW_nit__AListExprs(&type_nit__AListExprs);
+{
+nit__parser_prod___AListExprs___init_alistexprs(var13, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var13:AListExprs>*/
+}
+var_pexprsnode4 = var13;
+var_passignopnode6 = var_nodearraylist7;
+/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
+cltype15 = type_nullable__nit__AAssignOp.color;
+idtype16 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode6 == NULL) {
+var14 = 1;
 } else {
-if(cltype9 >= var_tassignnode4->type->table_size) {
-var8 = 0;
+if(cltype15 >= (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->table_size) {
+var14 = 0;
 } else {
-var8 = var_tassignnode4->type->type_table[cltype9] == idtype10;
+var14 = (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6203);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6523);
+fatal_exit(1);
 }
-var_pexprnode5 = var_nodearraylist4;
-/* <var_pexprnode5:nullable Object> isa nullable AExpr */
-cltype12 = type_nullable__nit__AExpr.color;
-idtype13 = type_nullable__nit__AExpr.id;
-if(var_pexprnode5 == NULL) {
-var11 = 1;
+var_pexprnode7 = var_nodearraylist8;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype18 = type_nullable__nit__AExpr.color;
+idtype19 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var17 = 1;
 } else {
-if(cltype12 >= var_pexprnode5->type->table_size) {
-var11 = 0;
+if(cltype18 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var17 = 0;
 } else {
-var11 = var_pexprnode5->type->type_table[cltype12] == idtype13;
+var17 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype18] == idtype19;
 }
 }
-if (unlikely(!var11)) {
+if (unlikely(!var17)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6205);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6525);
+fatal_exit(1);
 }
-var14 = NEW_nit__AAttrAssignExpr(&type_nit__AAttrAssignExpr);
+var20 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___AAttrAssignExpr___init_aattrassignexpr(var14, var_pexprnode2, var_tattridnode3, var_tassignnode4, var_pexprnode5); /* Direct call parser_prod#AAttrAssignExpr#init_aattrassignexpr on <var14:AAttrAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var20, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var20:ACallReassignExpr>*/
 }
-var_pexprnode1 = var14;
+var_pexprnode1 = var20;
 var_node_list = var_pexprnode1;
-var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction210> */
+var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction233> */
 {
-var16 = nit___nit__Parser___go_to(var_p, var15);
+var22 = nit___nit__Parser___go_to(var_p, var21);
 }
 {
-nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction211#action for (self: ReduceAction211, Parser) */
-void nit__parser___nit__parser__ReduceAction211___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction236#action for (self: ReduceAction236, Parser) */
+void nit__parser___nit__parser__ReduceAction236___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var4 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var6 /* : Bool */;
+int cltype7;
+int idtype8;
+val* var_passignopnode5 /* var passignopnode5: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
 short int var12 /* : Bool */;
 int cltype13;
 int idtype14;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var18 /* : Bool */;
-int cltype19;
-int idtype20;
-val* var21 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var22 /* : Int */;
-long var23 /* : Int */;
+val* var15 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var16 /* : Int */;
+long var17 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist2 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var6;
+var_nodearraylist1 = var3;
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var7;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var8 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var8 = 0;
-} else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var8)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6229);
-show_backtrace(1);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-var_tidnode3 = var_nodearraylist4;
+var_pexprnode2 = var4;
+var_tidnode3 = var_nodearraylist1;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype10 = type_nullable__nit__TId.color;
-idtype11 = type_nullable__nit__TId.id;
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var9 = 1;
+var5 = 1;
 } else {
-if(cltype10 >= var_tidnode3->type->table_size) {
-var9 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var5 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype10] == idtype11;
+var5 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6231);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6548);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist5;
+var_pexprsnode4 = var_nodearraylist2;
 /* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype13 = type_nullable__nit__AExprs.color;
-idtype14 = type_nullable__nit__AExprs.id;
+cltype7 = type_nullable__nit__AExprs.color;
+idtype8 = type_nullable__nit__AExprs.id;
 if(var_pexprsnode4 == NULL) {
-var12 = 1;
+var6 = 1;
 } else {
-if(cltype13 >= var_pexprsnode4->type->table_size) {
-var12 = 0;
+if(cltype7 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var6 = 0;
 } else {
-var12 = var_pexprsnode4->type->type_table[cltype13] == idtype14;
+var6 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype7] == idtype8;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6233);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6550);
+fatal_exit(1);
 }
-var_tassignnode5 = var_nodearraylist6;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype16 = type_nullable__nit__TAssign.color;
-idtype17 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var15 = 1;
+var_passignopnode5 = var_nodearraylist3;
+/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
+cltype10 = type_nullable__nit__AAssignOp.color;
+idtype11 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode5 == NULL) {
+var9 = 1;
 } else {
-if(cltype16 >= var_tassignnode5->type->table_size) {
-var15 = 0;
+if(cltype10 >= (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->table_size) {
+var9 = 0;
 } else {
-var15 = var_tassignnode5->type->type_table[cltype16] == idtype17;
+var9 = (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6235);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6552);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist7;
+var_pexprnode6 = var_nodearraylist4;
 /* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype19 = type_nullable__nit__AExpr.color;
-idtype20 = type_nullable__nit__AExpr.id;
+cltype13 = type_nullable__nit__AExpr.color;
+idtype14 = type_nullable__nit__AExpr.id;
 if(var_pexprnode6 == NULL) {
-var18 = 1;
+var12 = 1;
 } else {
-if(cltype19 >= var_pexprnode6->type->table_size) {
-var18 = 0;
+if(cltype13 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var12 = 0;
 } else {
-var18 = var_pexprnode6->type->type_table[cltype19] == idtype20;
+var12 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var18)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6237);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6554);
+fatal_exit(1);
 }
-var21 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var15 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var21, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var21:ACallAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var15:ACallReassignExpr>*/
 }
-var_pexprnode1 = var21;
+var_pexprnode1 = var15;
 var_node_list = var_pexprnode1;
-var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction211> */
+var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction236> */
 {
-var23 = nit___nit__Parser___go_to(var_p, var22);
+var17 = nit___nit__Parser___go_to(var_p, var16);
 }
 {
-nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction212#action for (self: ReduceAction212, Parser) */
-void nit__parser___nit__parser__ReduceAction212___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction237#action for (self: ReduceAction237, Parser) */
+void nit__parser___nit__parser__ReduceAction237___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var7 /* : Bool */;
+val* var3 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var4 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
-val* var11 /* : Array[Object] */;
+val* var5 /* : Array[Object] */;
 val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var12 /* : AListExprs */;
+val* var6 /* : AListExprs */;
 val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_tassignnode6 /* var tassignnode6: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
+val* var_passignopnode6 /* var passignopnode6: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
 val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var19 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var20 /* : Int */;
-long var21 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist6 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist5 = var2;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var13 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var14 /* : Int */;
+long var15 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
 {
-var3 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var3;
+var_nodearraylist3 = var;
 {
-var4 = nit___nit__Parser___pop(var_p);
+var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var4;
+var_nodearraylist2 = var1;
 {
-var5 = nit___nit__Parser___pop(var_p);
+var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var5;
+var_nodearraylist1 = var2;
+var3 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var6;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var7 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var7 = 0;
-} else {
-var7 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var7)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6261);
-show_backtrace(1);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var3); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var3:AImplicitSelfExpr>*/
 }
-var_tidnode3 = var_nodearraylist4;
+var_pexprnode2 = var3;
+var_tidnode3 = var_nodearraylist1;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype9 = type_nullable__nit__TId.color;
-idtype10 = type_nullable__nit__TId.id;
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var8 = 1;
+var4 = 1;
 } else {
-if(cltype9 >= var_tidnode3->type->table_size) {
-var8 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var4 = 0;
 } else {
-var8 = var_tidnode3->type->type_table[cltype9] == idtype10;
+var4 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6263);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6576);
+fatal_exit(1);
 }
-var11 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var5 = NEW_standard__Array(&type_standard__Array__standard__Object);
 {
-standard___standard__Array___standard__kernel__Object__init(var11); /* Direct call array#Array#init on <var11:Array[Object]>*/
+standard___standard__Array___standard__kernel__Object__init(var5); /* Direct call array#Array#init on <var5:Array[Object]>*/
 }
-var_listnode5 = var11;
-var12 = NEW_nit__AListExprs(&type_nit__AListExprs);
+var_listnode5 = var5;
+var6 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-nit__parser_prod___AListExprs___init_alistexprs(var12, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var12:AListExprs>*/
+nit__parser_prod___AListExprs___init_alistexprs(var6, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var6:AListExprs>*/
 }
-var_pexprsnode4 = var12;
-var_tassignnode6 = var_nodearraylist5;
-/* <var_tassignnode6:nullable Object> isa nullable TAssign */
-cltype14 = type_nullable__nit__TAssign.color;
-idtype15 = type_nullable__nit__TAssign.id;
-if(var_tassignnode6 == NULL) {
-var13 = 1;
+var_pexprsnode4 = var6;
+var_passignopnode6 = var_nodearraylist2;
+/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
+cltype8 = type_nullable__nit__AAssignOp.color;
+idtype9 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode6 == NULL) {
+var7 = 1;
 } else {
-if(cltype14 >= var_tassignnode6->type->table_size) {
-var13 = 0;
+if(cltype8 >= (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->table_size) {
+var7 = 0;
 } else {
-var13 = var_tassignnode6->type->type_table[cltype14] == idtype15;
+var7 = (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6269);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6582);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist6;
+var_pexprnode7 = var_nodearraylist3;
 /* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype17 = type_nullable__nit__AExpr.color;
-idtype18 = type_nullable__nit__AExpr.id;
+cltype11 = type_nullable__nit__AExpr.color;
+idtype12 = type_nullable__nit__AExpr.id;
 if(var_pexprnode7 == NULL) {
-var16 = 1;
+var10 = 1;
 } else {
-if(cltype17 >= var_pexprnode7->type->table_size) {
-var16 = 0;
+if(cltype11 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var10 = 0;
 } else {
-var16 = var_pexprnode7->type->type_table[cltype17] == idtype18;
+var10 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var16)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6271);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6584);
+fatal_exit(1);
 }
-var19 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var13 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var19, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var19:ACallAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var13, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var13:ACallReassignExpr>*/
 }
-var_pexprnode1 = var19;
+var_pexprnode1 = var13;
 var_node_list = var_pexprnode1;
-var20 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction212> */
+var14 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction237> */
 {
-var21 = nit___nit__Parser___go_to(var_p, var20);
+var15 = nit___nit__Parser___go_to(var_p, var14);
 }
 {
-nit___nit__Parser___push(var_p, var21, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var15, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction213#action for (self: ReduceAction213, Parser) */
-void nit__parser___nit__parser__ReduceAction213___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction238#action for (self: ReduceAction238, Parser) */
+void nit__parser___nit__parser__ReduceAction238___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var9 /* : Bool */;
+val* var5 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_passignopnode5 /* var passignopnode5: nullable Object */;
 short int var10 /* : Bool */;
 int cltype11;
 int idtype12;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
 short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var19 /* : Bool */;
-int cltype20;
-int idtype21;
-val* var22 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var23 /* : Int */;
-long var24 /* : Int */;
+val* var16 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var17 /* : Int */;
+long var18 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist8 = var1;
+var_nodearraylist4 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var2;
+var_nodearraylist3 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var3;
+var_nodearraylist2 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var7;
+var_nodearraylist1 = var4;
+var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var8 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var8;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var9 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var9 = 0;
-} else {
-var9 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var9)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6297);
-show_backtrace(1);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var5); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var5:AImplicitSelfExpr>*/
 }
-var_tidnode3 = var_nodearraylist5;
+var_pexprnode2 = var5;
+var_tidnode3 = var_nodearraylist2;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype11 = type_nullable__nit__TId.color;
-idtype12 = type_nullable__nit__TId.id;
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var10 = 1;
+var6 = 1;
 } else {
-if(cltype11 >= var_tidnode3->type->table_size) {
-var10 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var6 = 0;
 } else {
-var10 = var_tidnode3->type->type_table[cltype11] == idtype12;
+var6 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6299);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6608);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist6;
+var_pexprsnode4 = var_nodearraylist3;
 /* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype14 = type_nullable__nit__AExprs.color;
-idtype15 = type_nullable__nit__AExprs.id;
+cltype8 = type_nullable__nit__AExprs.color;
+idtype9 = type_nullable__nit__AExprs.id;
 if(var_pexprsnode4 == NULL) {
-var13 = 1;
+var7 = 1;
 } else {
-if(cltype14 >= var_pexprsnode4->type->table_size) {
-var13 = 0;
+if(cltype8 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var7 = 0;
 } else {
-var13 = var_pexprsnode4->type->type_table[cltype14] == idtype15;
+var7 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6301);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6610);
+fatal_exit(1);
 }
-var_tassignnode5 = var_nodearraylist7;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype17 = type_nullable__nit__TAssign.color;
-idtype18 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var16 = 1;
+var_passignopnode5 = var_nodearraylist4;
+/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
+cltype11 = type_nullable__nit__AAssignOp.color;
+idtype12 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode5 == NULL) {
+var10 = 1;
 } else {
-if(cltype17 >= var_tassignnode5->type->table_size) {
-var16 = 0;
+if(cltype11 >= (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->table_size) {
+var10 = 0;
 } else {
-var16 = var_tassignnode5->type->type_table[cltype17] == idtype18;
+var10 = (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var16)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6303);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6612);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist8;
+var_pexprnode6 = var_nodearraylist5;
 /* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype20 = type_nullable__nit__AExpr.color;
-idtype21 = type_nullable__nit__AExpr.id;
+cltype14 = type_nullable__nit__AExpr.color;
+idtype15 = type_nullable__nit__AExpr.id;
 if(var_pexprnode6 == NULL) {
-var19 = 1;
+var13 = 1;
 } else {
-if(cltype20 >= var_pexprnode6->type->table_size) {
-var19 = 0;
+if(cltype14 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var13 = 0;
 } else {
-var19 = var_pexprnode6->type->type_table[cltype20] == idtype21;
+var13 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var19)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6305);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6614);
+fatal_exit(1);
 }
-var22 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var16 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var22, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var22:ACallAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var16, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var16:ACallReassignExpr>*/
 }
-var_pexprnode1 = var22;
+var_pexprnode1 = var16;
 var_node_list = var_pexprnode1;
-var23 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction213> */
+var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction238> */
 {
-var24 = nit___nit__Parser___go_to(var_p, var23);
+var18 = nit___nit__Parser___go_to(var_p, var17);
 }
 {
-nit___nit__Parser___push(var_p, var24, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction214#action for (self: ReduceAction214, Parser) */
-void nit__parser___nit__parser__ReduceAction214___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction239#action for (self: ReduceAction239, Parser) */
+void nit__parser___nit__parser__ReduceAction239___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var4 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var5 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var12 /* : Array[Object] */;
+val* var6 /* : Array[Object] */;
 val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var13 /* : AListExprs */;
+val* var7 /* : AListExprs */;
 val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_tassignnode6 /* var tassignnode6: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
+val* var_passignopnode6 /* var passignopnode6: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
 val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-val* var20 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var21 /* : Int */;
-long var22 /* : Int */;
+short int var11 /* : Bool */;
+int cltype12;
+int idtype13;
+val* var14 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist2 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var6;
+var_nodearraylist1 = var3;
+var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var7;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var8 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var8 = 0;
-} else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var4); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var4:AImplicitSelfExpr>*/
 }
-if (unlikely(!var8)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6330);
-show_backtrace(1);
-}
-var_tidnode3 = var_nodearraylist5;
+var_pexprnode2 = var4;
+var_tidnode3 = var_nodearraylist2;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype10 = type_nullable__nit__TId.color;
-idtype11 = type_nullable__nit__TId.id;
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var9 = 1;
+var5 = 1;
 } else {
-if(cltype10 >= var_tidnode3->type->table_size) {
-var9 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var5 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype10] == idtype11;
+var5 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6332);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6637);
+fatal_exit(1);
 }
-var12 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var6 = NEW_standard__Array(&type_standard__Array__standard__Object);
 {
-standard___standard__Array___standard__kernel__Object__init(var12); /* Direct call array#Array#init on <var12:Array[Object]>*/
+standard___standard__Array___standard__kernel__Object__init(var6); /* Direct call array#Array#init on <var6:Array[Object]>*/
 }
-var_listnode5 = var12;
-var13 = NEW_nit__AListExprs(&type_nit__AListExprs);
+var_listnode5 = var6;
+var7 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-nit__parser_prod___AListExprs___init_alistexprs(var13, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var13:AListExprs>*/
+nit__parser_prod___AListExprs___init_alistexprs(var7, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var7:AListExprs>*/
 }
-var_pexprsnode4 = var13;
-var_tassignnode6 = var_nodearraylist6;
-/* <var_tassignnode6:nullable Object> isa nullable TAssign */
-cltype15 = type_nullable__nit__TAssign.color;
-idtype16 = type_nullable__nit__TAssign.id;
-if(var_tassignnode6 == NULL) {
-var14 = 1;
+var_pexprsnode4 = var7;
+var_passignopnode6 = var_nodearraylist3;
+/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
+cltype9 = type_nullable__nit__AAssignOp.color;
+idtype10 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode6 == NULL) {
+var8 = 1;
 } else {
-if(cltype15 >= var_tassignnode6->type->table_size) {
-var14 = 0;
+if(cltype9 >= (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->table_size) {
+var8 = 0;
 } else {
-var14 = var_tassignnode6->type->type_table[cltype15] == idtype16;
+var8 = (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6338);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6643);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist7;
+var_pexprnode7 = var_nodearraylist4;
 /* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype18 = type_nullable__nit__AExpr.color;
-idtype19 = type_nullable__nit__AExpr.id;
+cltype12 = type_nullable__nit__AExpr.color;
+idtype13 = type_nullable__nit__AExpr.id;
 if(var_pexprnode7 == NULL) {
-var17 = 1;
+var11 = 1;
 } else {
-if(cltype18 >= var_pexprnode7->type->table_size) {
-var17 = 0;
+if(cltype12 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var11 = 0;
 } else {
-var17 = var_pexprnode7->type->type_table[cltype18] == idtype19;
+var11 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype12] == idtype13;
 }
 }
-if (unlikely(!var17)) {
+if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6340);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6645);
+fatal_exit(1);
 }
-var20 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var14 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var20, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var20:ACallAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var14, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var14:ACallReassignExpr>*/
 }
-var_pexprnode1 = var20;
+var_pexprnode1 = var14;
 var_node_list = var_pexprnode1;
-var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction214> */
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction239> */
 {
-var22 = nit___nit__Parser___go_to(var_p, var21);
+var16 = nit___nit__Parser___go_to(var_p, var15);
 }
 {
-nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction215#action for (self: ReduceAction215, Parser) */
-void nit__parser___nit__parser__ReduceAction215___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction240#action for (self: ReduceAction240, Parser) */
+void nit__parser___nit__parser__ReduceAction240___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var9 /* : nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var10 /* : Bool */;
+val* var6 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_passignopnode5 /* var passignopnode5: nullable Object */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
 short int var14 /* : Bool */;
 int cltype15;
 int idtype16;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var20 /* : Bool */;
-int cltype21;
-int idtype22;
-val* var23 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var24 /* : Int */;
-long var25 /* : Int */;
+val* var17 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var18 /* : Int */;
+long var19 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist9 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist8 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var3;
+var_nodearraylist3 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var4;
+var_nodearraylist2 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var7;
-{
-var8 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var8;
+var_nodearraylist1 = var5;
+var6 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var9 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var9;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var10 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var10 = 0;
-} else {
-var10 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var10)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6367);
-show_backtrace(1);
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var6); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var6:AImplicitSelfExpr>*/
 }
-var_tidnode3 = var_nodearraylist6;
+var_pexprnode2 = var6;
+var_tidnode3 = var_nodearraylist3;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype12 = type_nullable__nit__TId.color;
-idtype13 = type_nullable__nit__TId.id;
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var11 = 1;
+var7 = 1;
 } else {
-if(cltype12 >= var_tidnode3->type->table_size) {
-var11 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var7 = 0;
 } else {
-var11 = var_tidnode3->type->type_table[cltype12] == idtype13;
+var7 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var11)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6369);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6670);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist7;
+var_pexprsnode4 = var_nodearraylist4;
 /* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype15 = type_nullable__nit__AExprs.color;
-idtype16 = type_nullable__nit__AExprs.id;
+cltype9 = type_nullable__nit__AExprs.color;
+idtype10 = type_nullable__nit__AExprs.id;
 if(var_pexprsnode4 == NULL) {
-var14 = 1;
+var8 = 1;
 } else {
-if(cltype15 >= var_pexprsnode4->type->table_size) {
-var14 = 0;
+if(cltype9 >= (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->table_size) {
+var8 = 0;
 } else {
-var14 = var_pexprsnode4->type->type_table[cltype15] == idtype16;
+var8 = (((long)var_pexprsnode4&3)?type_info[((long)var_pexprsnode4&3)]:var_pexprsnode4->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6371);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6672);
+fatal_exit(1);
 }
-var_tassignnode5 = var_nodearraylist8;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype18 = type_nullable__nit__TAssign.color;
-idtype19 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var17 = 1;
+var_passignopnode5 = var_nodearraylist5;
+/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
+cltype12 = type_nullable__nit__AAssignOp.color;
+idtype13 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode5 == NULL) {
+var11 = 1;
 } else {
-if(cltype18 >= var_tassignnode5->type->table_size) {
-var17 = 0;
+if(cltype12 >= (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->table_size) {
+var11 = 0;
 } else {
-var17 = var_tassignnode5->type->type_table[cltype18] == idtype19;
+var11 = (((long)var_passignopnode5&3)?type_info[((long)var_passignopnode5&3)]:var_passignopnode5->type)->type_table[cltype12] == idtype13;
 }
 }
-if (unlikely(!var17)) {
+if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6373);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6674);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist9;
+var_pexprnode6 = var_nodearraylist6;
 /* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype21 = type_nullable__nit__AExpr.color;
-idtype22 = type_nullable__nit__AExpr.id;
+cltype15 = type_nullable__nit__AExpr.color;
+idtype16 = type_nullable__nit__AExpr.id;
 if(var_pexprnode6 == NULL) {
-var20 = 1;
+var14 = 1;
 } else {
-if(cltype21 >= var_pexprnode6->type->table_size) {
-var20 = 0;
+if(cltype15 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var14 = 0;
 } else {
-var20 = var_pexprnode6->type->type_table[cltype21] == idtype22;
+var14 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var20)) {
+if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6375);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6676);
+fatal_exit(1);
 }
-var23 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var17 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var23, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var23:ACallAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var17, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var17:ACallReassignExpr>*/
 }
-var_pexprnode1 = var23;
+var_pexprnode1 = var17;
 var_node_list = var_pexprnode1;
-var24 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction215> */
+var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction240> */
 {
-var25 = nit___nit__Parser___go_to(var_p, var24);
+var19 = nit___nit__Parser___go_to(var_p, var18);
 }
 {
-nit___nit__Parser___push(var_p, var25, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction216#action for (self: ReduceAction216, Parser) */
-void nit__parser___nit__parser__ReduceAction216___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction241#action for (self: ReduceAction241, Parser) */
+void nit__parser___nit__parser__ReduceAction241___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var9 /* : Bool */;
+val* var5 /* : AImplicitSelfExpr */;
+val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
+val* var_tidnode3 /* var tidnode3: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var13 /* : Array[Object] */;
+val* var7 /* : Array[Object] */;
 val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var14 /* : AListExprs */;
+val* var8 /* : AListExprs */;
 val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_tassignnode6 /* var tassignnode6: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
+val* var_passignopnode6 /* var passignopnode6: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
 val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var18 /* : Bool */;
-int cltype19;
-int idtype20;
-val* var21 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var22 /* : Int */;
-long var23 /* : Int */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var15 /* : ACallReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+long var16 /* : Int */;
+long var17 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist8 = var1;
+var_nodearraylist4 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var2;
+var_nodearraylist3 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var3;
+var_nodearraylist2 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var7;
+var_nodearraylist1 = var4;
+var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-var8 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var8;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var9 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var9 = 0;
-} else {
-var9 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
+nit__parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(var5); /* Direct call parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr on <var5:AImplicitSelfExpr>*/
 }
-if (unlikely(!var9)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6401);
-show_backtrace(1);
-}
-var_tidnode3 = var_nodearraylist6;
+var_pexprnode2 = var5;
+var_tidnode3 = var_nodearraylist3;
 /* <var_tidnode3:nullable Object> isa nullable TId */
-cltype11 = type_nullable__nit__TId.color;
-idtype12 = type_nullable__nit__TId.id;
+cltype = type_nullable__nit__TId.color;
+idtype = type_nullable__nit__TId.id;
 if(var_tidnode3 == NULL) {
-var10 = 1;
+var6 = 1;
 } else {
-if(cltype11 >= var_tidnode3->type->table_size) {
-var10 = 0;
+if(cltype >= (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->table_size) {
+var6 = 0;
 } else {
-var10 = var_tidnode3->type->type_table[cltype11] == idtype12;
+var6 = (((long)var_tidnode3&3)?type_info[((long)var_tidnode3&3)]:var_tidnode3->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6403);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6700);
+fatal_exit(1);
 }
-var13 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var7 = NEW_standard__Array(&type_standard__Array__standard__Object);
 {
-standard___standard__Array___standard__kernel__Object__init(var13); /* Direct call array#Array#init on <var13:Array[Object]>*/
+standard___standard__Array___standard__kernel__Object__init(var7); /* Direct call array#Array#init on <var7:Array[Object]>*/
 }
-var_listnode5 = var13;
-var14 = NEW_nit__AListExprs(&type_nit__AListExprs);
+var_listnode5 = var7;
+var8 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-nit__parser_prod___AListExprs___init_alistexprs(var14, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var14:AListExprs>*/
+nit__parser_prod___AListExprs___init_alistexprs(var8, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var8:AListExprs>*/
 }
-var_pexprsnode4 = var14;
-var_tassignnode6 = var_nodearraylist7;
-/* <var_tassignnode6:nullable Object> isa nullable TAssign */
-cltype16 = type_nullable__nit__TAssign.color;
-idtype17 = type_nullable__nit__TAssign.id;
-if(var_tassignnode6 == NULL) {
-var15 = 1;
+var_pexprsnode4 = var8;
+var_passignopnode6 = var_nodearraylist4;
+/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
+cltype10 = type_nullable__nit__AAssignOp.color;
+idtype11 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode6 == NULL) {
+var9 = 1;
 } else {
-if(cltype16 >= var_tassignnode6->type->table_size) {
-var15 = 0;
+if(cltype10 >= (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->table_size) {
+var9 = 0;
 } else {
-var15 = var_tassignnode6->type->type_table[cltype16] == idtype17;
+var9 = (((long)var_passignopnode6&3)?type_info[((long)var_passignopnode6&3)]:var_passignopnode6->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6409);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6706);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist8;
+var_pexprnode7 = var_nodearraylist5;
 /* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype19 = type_nullable__nit__AExpr.color;
-idtype20 = type_nullable__nit__AExpr.id;
+cltype13 = type_nullable__nit__AExpr.color;
+idtype14 = type_nullable__nit__AExpr.id;
 if(var_pexprnode7 == NULL) {
-var18 = 1;
+var12 = 1;
 } else {
-if(cltype19 >= var_pexprnode7->type->table_size) {
-var18 = 0;
+if(cltype13 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var12 = 0;
 } else {
-var18 = var_pexprnode7->type->type_table[cltype19] == idtype20;
+var12 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var18)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6411);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6708);
+fatal_exit(1);
 }
-var21 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var15 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var21, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var21:ACallAssignExpr>*/
+nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var15:ACallReassignExpr>*/
 }
-var_pexprnode1 = var21;
+var_pexprnode1 = var15;
 var_node_list = var_pexprnode1;
-var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction216> */
+var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction241> */
 {
-var23 = nit___nit__Parser___go_to(var_p, var22);
+var17 = nit___nit__Parser___go_to(var_p, var16);
 }
 {
-nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction219#action for (self: ReduceAction219, Parser) */
-void nit__parser___nit__parser__ReduceAction219___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction244#action for (self: ReduceAction244, Parser) */
+void nit__parser___nit__parser__ReduceAction244___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var7 /* : Bool */;
+val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+short int var4 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprsnode3 /* var pexprsnode3: nullable Object */;
+short int var5 /* : Bool */;
+int cltype6;
+int idtype7;
+val* var_passignopnode4 /* var passignopnode4: nullable Object */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-val* var17 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var18 /* : Int */;
-long var19 /* : Int */;
+val* var14 /* : ABraReassignExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ABraReassignExpr */;
+long var15 /* : Int */;
+long var16 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist4 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist3 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist2 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var3;
+var_pexprnode2 = var_nodearraylist1;
+/* <var_pexprnode2:nullable Object> isa nullable AExpr */
+cltype = type_nullable__nit__AExpr.color;
+idtype = type_nullable__nit__AExpr.id;
+if(var_pexprnode2 == NULL) {
+var4 = 1;
+} else {
+if(cltype >= (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->table_size) {
+var4 = 0;
+} else {
+var4 = (((long)var_pexprnode2&3)?type_info[((long)var_pexprnode2&3)]:var_pexprnode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
-{
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
 }
+if (unlikely(!var4)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6730);
+fatal_exit(1);
 }
-var_pexprnode2 = var5;
-var_tidnode3 = var_nodearraylist1;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var7 = 1;
+var_pexprsnode3 = var_nodearraylist2;
+/* <var_pexprsnode3:nullable Object> isa nullable AExprs */
+cltype6 = type_nullable__nit__AExprs.color;
+idtype7 = type_nullable__nit__AExprs.id;
+if(var_pexprsnode3 == NULL) {
+var5 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var7 = 0;
+if(cltype6 >= (((long)var_pexprsnode3&3)?type_info[((long)var_pexprsnode3&3)]:var_pexprsnode3->type)->table_size) {
+var5 = 0;
 } else {
-var7 = var_tidnode3->type->type_table[cltype] == idtype;
+var5 = (((long)var_pexprsnode3&3)?type_info[((long)var_pexprsnode3&3)]:var_pexprsnode3->type)->type_table[cltype6] == idtype7;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var5)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6434);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6732);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist2;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype9 = type_nullable__nit__AExprs.color;
-idtype10 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_passignopnode4 = var_nodearraylist3;
+/* <var_passignopnode4:nullable Object> isa nullable AAssignOp */
+cltype9 = type_nullable__nit__AAssignOp.color;
+idtype10 = type_nullable__nit__AAssignOp.id;
+if(var_passignopnode4 == NULL) {
 var8 = 1;
 } else {
-if(cltype9 >= var_pexprsnode4->type->table_size) {
+if(cltype9 >= (((long)var_passignopnode4&3)?type_info[((long)var_passignopnode4&3)]:var_passignopnode4->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_pexprsnode4->type->type_table[cltype9] == idtype10;
+var8 = (((long)var_passignopnode4&3)?type_info[((long)var_passignopnode4&3)]:var_passignopnode4->type)->type_table[cltype9] == idtype10;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6436);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6734);
+fatal_exit(1);
 }
-var_tassignnode5 = var_nodearraylist3;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype12 = type_nullable__nit__TAssign.color;
-idtype13 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
+var_pexprnode5 = var_nodearraylist4;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype12 = type_nullable__nit__AExpr.color;
+idtype13 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
 var11 = 1;
 } else {
-if(cltype12 >= var_tassignnode5->type->table_size) {
+if(cltype12 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
 var11 = 0;
 } else {
-var11 = var_tassignnode5->type->type_table[cltype12] == idtype13;
+var11 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype12] == idtype13;
 }
 }
 if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6438);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6736);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist4;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype15 = type_nullable__nit__AExpr.color;
-idtype16 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var14 = 1;
+var14 = NEW_nit__ABraReassignExpr(&type_nit__ABraReassignExpr);
+{
+nit__parser_prod___ABraReassignExpr___init_abrareassignexpr(var14, var_pexprnode2, var_pexprsnode3, var_passignopnode4, var_pexprnode5); /* Direct call parser_prod#ABraReassignExpr#init_abrareassignexpr on <var14:ABraReassignExpr>*/
+}
+var_pexprnode1 = var14;
+var_node_list = var_pexprnode1;
+var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction244> */
+{
+var16 = nit___nit__Parser___go_to(var_p, var15);
+}
+{
+nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+}
+RET_LABEL:;
+}
+/* method parser#ReduceAction245#action for (self: ReduceAction245, Parser) */
+void nit__parser___nit__parser__ReduceAction245___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tpluseqnode2 /* var tpluseqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : APlusAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable APlusAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var;
+var_tpluseqnode2 = var_nodearraylist1;
+/* <var_tpluseqnode2:nullable Object> isa nullable TPluseq */
+cltype = type_nullable__nit__TPluseq.color;
+idtype = type_nullable__nit__TPluseq.id;
+if(var_tpluseqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype15 >= var_pexprnode6->type->table_size) {
-var14 = 0;
+if(cltype >= (((long)var_tpluseqnode2&3)?type_info[((long)var_tpluseqnode2&3)]:var_tpluseqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var14 = var_pexprnode6->type->type_table[cltype15] == idtype16;
+var1 = (((long)var_tpluseqnode2&3)?type_info[((long)var_tpluseqnode2&3)]:var_tpluseqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6440);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6754);
+fatal_exit(1);
 }
-var17 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var2 = NEW_nit__APlusAssignOp(&type_nit__APlusAssignOp);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var17, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var17:ACallAssignExpr>*/
+nit__parser_prod___APlusAssignOp___init_aplusassignop(var2, var_tpluseqnode2); /* Direct call parser_prod#APlusAssignOp#init_aplusassignop on <var2:APlusAssignOp>*/
 }
-var_pexprnode1 = var17;
-var_node_list = var_pexprnode1;
-var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction219> */
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction245> */
 {
-var19 = nit___nit__Parser___go_to(var_p, var18);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
 {
-nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction220#action for (self: ReduceAction220, Parser) */
-void nit__parser___nit__parser__ReduceAction220___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction246#action for (self: ReduceAction246, Parser) */
+void nit__parser___nit__parser__ReduceAction246___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var4 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var6 /* : Bool */;
+val* var_tminuseqnode2 /* var tminuseqnode2: nullable Object */;
+short int var1 /* : Bool */;
 int cltype;
 int idtype;
-val* var7 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var8 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_tassignnode6 /* var tassignnode6: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var15 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var16 /* : Int */;
-long var17 /* : Int */;
+val* var2 /* : AMinusAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable AMinusAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var1;
+var_nodearraylist1 = var;
+var_tminuseqnode2 = var_nodearraylist1;
+/* <var_tminuseqnode2:nullable Object> isa nullable TMinuseq */
+cltype = type_nullable__nit__TMinuseq.color;
+idtype = type_nullable__nit__TMinuseq.id;
+if(var_tminuseqnode2 == NULL) {
+var1 = 1;
+} else {
+if(cltype >= (((long)var_tminuseqnode2&3)?type_info[((long)var_tminuseqnode2&3)]:var_tminuseqnode2->type)->table_size) {
+var1 = 0;
+} else {
+var1 = (((long)var_tminuseqnode2&3)?type_info[((long)var_tminuseqnode2&3)]:var_tminuseqnode2->type)->type_table[cltype] == idtype;
+}
+}
+if (unlikely(!var1)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6769);
+fatal_exit(1);
+}
+var2 = NEW_nit__AMinusAssignOp(&type_nit__AMinusAssignOp);
 {
-var2 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AMinusAssignOp___init_aminusassignop(var2, var_tminuseqnode2); /* Direct call parser_prod#AMinusAssignOp#init_aminusassignop on <var2:AMinusAssignOp>*/
 }
-var_nodearraylist2 = var2;
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction246> */
 {
-var3 = nit___nit__Parser___pop(var_p);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
-var_nodearraylist1 = var3;
-var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var4) on <var4:AImplicitSelfExpr> */
-RET_LABEL5:(void)0;
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
+RET_LABEL:;
 }
-var_pexprnode2 = var4;
-var_tidnode3 = var_nodearraylist1;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var6 = 1;
+/* method parser#ReduceAction247#action for (self: ReduceAction247, Parser) */
+void nit__parser___nit__parser__ReduceAction247___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tstareqnode2 /* var tstareqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : AStarAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable AStarAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var;
+var_tstareqnode2 = var_nodearraylist1;
+/* <var_tstareqnode2:nullable Object> isa nullable TStareq */
+cltype = type_nullable__nit__TStareq.color;
+idtype = type_nullable__nit__TStareq.id;
+if(var_tstareqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var6 = 0;
+if(cltype >= (((long)var_tstareqnode2&3)?type_info[((long)var_tstareqnode2&3)]:var_tstareqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var6 = var_tidnode3->type->type_table[cltype] == idtype;
+var1 = (((long)var_tstareqnode2&3)?type_info[((long)var_tstareqnode2&3)]:var_tstareqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6462);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6784);
+fatal_exit(1);
 }
-var7 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var2 = NEW_nit__AStarAssignOp(&type_nit__AStarAssignOp);
 {
-standard___standard__Array___standard__kernel__Object__init(var7); /* Direct call array#Array#init on <var7:Array[Object]>*/
+nit__parser_prod___AStarAssignOp___init_astarassignop(var2, var_tstareqnode2); /* Direct call parser_prod#AStarAssignOp#init_astarassignop on <var2:AStarAssignOp>*/
 }
-var_listnode5 = var7;
-var8 = NEW_nit__AListExprs(&type_nit__AListExprs);
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction247> */
 {
-nit__parser_prod___AListExprs___init_alistexprs(var8, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var8:AListExprs>*/
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
-var_pexprsnode4 = var8;
-var_tassignnode6 = var_nodearraylist2;
-/* <var_tassignnode6:nullable Object> isa nullable TAssign */
-cltype10 = type_nullable__nit__TAssign.color;
-idtype11 = type_nullable__nit__TAssign.id;
-if(var_tassignnode6 == NULL) {
-var9 = 1;
-} else {
-if(cltype10 >= var_tassignnode6->type->table_size) {
-var9 = 0;
-} else {
-var9 = var_tassignnode6->type->type_table[cltype10] == idtype11;
+{
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
+RET_LABEL:;
 }
-if (unlikely(!var9)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6468);
-show_backtrace(1);
+/* method parser#ReduceAction248#action for (self: ReduceAction248, Parser) */
+void nit__parser___nit__parser__ReduceAction248___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tslasheqnode2 /* var tslasheqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : ASlashAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable ASlashAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode7 = var_nodearraylist3;
-/* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype13 = type_nullable__nit__AExpr.color;
-idtype14 = type_nullable__nit__AExpr.id;
-if(var_pexprnode7 == NULL) {
-var12 = 1;
+var_nodearraylist1 = var;
+var_tslasheqnode2 = var_nodearraylist1;
+/* <var_tslasheqnode2:nullable Object> isa nullable TSlasheq */
+cltype = type_nullable__nit__TSlasheq.color;
+idtype = type_nullable__nit__TSlasheq.id;
+if(var_tslasheqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype13 >= var_pexprnode7->type->table_size) {
-var12 = 0;
+if(cltype >= (((long)var_tslasheqnode2&3)?type_info[((long)var_tslasheqnode2&3)]:var_tslasheqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var12 = var_pexprnode7->type->type_table[cltype13] == idtype14;
+var1 = (((long)var_tslasheqnode2&3)?type_info[((long)var_tslasheqnode2&3)]:var_tslasheqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6470);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6799);
+fatal_exit(1);
 }
-var15 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var2 = NEW_nit__ASlashAssignOp(&type_nit__ASlashAssignOp);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var15:ACallAssignExpr>*/
+nit__parser_prod___ASlashAssignOp___init_aslashassignop(var2, var_tslasheqnode2); /* Direct call parser_prod#ASlashAssignOp#init_aslashassignop on <var2:ASlashAssignOp>*/
 }
-var_pexprnode1 = var15;
-var_node_list = var_pexprnode1;
-var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction220> */
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction248> */
 {
-var17 = nit___nit__Parser___go_to(var_p, var16);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
 {
-nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction221#action for (self: ReduceAction221, Parser) */
-void nit__parser___nit__parser__ReduceAction221___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction249#action for (self: ReduceAction249, Parser) */
+void nit__parser___nit__parser__ReduceAction249___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var6 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var8 /* : Bool */;
+val* var_tpercenteqnode2 /* var tpercenteqnode2: nullable Object */;
+short int var1 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var18 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var19 /* : Int */;
-long var20 /* : Int */;
+val* var2 /* : APercentAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable APercentAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var;
+var_tpercenteqnode2 = var_nodearraylist1;
+/* <var_tpercenteqnode2:nullable Object> isa nullable TPercenteq */
+cltype = type_nullable__nit__TPercenteq.color;
+idtype = type_nullable__nit__TPercenteq.id;
+if(var_tpercenteqnode2 == NULL) {
+var1 = 1;
+} else {
+if(cltype >= (((long)var_tpercenteqnode2&3)?type_info[((long)var_tpercenteqnode2&3)]:var_tpercenteqnode2->type)->table_size) {
+var1 = 0;
+} else {
+var1 = (((long)var_tpercenteqnode2&3)?type_info[((long)var_tpercenteqnode2&3)]:var_tpercenteqnode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist4 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
+if (unlikely(!var1)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6814);
+fatal_exit(1);
+}
+var2 = NEW_nit__APercentAssignOp(&type_nit__APercentAssignOp);
 {
-var4 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___APercentAssignOp___init_apercentassignop(var2, var_tpercenteqnode2); /* Direct call parser_prod#APercentAssignOp#init_apercentassignop on <var2:APercentAssignOp>*/
 }
-var_nodearraylist2 = var4;
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction249> */
 {
-var5 = nit___nit__Parser___pop(var_p);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
-var_nodearraylist1 = var5;
-var6 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var6) on <var6:AImplicitSelfExpr> */
-RET_LABEL7:(void)0;
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
+RET_LABEL:;
 }
-var_pexprnode2 = var6;
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var8 = 1;
+/* method parser#ReduceAction250#action for (self: ReduceAction250, Parser) */
+void nit__parser___nit__parser__ReduceAction250___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tstarstareqnode2 /* var tstarstareqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : AStarstarAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable AStarstarAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var;
+var_tstarstareqnode2 = var_nodearraylist1;
+/* <var_tstarstareqnode2:nullable Object> isa nullable TStarstareq */
+cltype = type_nullable__nit__TStarstareq.color;
+idtype = type_nullable__nit__TStarstareq.id;
+if(var_tstarstareqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var8 = 0;
+if(cltype >= (((long)var_tstarstareqnode2&3)?type_info[((long)var_tstarstareqnode2&3)]:var_tstarstareqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var8 = var_tidnode3->type->type_table[cltype] == idtype;
+var1 = (((long)var_tstarstareqnode2&3)?type_info[((long)var_tstarstareqnode2&3)]:var_tstarstareqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6494);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6829);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist3;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype10 = type_nullable__nit__AExprs.color;
-idtype11 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var9 = 1;
-} else {
-if(cltype10 >= var_pexprsnode4->type->table_size) {
-var9 = 0;
-} else {
-var9 = var_pexprsnode4->type->type_table[cltype10] == idtype11;
+var2 = NEW_nit__AStarstarAssignOp(&type_nit__AStarstarAssignOp);
+{
+nit__parser_prod___AStarstarAssignOp___init_astarstarassignop(var2, var_tstarstareqnode2); /* Direct call parser_prod#AStarstarAssignOp#init_astarstarassignop on <var2:AStarstarAssignOp>*/
 }
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction250> */
+{
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
-if (unlikely(!var9)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6496);
-show_backtrace(1);
+{
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
-var_tassignnode5 = var_nodearraylist4;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype13 = type_nullable__nit__TAssign.color;
-idtype14 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var12 = 1;
+RET_LABEL:;
+}
+/* method parser#ReduceAction251#action for (self: ReduceAction251, Parser) */
+void nit__parser___nit__parser__ReduceAction251___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tpipeeqnode2 /* var tpipeeqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : APipeAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable APipeAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var;
+var_tpipeeqnode2 = var_nodearraylist1;
+/* <var_tpipeeqnode2:nullable Object> isa nullable TPipeeq */
+cltype = type_nullable__nit__TPipeeq.color;
+idtype = type_nullable__nit__TPipeeq.id;
+if(var_tpipeeqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype13 >= var_tassignnode5->type->table_size) {
-var12 = 0;
+if(cltype >= (((long)var_tpipeeqnode2&3)?type_info[((long)var_tpipeeqnode2&3)]:var_tpipeeqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var12 = var_tassignnode5->type->type_table[cltype13] == idtype14;
+var1 = (((long)var_tpipeeqnode2&3)?type_info[((long)var_tpipeeqnode2&3)]:var_tpipeeqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6498);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6844);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist5;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype16 = type_nullable__nit__AExpr.color;
-idtype17 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var15 = 1;
+var2 = NEW_nit__APipeAssignOp(&type_nit__APipeAssignOp);
+{
+nit__parser_prod___APipeAssignOp___init_apipeassignop(var2, var_tpipeeqnode2); /* Direct call parser_prod#APipeAssignOp#init_apipeassignop on <var2:APipeAssignOp>*/
+}
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction251> */
+{
+var4 = nit___nit__Parser___go_to(var_p, var3);
+}
+{
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+}
+RET_LABEL:;
+}
+/* method parser#ReduceAction252#action for (self: ReduceAction252, Parser) */
+void nit__parser___nit__parser__ReduceAction252___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tcareteqnode2 /* var tcareteqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : ACaretAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable ACaretAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var;
+var_tcareteqnode2 = var_nodearraylist1;
+/* <var_tcareteqnode2:nullable Object> isa nullable TCareteq */
+cltype = type_nullable__nit__TCareteq.color;
+idtype = type_nullable__nit__TCareteq.id;
+if(var_tcareteqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype16 >= var_pexprnode6->type->table_size) {
-var15 = 0;
+if(cltype >= (((long)var_tcareteqnode2&3)?type_info[((long)var_tcareteqnode2&3)]:var_tcareteqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var15 = var_pexprnode6->type->type_table[cltype16] == idtype17;
+var1 = (((long)var_tcareteqnode2&3)?type_info[((long)var_tcareteqnode2&3)]:var_tcareteqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6500);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6859);
+fatal_exit(1);
 }
-var18 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var2 = NEW_nit__ACaretAssignOp(&type_nit__ACaretAssignOp);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var18, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var18:ACallAssignExpr>*/
+nit__parser_prod___ACaretAssignOp___init_acaretassignop(var2, var_tcareteqnode2); /* Direct call parser_prod#ACaretAssignOp#init_acaretassignop on <var2:ACaretAssignOp>*/
 }
-var_pexprnode1 = var18;
-var_node_list = var_pexprnode1;
-var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction221> */
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction252> */
 {
-var20 = nit___nit__Parser___go_to(var_p, var19);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
 {
-nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction222#action for (self: ReduceAction222, Parser) */
-void nit__parser___nit__parser__ReduceAction222___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction253#action for (self: ReduceAction253, Parser) */
+void nit__parser___nit__parser__ReduceAction253___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var7 /* : Bool */;
+val* var_tampeqnode2 /* var tampeqnode2: nullable Object */;
+short int var1 /* : Bool */;
 int cltype;
 int idtype;
-val* var8 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var9 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_tassignnode6 /* var tassignnode6: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var16 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var17 /* : Int */;
-long var18 /* : Int */;
+val* var2 /* : AAmpAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable AAmpAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
 {
-var1 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var;
+var_tampeqnode2 = var_nodearraylist1;
+/* <var_tampeqnode2:nullable Object> isa nullable TAmpeq */
+cltype = type_nullable__nit__TAmpeq.color;
+idtype = type_nullable__nit__TAmpeq.id;
+if(var_tampeqnode2 == NULL) {
+var1 = 1;
+} else {
+if(cltype >= (((long)var_tampeqnode2&3)?type_info[((long)var_tampeqnode2&3)]:var_tampeqnode2->type)->table_size) {
+var1 = 0;
+} else {
+var1 = (((long)var_tampeqnode2&3)?type_info[((long)var_tampeqnode2&3)]:var_tampeqnode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist3 = var2;
+}
+if (unlikely(!var1)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6874);
+fatal_exit(1);
+}
+var2 = NEW_nit__AAmpAssignOp(&type_nit__AAmpAssignOp);
 {
-var3 = nit___nit__Parser___pop(var_p);
+nit__parser_prod___AAmpAssignOp___init_aampassignop(var2, var_tampeqnode2); /* Direct call parser_prod#AAmpAssignOp#init_aampassignop on <var2:AAmpAssignOp>*/
 }
-var_nodearraylist2 = var3;
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction253> */
 {
-var4 = nit___nit__Parser___pop(var_p);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
+RET_LABEL:;
 }
-var_pexprnode2 = var5;
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var7 = 1;
+/* method parser#ReduceAction254#action for (self: ReduceAction254, Parser) */
+void nit__parser___nit__parser__ReduceAction254___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tlleqnode2 /* var tlleqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : ALlAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable ALlAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var;
+var_tlleqnode2 = var_nodearraylist1;
+/* <var_tlleqnode2:nullable Object> isa nullable TLleq */
+cltype = type_nullable__nit__TLleq.color;
+idtype = type_nullable__nit__TLleq.id;
+if(var_tlleqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var7 = 0;
+if(cltype >= (((long)var_tlleqnode2&3)?type_info[((long)var_tlleqnode2&3)]:var_tlleqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var7 = var_tidnode3->type->type_table[cltype] == idtype;
+var1 = (((long)var_tlleqnode2&3)?type_info[((long)var_tlleqnode2&3)]:var_tlleqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6523);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6889);
+fatal_exit(1);
 }
-var8 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var2 = NEW_nit__ALlAssignOp(&type_nit__ALlAssignOp);
 {
-standard___standard__Array___standard__kernel__Object__init(var8); /* Direct call array#Array#init on <var8:Array[Object]>*/
+nit__parser_prod___ALlAssignOp___init_allassignop(var2, var_tlleqnode2); /* Direct call parser_prod#ALlAssignOp#init_allassignop on <var2:ALlAssignOp>*/
 }
-var_listnode5 = var8;
-var9 = NEW_nit__AListExprs(&type_nit__AListExprs);
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction254> */
 {
-nit__parser_prod___AListExprs___init_alistexprs(var9, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var9:AListExprs>*/
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
-var_pexprsnode4 = var9;
-var_tassignnode6 = var_nodearraylist3;
-/* <var_tassignnode6:nullable Object> isa nullable TAssign */
-cltype11 = type_nullable__nit__TAssign.color;
-idtype12 = type_nullable__nit__TAssign.id;
-if(var_tassignnode6 == NULL) {
-var10 = 1;
-} else {
-if(cltype11 >= var_tassignnode6->type->table_size) {
-var10 = 0;
-} else {
-var10 = var_tassignnode6->type->type_table[cltype11] == idtype12;
+{
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
+RET_LABEL:;
 }
-if (unlikely(!var10)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6529);
-show_backtrace(1);
+/* method parser#ReduceAction255#action for (self: ReduceAction255, Parser) */
+void nit__parser___nit__parser__ReduceAction255___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tggeqnode2 /* var tggeqnode2: nullable Object */;
+short int var1 /* : Bool */;
+int cltype;
+int idtype;
+val* var2 /* : AGgAssignOp */;
+val* var_passignopnode1 /* var passignopnode1: nullable AGgAssignOp */;
+long var3 /* : Int */;
+long var4 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode7 = var_nodearraylist4;
-/* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype14 = type_nullable__nit__AExpr.color;
-idtype15 = type_nullable__nit__AExpr.id;
-if(var_pexprnode7 == NULL) {
-var13 = 1;
+var_nodearraylist1 = var;
+var_tggeqnode2 = var_nodearraylist1;
+/* <var_tggeqnode2:nullable Object> isa nullable TGgeq */
+cltype = type_nullable__nit__TGgeq.color;
+idtype = type_nullable__nit__TGgeq.id;
+if(var_tggeqnode2 == NULL) {
+var1 = 1;
 } else {
-if(cltype14 >= var_pexprnode7->type->table_size) {
-var13 = 0;
+if(cltype >= (((long)var_tggeqnode2&3)?type_info[((long)var_tggeqnode2&3)]:var_tggeqnode2->type)->table_size) {
+var1 = 0;
 } else {
-var13 = var_pexprnode7->type->type_table[cltype14] == idtype15;
+var1 = (((long)var_tggeqnode2&3)?type_info[((long)var_tggeqnode2&3)]:var_tggeqnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var1)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6531);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6904);
+fatal_exit(1);
 }
-var16 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var2 = NEW_nit__AGgAssignOp(&type_nit__AGgAssignOp);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var16, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var16:ACallAssignExpr>*/
+nit__parser_prod___AGgAssignOp___init_aggassignop(var2, var_tggeqnode2); /* Direct call parser_prod#AGgAssignOp#init_aggassignop on <var2:AGgAssignOp>*/
 }
-var_pexprnode1 = var16;
-var_node_list = var_pexprnode1;
-var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction222> */
+var_passignopnode1 = var2;
+var_node_list = var_passignopnode1;
+var3 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction255> */
 {
-var18 = nit___nit__Parser___go_to(var_p, var17);
+var4 = nit___nit__Parser___go_to(var_p, var3);
 }
 {
-nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var4, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction223#action for (self: ReduceAction223, Parser) */
-void nit__parser___nit__parser__ReduceAction223___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction256#action for (self: ReduceAction256, Parser) */
+void nit__parser___nit__parser__ReduceAction256___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var7 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var9 /* : Bool */;
+val* var_tkwdonode2 /* var tkwdonode2: nullable Object */;
+short int var3 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var_tassignnode5 /* var tassignnode5: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var19 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var20 /* : Int */;
-long var21 /* : Int */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var_plabelnode4 /* var plabelnode4: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var10 /* : ADoExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ADoExpr */;
+long var11 /* : Int */;
+long var12 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var1;
+var_nodearraylist2 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var2;
+var_tkwdonode2 = var_nodearraylist1;
+/* <var_tkwdonode2:nullable Object> isa nullable TKwdo */
+cltype = type_nullable__nit__TKwdo.color;
+idtype = type_nullable__nit__TKwdo.id;
+if(var_tkwdonode2 == NULL) {
+var3 = 1;
+} else {
+if(cltype >= (((long)var_tkwdonode2&3)?type_info[((long)var_tkwdonode2&3)]:var_tkwdonode2->type)->table_size) {
+var3 = 0;
+} else {
+var3 = (((long)var_tkwdonode2&3)?type_info[((long)var_tkwdonode2&3)]:var_tkwdonode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist4 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6921);
+fatal_exit(1);
 }
-var_nodearraylist2 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
+var_pexprnode3 = var_nodearraylist2;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype5 = type_nullable__nit__AExpr.color;
+idtype6 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var4 = 1;
+} else {
+if(cltype5 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var4 = 0;
+} else {
+var4 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype5] == idtype6;
 }
-var_nodearraylist1 = var6;
-var7 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
-{
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var7) on <var7:AImplicitSelfExpr> */
-RET_LABEL8:(void)0;
 }
+if (unlikely(!var4)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6923);
+fatal_exit(1);
 }
-var_pexprnode2 = var7;
-var_tidnode3 = var_nodearraylist3;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var9 = 1;
+var_plabelnode4 = var_nodearraylist3;
+/* <var_plabelnode4:nullable Object> isa nullable ALabel */
+cltype8 = type_nullable__nit__ALabel.color;
+idtype9 = type_nullable__nit__ALabel.id;
+if(var_plabelnode4 == NULL) {
+var7 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var9 = 0;
+if(cltype8 >= (((long)var_plabelnode4&3)?type_info[((long)var_plabelnode4&3)]:var_plabelnode4->type)->table_size) {
+var7 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype] == idtype;
+var7 = (((long)var_plabelnode4&3)?type_info[((long)var_plabelnode4&3)]:var_plabelnode4->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6556);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6925);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist4;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype11 = type_nullable__nit__AExprs.color;
-idtype12 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var10 = 1;
-} else {
-if(cltype11 >= var_pexprsnode4->type->table_size) {
-var10 = 0;
-} else {
-var10 = var_pexprsnode4->type->type_table[cltype11] == idtype12;
+var10 = NEW_nit__ADoExpr(&type_nit__ADoExpr);
+{
+nit__parser_prod___ADoExpr___init_adoexpr(var10, var_tkwdonode2, var_pexprnode3, var_plabelnode4); /* Direct call parser_prod#ADoExpr#init_adoexpr on <var10:ADoExpr>*/
+}
+var_pexprnode1 = var10;
+var_node_list = var_pexprnode1;
+var11 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction256> */
+{
+var12 = nit___nit__Parser___go_to(var_p, var11);
 }
+{
+nit___nit__Parser___push(var_p, var12, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+}
+RET_LABEL:;
+}
+/* method parser#ReduceAction257#action for (self: ReduceAction257, Parser) */
+void nit__parser___nit__parser__ReduceAction257___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var1 /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tkwdonode2 /* var tkwdonode2: nullable Object */;
+short int var2 /* : Bool */;
+int cltype;
+int idtype;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var3 /* : Bool */;
+int cltype4;
+int idtype5;
+val* var6 /* : ADoExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ADoExpr */;
+long var7 /* : Int */;
+long var8 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
 }
-if (unlikely(!var10)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6558);
-show_backtrace(1);
+var_nodearraylist2 = var;
+{
+var1 = nit___nit__Parser___pop(var_p);
 }
-var_tassignnode5 = var_nodearraylist5;
-/* <var_tassignnode5:nullable Object> isa nullable TAssign */
-cltype14 = type_nullable__nit__TAssign.color;
-idtype15 = type_nullable__nit__TAssign.id;
-if(var_tassignnode5 == NULL) {
-var13 = 1;
+var_nodearraylist1 = var1;
+var_tkwdonode2 = var_nodearraylist1;
+/* <var_tkwdonode2:nullable Object> isa nullable TKwdo */
+cltype = type_nullable__nit__TKwdo.color;
+idtype = type_nullable__nit__TKwdo.id;
+if(var_tkwdonode2 == NULL) {
+var2 = 1;
 } else {
-if(cltype14 >= var_tassignnode5->type->table_size) {
-var13 = 0;
+if(cltype >= (((long)var_tkwdonode2&3)?type_info[((long)var_tkwdonode2&3)]:var_tkwdonode2->type)->table_size) {
+var2 = 0;
 } else {
-var13 = var_tassignnode5->type->type_table[cltype14] == idtype15;
+var2 = (((long)var_tkwdonode2&3)?type_info[((long)var_tkwdonode2&3)]:var_tkwdonode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var2)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6560);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6943);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist6;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype17 = type_nullable__nit__AExpr.color;
-idtype18 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var16 = 1;
+var_pexprnode3 = var_nodearraylist2;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype4 = type_nullable__nit__AExpr.color;
+idtype5 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var3 = 1;
 } else {
-if(cltype17 >= var_pexprnode6->type->table_size) {
-var16 = 0;
+if(cltype4 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var3 = 0;
 } else {
-var16 = var_pexprnode6->type->type_table[cltype17] == idtype18;
+var3 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype4] == idtype5;
 }
 }
-if (unlikely(!var16)) {
+if (unlikely(!var3)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6562);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6945);
+fatal_exit(1);
 }
-var19 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var6 = NEW_nit__ADoExpr(&type_nit__ADoExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var19, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode5, var_pexprnode6); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var19:ACallAssignExpr>*/
+nit__parser_prod___ADoExpr___init_adoexpr(var6, var_tkwdonode2, var_pexprnode3, ((val*)NULL)); /* Direct call parser_prod#ADoExpr#init_adoexpr on <var6:ADoExpr>*/
 }
-var_pexprnode1 = var19;
+var_pexprnode1 = var6;
 var_node_list = var_pexprnode1;
-var20 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction223> */
+var7 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction257> */
 {
-var21 = nit___nit__Parser___go_to(var_p, var20);
+var8 = nit___nit__Parser___go_to(var_p, var7);
 }
 {
-nit___nit__Parser___push(var_p, var21, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var8, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction224#action for (self: ReduceAction224, Parser) */
-void nit__parser___nit__parser__ReduceAction224___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction258#action for (self: ReduceAction258, Parser) */
+void nit__parser___nit__parser__ReduceAction258___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var5 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var6 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var7 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var6 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
 short int var8 /* : Bool */;
 int cltype;
 int idtype;
-val* var9 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var10 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_tassignnode6 /* var tassignnode6: nullable Object */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+val* var_tkwelsenode6 /* var tkwelsenode6: nullable Object */;
+short int var18 /* : Bool */;
+int cltype19;
+int idtype20;
 val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-val* var17 /* : ACallAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallAssignExpr */;
-long var18 /* : Int */;
-long var19 /* : Int */;
+short int var21 /* : Bool */;
+int cltype22;
+int idtype23;
+val* var24 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
+long var25 /* : Int */;
+long var26 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist8 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist7 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist6 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
+var_nodearraylist5 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var4;
+var_nodearraylist4 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var5;
-var6 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist3 = var5;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var6) on <var6:AImplicitSelfExpr> */
-RET_LABEL7:(void)0;
+var6 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist2 = var6;
+{
+var7 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var6;
-var_tidnode3 = var_nodearraylist3;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
+var_nodearraylist1 = var7;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
 var8 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_tidnode3->type->type_table[cltype] == idtype;
+var8 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6586);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6969);
+fatal_exit(1);
 }
-var9 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var9); /* Direct call array#Array#init on <var9:Array[Object]>*/
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype10 = type_nullable__nit__AExpr.color;
+idtype11 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var9 = 1;
+} else {
+if(cltype10 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var9 = 0;
+} else {
+var9 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype10] == idtype11;
 }
-var_listnode5 = var9;
-var10 = NEW_nit__AListExprs(&type_nit__AListExprs);
-{
-nit__parser_prod___AListExprs___init_alistexprs(var10, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var10:AListExprs>*/
 }
-var_pexprsnode4 = var10;
-var_tassignnode6 = var_nodearraylist4;
-/* <var_tassignnode6:nullable Object> isa nullable TAssign */
-cltype12 = type_nullable__nit__TAssign.color;
-idtype13 = type_nullable__nit__TAssign.id;
-if(var_tassignnode6 == NULL) {
-var11 = 1;
+if (unlikely(!var9)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6971);
+fatal_exit(1);
+}
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype13 = type_nullable__nit__TKwthen.color;
+idtype14 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
+var12 = 1;
 } else {
-if(cltype12 >= var_tassignnode6->type->table_size) {
-var11 = 0;
+if(cltype13 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
+var12 = 0;
 } else {
-var11 = var_tassignnode6->type->type_table[cltype12] == idtype13;
+var12 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var11)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6592);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6973);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist5;
+var_pexprnode5 = var_nodearraylist6;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype16 = type_nullable__nit__AExpr.color;
+idtype17 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var15 = 1;
+} else {
+if(cltype16 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var15 = 0;
+} else {
+var15 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype16] == idtype17;
+}
+}
+if (unlikely(!var15)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6975);
+fatal_exit(1);
+}
+var_tkwelsenode6 = var_nodearraylist7;
+/* <var_tkwelsenode6:nullable Object> isa nullable TKwelse */
+cltype19 = type_nullable__nit__TKwelse.color;
+idtype20 = type_nullable__nit__TKwelse.id;
+if(var_tkwelsenode6 == NULL) {
+var18 = 1;
+} else {
+if(cltype19 >= (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->table_size) {
+var18 = 0;
+} else {
+var18 = (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->type_table[cltype19] == idtype20;
+}
+}
+if (unlikely(!var18)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6977);
+fatal_exit(1);
+}
+var_pexprnode7 = var_nodearraylist8;
 /* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype15 = type_nullable__nit__AExpr.color;
-idtype16 = type_nullable__nit__AExpr.id;
+cltype22 = type_nullable__nit__AExpr.color;
+idtype23 = type_nullable__nit__AExpr.id;
 if(var_pexprnode7 == NULL) {
-var14 = 1;
+var21 = 1;
 } else {
-if(cltype15 >= var_pexprnode7->type->table_size) {
-var14 = 0;
+if(cltype22 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var21 = 0;
 } else {
-var14 = var_pexprnode7->type->type_table[cltype15] == idtype16;
+var21 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype22] == idtype23;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var21)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6594);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6979);
+fatal_exit(1);
 }
-var17 = NEW_nit__ACallAssignExpr(&type_nit__ACallAssignExpr);
+var24 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___ACallAssignExpr___init_acallassignexpr(var17, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_tassignnode6, var_pexprnode7); /* Direct call parser_prod#ACallAssignExpr#init_acallassignexpr on <var17:ACallAssignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var24, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, var_pexprnode5, var_tkwelsenode6, var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var24:AIfExpr>*/
 }
-var_pexprnode1 = var17;
+var_pexprnode1 = var24;
 var_node_list = var_pexprnode1;
-var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction224> */
+var25 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction258> */
 {
-var19 = nit___nit__Parser___go_to(var_p, var18);
+var26 = nit___nit__Parser___go_to(var_p, var25);
 }
 {
-nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var26, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction227#action for (self: ReduceAction227, Parser) */
-void nit__parser___nit__parser__ReduceAction227___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction259#action for (self: ReduceAction259, Parser) */
+void nit__parser___nit__parser__ReduceAction259___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var5 /* : Bool */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode3 /* var pexprsnode3: nullable Object */;
-short int var6 /* : Bool */;
-int cltype7;
-int idtype8;
-val* var_tassignnode4 /* var tassignnode4: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
 val* var_pexprnode5 /* var pexprnode5: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var15 /* : ABraAssignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ABraAssignExpr */;
-long var16 /* : Int */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var16 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
 long var17 /* : Int */;
+long var18 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist3 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var5 = 1;
+var_nodearraylist2 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var5;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
+var6 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var5 = 0;
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
+var6 = 0;
 } else {
-var5 = var_pexprnode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var5)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6616);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7004);
+fatal_exit(1);
 }
-var_pexprsnode3 = var_nodearraylist2;
-/* <var_pexprsnode3:nullable Object> isa nullable AExprs */
-cltype7 = type_nullable__nit__AExprs.color;
-idtype8 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode3 == NULL) {
-var6 = 1;
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype8 = type_nullable__nit__AExpr.color;
+idtype9 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var7 = 1;
 } else {
-if(cltype7 >= var_pexprsnode3->type->table_size) {
-var6 = 0;
+if(cltype8 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var7 = 0;
 } else {
-var6 = var_pexprsnode3->type->type_table[cltype7] == idtype8;
+var7 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var6)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6618);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7006);
+fatal_exit(1);
 }
-var_tassignnode4 = var_nodearraylist3;
-/* <var_tassignnode4:nullable Object> isa nullable TAssign */
-cltype10 = type_nullable__nit__TAssign.color;
-idtype11 = type_nullable__nit__TAssign.id;
-if(var_tassignnode4 == NULL) {
-var9 = 1;
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype11 = type_nullable__nit__TKwthen.color;
+idtype12 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
+var10 = 1;
 } else {
-if(cltype10 >= var_tassignnode4->type->table_size) {
-var9 = 0;
+if(cltype11 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
+var10 = 0;
 } else {
-var9 = var_tassignnode4->type->type_table[cltype10] == idtype11;
+var10 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6620);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7008);
+fatal_exit(1);
 }
-var_pexprnode5 = var_nodearraylist4;
+var_pexprnode5 = var_nodearraylist6;
 /* <var_pexprnode5:nullable Object> isa nullable AExpr */
-cltype13 = type_nullable__nit__AExpr.color;
-idtype14 = type_nullable__nit__AExpr.id;
+cltype14 = type_nullable__nit__AExpr.color;
+idtype15 = type_nullable__nit__AExpr.id;
 if(var_pexprnode5 == NULL) {
-var12 = 1;
+var13 = 1;
 } else {
-if(cltype13 >= var_pexprnode5->type->table_size) {
-var12 = 0;
+if(cltype14 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var13 = 0;
 } else {
-var12 = var_pexprnode5->type->type_table[cltype13] == idtype14;
+var13 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6622);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7010);
+fatal_exit(1);
 }
-var15 = NEW_nit__ABraAssignExpr(&type_nit__ABraAssignExpr);
+var16 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___ABraAssignExpr___init_abraassignexpr(var15, var_pexprnode2, var_pexprsnode3, var_tassignnode4, var_pexprnode5); /* Direct call parser_prod#ABraAssignExpr#init_abraassignexpr on <var15:ABraAssignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var16, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, var_pexprnode5, ((val*)NULL), ((val*)NULL)); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var16:AIfExpr>*/
 }
-var_pexprnode1 = var15;
+var_pexprnode1 = var16;
 var_node_list = var_pexprnode1;
-var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction227> */
+var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction259> */
 {
-var17 = nit___nit__Parser___go_to(var_p, var16);
+var18 = nit___nit__Parser___go_to(var_p, var17);
 }
 {
-nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction228#action for (self: ReduceAction228, Parser) */
-void nit__parser___nit__parser__ReduceAction228___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction260#action for (self: ReduceAction260, Parser) */
+void nit__parser___nit__parser__ReduceAction260___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var5 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var6 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
 val* var7 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var8 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
+short int var9 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tattridnode3 /* var tattridnode3: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var_passignopnode4 /* var passignopnode4: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
 val* var_pexprnode5 /* var pexprnode5: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var18 /* : AAttrReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AAttrReassignExpr */;
-long var19 /* : Int */;
-long var20 /* : Int */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
+val* var_tkwelsenode6 /* var tkwelsenode6: nullable Object */;
+short int var19 /* : Bool */;
+int cltype20;
+int idtype21;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var22 /* : Bool */;
+int cltype23;
+int idtype24;
+val* var25 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
+long var26 /* : Int */;
+long var27 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist9 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist8 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist7 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
+var_nodearraylist6 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var4;
+var_nodearraylist5 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var5;
+var_nodearraylist4 = var5;
 {
 var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var6;
+var_nodearraylist3 = var6;
 {
 var7 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var7;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var8 = 1;
+var_nodearraylist2 = var7;
+{
+var8 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var8;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
+var9 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var8 = 0;
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
+var9 = 0;
 } else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
+var9 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6646);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7038);
+fatal_exit(1);
 }
-var_tattridnode3 = var_nodearraylist5;
-/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
-cltype10 = type_nullable__nit__TAttrid.color;
-idtype11 = type_nullable__nit__TAttrid.id;
-if(var_tattridnode3 == NULL) {
-var9 = 1;
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype11 = type_nullable__nit__AExpr.color;
+idtype12 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var10 = 1;
 } else {
-if(cltype10 >= var_tattridnode3->type->table_size) {
-var9 = 0;
+if(cltype11 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var10 = 0;
 } else {
-var9 = var_tattridnode3->type->type_table[cltype10] == idtype11;
+var10 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6648);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7040);
+fatal_exit(1);
 }
-var_passignopnode4 = var_nodearraylist6;
-/* <var_passignopnode4:nullable Object> isa nullable AAssignOp */
-cltype13 = type_nullable__nit__AAssignOp.color;
-idtype14 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode4 == NULL) {
-var12 = 1;
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype14 = type_nullable__nit__TKwthen.color;
+idtype15 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
+var13 = 1;
 } else {
-if(cltype13 >= var_passignopnode4->type->table_size) {
-var12 = 0;
+if(cltype14 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
+var13 = 0;
 } else {
-var12 = var_passignopnode4->type->type_table[cltype13] == idtype14;
+var13 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6650);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7042);
+fatal_exit(1);
 }
 var_pexprnode5 = var_nodearraylist7;
 /* <var_pexprnode5:nullable Object> isa nullable AExpr */
-cltype16 = type_nullable__nit__AExpr.color;
-idtype17 = type_nullable__nit__AExpr.id;
+cltype17 = type_nullable__nit__AExpr.color;
+idtype18 = type_nullable__nit__AExpr.id;
 if(var_pexprnode5 == NULL) {
-var15 = 1;
+var16 = 1;
 } else {
-if(cltype16 >= var_pexprnode5->type->table_size) {
-var15 = 0;
+if(cltype17 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var16 = 0;
 } else {
-var15 = var_pexprnode5->type->type_table[cltype16] == idtype17;
+var16 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype17] == idtype18;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var16)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7044);
+fatal_exit(1);
+}
+var_tkwelsenode6 = var_nodearraylist8;
+/* <var_tkwelsenode6:nullable Object> isa nullable TKwelse */
+cltype20 = type_nullable__nit__TKwelse.color;
+idtype21 = type_nullable__nit__TKwelse.id;
+if(var_tkwelsenode6 == NULL) {
+var19 = 1;
+} else {
+if(cltype20 >= (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->table_size) {
+var19 = 0;
+} else {
+var19 = (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->type_table[cltype20] == idtype21;
+}
+}
+if (unlikely(!var19)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7046);
+fatal_exit(1);
+}
+var_pexprnode7 = var_nodearraylist9;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype23 = type_nullable__nit__AExpr.color;
+idtype24 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var22 = 1;
+} else {
+if(cltype23 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var22 = 0;
+} else {
+var22 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype23] == idtype24;
+}
+}
+if (unlikely(!var22)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6652);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7048);
+fatal_exit(1);
 }
-var18 = NEW_nit__AAttrReassignExpr(&type_nit__AAttrReassignExpr);
+var25 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___AAttrReassignExpr___init_aattrreassignexpr(var18, var_pexprnode2, var_tattridnode3, var_passignopnode4, var_pexprnode5); /* Direct call parser_prod#AAttrReassignExpr#init_aattrreassignexpr on <var18:AAttrReassignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var25, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, var_pexprnode5, var_tkwelsenode6, var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var25:AIfExpr>*/
 }
-var_pexprnode1 = var18;
+var_pexprnode1 = var25;
 var_node_list = var_pexprnode1;
-var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction228> */
+var26 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction260> */
 {
-var20 = nit___nit__Parser___go_to(var_p, var19);
+var27 = nit___nit__Parser___go_to(var_p, var26);
 }
 {
-nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var27, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction229#action for (self: ReduceAction229, Parser) */
-void nit__parser___nit__parser__ReduceAction229___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction261#action for (self: ReduceAction261, Parser) */
+void nit__parser___nit__parser__ReduceAction261___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tattridnode3 /* var tattridnode3: nullable Object */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
 short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_passignopnode4 /* var passignopnode4: nullable Object */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-val* var14 /* : AAttrReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable AAttrReassignExpr */;
-long var15 /* : Int */;
-long var16 /* : Int */;
+val* var_tkwelsenode6 /* var tkwelsenode6: nullable Object */;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var20 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
+long var21 /* : Int */;
+long var22 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist3 = var4;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
+var5 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var5;
-var_tattridnode3 = var_nodearraylist2;
-/* <var_tattridnode3:nullable Object> isa nullable TAttrid */
-cltype = type_nullable__nit__TAttrid.color;
-idtype = type_nullable__nit__TAttrid.id;
-if(var_tattridnode3 == NULL) {
+var_nodearraylist1 = var6;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
 var7 = 1;
 } else {
-if(cltype >= var_tattridnode3->type->table_size) {
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_tattridnode3->type->type_table[cltype] == idtype;
+var7 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6674);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7074);
+fatal_exit(1);
 }
-var_passignopnode4 = var_nodearraylist3;
-/* <var_passignopnode4:nullable Object> isa nullable AAssignOp */
-cltype9 = type_nullable__nit__AAssignOp.color;
-idtype10 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode4 == NULL) {
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype9 = type_nullable__nit__AExpr.color;
+idtype10 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
 var8 = 1;
 } else {
-if(cltype9 >= var_passignopnode4->type->table_size) {
+if(cltype9 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_passignopnode4->type->type_table[cltype9] == idtype10;
+var8 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype9] == idtype10;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6676);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7076);
+fatal_exit(1);
 }
-var_pexprnode5 = var_nodearraylist4;
-/* <var_pexprnode5:nullable Object> isa nullable AExpr */
-cltype12 = type_nullable__nit__AExpr.color;
-idtype13 = type_nullable__nit__AExpr.id;
-if(var_pexprnode5 == NULL) {
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype12 = type_nullable__nit__TKwthen.color;
+idtype13 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
 var11 = 1;
 } else {
-if(cltype12 >= var_pexprnode5->type->table_size) {
+if(cltype12 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
 var11 = 0;
 } else {
-var11 = var_pexprnode5->type->type_table[cltype12] == idtype13;
+var11 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype12] == idtype13;
 }
 }
 if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6678);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7078);
+fatal_exit(1);
+}
+var_tkwelsenode6 = var_nodearraylist6;
+/* <var_tkwelsenode6:nullable Object> isa nullable TKwelse */
+cltype15 = type_nullable__nit__TKwelse.color;
+idtype16 = type_nullable__nit__TKwelse.id;
+if(var_tkwelsenode6 == NULL) {
+var14 = 1;
+} else {
+if(cltype15 >= (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->table_size) {
+var14 = 0;
+} else {
+var14 = (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->type_table[cltype15] == idtype16;
+}
+}
+if (unlikely(!var14)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7080);
+fatal_exit(1);
+}
+var_pexprnode7 = var_nodearraylist7;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype18 = type_nullable__nit__AExpr.color;
+idtype19 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var17 = 1;
+} else {
+if(cltype18 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var17 = 0;
+} else {
+var17 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype18] == idtype19;
+}
+}
+if (unlikely(!var17)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7082);
+fatal_exit(1);
 }
-var14 = NEW_nit__AAttrReassignExpr(&type_nit__AAttrReassignExpr);
+var20 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___AAttrReassignExpr___init_aattrreassignexpr(var14, var_pexprnode2, var_tattridnode3, var_passignopnode4, var_pexprnode5); /* Direct call parser_prod#AAttrReassignExpr#init_aattrreassignexpr on <var14:AAttrReassignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var20, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, ((val*)NULL), var_tkwelsenode6, var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var20:AIfExpr>*/
 }
-var_pexprnode1 = var14;
+var_pexprnode1 = var20;
 var_node_list = var_pexprnode1;
-var15 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction229> */
+var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction261> */
 {
-var16 = nit___nit__Parser___go_to(var_p, var15);
+var22 = nit___nit__Parser___go_to(var_p, var21);
 }
 {
-nit___nit__Parser___push(var_p, var16, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction230#action for (self: ReduceAction230, Parser) */
-void nit__parser___nit__parser__ReduceAction230___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction262#action for (self: ReduceAction262, Parser) */
+void nit__parser___nit__parser__ReduceAction262___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var1 /* : nullable Object */;
 val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var2 /* : nullable Object */;
@@ -8272,33 +8270,36 @@ val* var6 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
 val* var7 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
 short int var8 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
 short int var9 /* : Bool */;
 int cltype10;
 int idtype11;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
 short int var12 /* : Bool */;
 int cltype13;
 int idtype14;
-val* var_passignopnode5 /* var passignopnode5: nullable Object */;
+val* var_tkwelsenode6 /* var tkwelsenode6: nullable Object */;
 short int var15 /* : Bool */;
 int cltype16;
 int idtype17;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
 short int var18 /* : Bool */;
 int cltype19;
 int idtype20;
-val* var21 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+val* var21 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
 long var22 /* : Int */;
 long var23 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist8 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
@@ -8327,103 +8328,103 @@ var_nodearraylist2 = var6;
 var7 = nit___nit__Parser___pop(var_p);
 }
 var_nodearraylist1 = var7;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
 var8 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6702);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7109);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist4;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype10 = type_nullable__nit__TId.color;
-idtype11 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype10 = type_nullable__nit__AExpr.color;
+idtype11 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
 var9 = 1;
 } else {
-if(cltype10 >= var_tidnode3->type->table_size) {
+if(cltype10 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
 var9 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype10] == idtype11;
+var9 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype10] == idtype11;
 }
 }
 if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6704);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7111);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist5;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype13 = type_nullable__nit__AExprs.color;
-idtype14 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype13 = type_nullable__nit__TKwthen.color;
+idtype14 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
 var12 = 1;
 } else {
-if(cltype13 >= var_pexprsnode4->type->table_size) {
+if(cltype13 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
 var12 = 0;
 } else {
-var12 = var_pexprsnode4->type->type_table[cltype13] == idtype14;
+var12 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype13] == idtype14;
 }
 }
 if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6706);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7113);
+fatal_exit(1);
 }
-var_passignopnode5 = var_nodearraylist6;
-/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
-cltype16 = type_nullable__nit__AAssignOp.color;
-idtype17 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode5 == NULL) {
+var_tkwelsenode6 = var_nodearraylist7;
+/* <var_tkwelsenode6:nullable Object> isa nullable TKwelse */
+cltype16 = type_nullable__nit__TKwelse.color;
+idtype17 = type_nullable__nit__TKwelse.id;
+if(var_tkwelsenode6 == NULL) {
 var15 = 1;
 } else {
-if(cltype16 >= var_passignopnode5->type->table_size) {
+if(cltype16 >= (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->table_size) {
 var15 = 0;
 } else {
-var15 = var_passignopnode5->type->type_table[cltype16] == idtype17;
+var15 = (((long)var_tkwelsenode6&3)?type_info[((long)var_tkwelsenode6&3)]:var_tkwelsenode6->type)->type_table[cltype16] == idtype17;
 }
 }
 if (unlikely(!var15)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6708);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7115);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist7;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+var_pexprnode7 = var_nodearraylist8;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
 cltype19 = type_nullable__nit__AExpr.color;
 idtype20 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
+if(var_pexprnode7 == NULL) {
 var18 = 1;
 } else {
-if(cltype19 >= var_pexprnode6->type->table_size) {
+if(cltype19 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
 var18 = 0;
 } else {
-var18 = var_pexprnode6->type->type_table[cltype19] == idtype20;
+var18 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype19] == idtype20;
 }
 }
 if (unlikely(!var18)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6710);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7117);
+fatal_exit(1);
 }
-var21 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var21 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var21, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var21:ACallReassignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var21, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, ((val*)NULL), var_tkwelsenode6, var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var21:AIfExpr>*/
 }
 var_pexprnode1 = var21;
 var_node_list = var_pexprnode1;
-var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction230> */
+var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction262> */
 {
 var23 = nit___nit__Parser___go_to(var_p, var22);
 }
@@ -8432,1468 +8433,1492 @@ nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_wor
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction231#action for (self: ReduceAction231, Parser) */
-void nit__parser___nit__parser__ReduceAction231___nit__parser_work__ReduceAction__action(val* self, val* p0) {
-val* var_p /* var p: Parser */;
-val* var /* : null */;
-val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var5 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var6 /* : nullable Object */;
-val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var7 /* : Bool */;
-int cltype;
-int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var8 /* : Bool */;
-int cltype9;
-int idtype10;
-val* var11 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var12 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_passignopnode6 /* var passignopnode6: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var19 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var20 /* : Int */;
-long var21 /* : Int */;
-var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist6 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist5 = var2;
-{
-var3 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist4 = var3;
-{
-var4 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist3 = var4;
-{
-var5 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var6;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var7 = 1;
-} else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var7 = 0;
-} else {
-var7 = var_pexprnode2->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var7)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6734);
-show_backtrace(1);
-}
-var_tidnode3 = var_nodearraylist4;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype9 = type_nullable__nit__TId.color;
-idtype10 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var8 = 1;
-} else {
-if(cltype9 >= var_tidnode3->type->table_size) {
-var8 = 0;
-} else {
-var8 = var_tidnode3->type->type_table[cltype9] == idtype10;
-}
-}
-if (unlikely(!var8)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6736);
-show_backtrace(1);
-}
-var11 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var11); /* Direct call array#Array#init on <var11:Array[Object]>*/
-}
-var_listnode5 = var11;
-var12 = NEW_nit__AListExprs(&type_nit__AListExprs);
-{
-nit__parser_prod___AListExprs___init_alistexprs(var12, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var12:AListExprs>*/
-}
-var_pexprsnode4 = var12;
-var_passignopnode6 = var_nodearraylist5;
-/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
-cltype14 = type_nullable__nit__AAssignOp.color;
-idtype15 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode6 == NULL) {
-var13 = 1;
-} else {
-if(cltype14 >= var_passignopnode6->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_passignopnode6->type->type_table[cltype14] == idtype15;
-}
-}
-if (unlikely(!var13)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6742);
-show_backtrace(1);
-}
-var_pexprnode7 = var_nodearraylist6;
-/* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype17 = type_nullable__nit__AExpr.color;
-idtype18 = type_nullable__nit__AExpr.id;
-if(var_pexprnode7 == NULL) {
-var16 = 1;
-} else {
-if(cltype17 >= var_pexprnode7->type->table_size) {
-var16 = 0;
-} else {
-var16 = var_pexprnode7->type->type_table[cltype17] == idtype18;
-}
-}
-if (unlikely(!var16)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6744);
-show_backtrace(1);
-}
-var19 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
-{
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var19, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var19:ACallReassignExpr>*/
-}
-var_pexprnode1 = var19;
-var_node_list = var_pexprnode1;
-var20 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction231> */
-{
-var21 = nit___nit__Parser___go_to(var_p, var20);
-}
-{
-nit___nit__Parser___push(var_p, var21, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
-}
-RET_LABEL:;
-}
-/* method parser#ReduceAction232#action for (self: ReduceAction232, Parser) */
-void nit__parser___nit__parser__ReduceAction232___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction263#action for (self: ReduceAction263, Parser) */
+void nit__parser___nit__parser__ReduceAction263___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var7 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var9 /* : Bool */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
+short int var8 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var_passignopnode5 /* var passignopnode5: nullable Object */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var19 /* : Bool */;
-int cltype20;
-int idtype21;
-val* var22 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var9 /* : Bool */;
+int cltype10;
+int idtype11;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var15 /* : Bool */;
+int cltype16;
+int idtype17;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
+short int var18 /* : Bool */;
+int cltype19;
+int idtype20;
+val* var21 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
+long var22 /* : Int */;
 long var23 /* : Int */;
-long var24 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist8 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist8 = var1;
+var_nodearraylist7 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var2;
+var_nodearraylist6 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var3;
+var_nodearraylist5 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var4;
+var_nodearraylist4 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var5;
+var_nodearraylist3 = var5;
 {
 var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var6;
+var_nodearraylist2 = var6;
 {
 var7 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var7;
-{
-var8 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var8;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var9 = 1;
+var_nodearraylist1 = var7;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
+var8 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var9 = 0;
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
+var8 = 0;
 } else {
-var9 = var_pexprnode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6770);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7144);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist5;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype11 = type_nullable__nit__TId.color;
-idtype12 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var10 = 1;
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype10 = type_nullable__nit__AExpr.color;
+idtype11 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var9 = 1;
 } else {
-if(cltype11 >= var_tidnode3->type->table_size) {
-var10 = 0;
+if(cltype10 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var9 = 0;
 } else {
-var10 = var_tidnode3->type->type_table[cltype11] == idtype12;
+var9 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype10] == idtype11;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var9)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6772);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7146);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist6;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype14 = type_nullable__nit__AExprs.color;
-idtype15 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var13 = 1;
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype13 = type_nullable__nit__TKwthen.color;
+idtype14 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
+var12 = 1;
 } else {
-if(cltype14 >= var_pexprsnode4->type->table_size) {
-var13 = 0;
+if(cltype13 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
+var12 = 0;
 } else {
-var13 = var_pexprsnode4->type->type_table[cltype14] == idtype15;
+var12 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype13] == idtype14;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6774);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7148);
+fatal_exit(1);
 }
-var_passignopnode5 = var_nodearraylist7;
-/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
-cltype17 = type_nullable__nit__AAssignOp.color;
-idtype18 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode5 == NULL) {
-var16 = 1;
+var_pexprnode5 = var_nodearraylist7;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype16 = type_nullable__nit__AExpr.color;
+idtype17 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var15 = 1;
 } else {
-if(cltype17 >= var_passignopnode5->type->table_size) {
-var16 = 0;
+if(cltype16 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var15 = 0;
 } else {
-var16 = var_passignopnode5->type->type_table[cltype17] == idtype18;
+var15 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype16] == idtype17;
 }
 }
-if (unlikely(!var16)) {
+if (unlikely(!var15)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6776);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7150);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist8;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype20 = type_nullable__nit__AExpr.color;
-idtype21 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var19 = 1;
+var_pexprnode7 = var_nodearraylist8;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype19 = type_nullable__nit__AExpr.color;
+idtype20 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
+var18 = 1;
 } else {
-if(cltype20 >= var_pexprnode6->type->table_size) {
-var19 = 0;
+if(cltype19 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var18 = 0;
 } else {
-var19 = var_pexprnode6->type->type_table[cltype20] == idtype21;
+var18 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype19] == idtype20;
 }
 }
-if (unlikely(!var19)) {
+if (unlikely(!var18)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6778);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7152);
+fatal_exit(1);
 }
-var22 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var21 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var22, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var22:ACallReassignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var21, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, var_pexprnode5, ((val*)NULL), var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var21:AIfExpr>*/
 }
-var_pexprnode1 = var22;
+var_pexprnode1 = var21;
 var_node_list = var_pexprnode1;
-var23 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction232> */
+var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction263> */
 {
-var24 = nit___nit__Parser___go_to(var_p, var23);
+var23 = nit___nit__Parser___go_to(var_p, var22);
 }
 {
-nit___nit__Parser___push(var_p, var24, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction233#action for (self: ReduceAction233, Parser) */
-void nit__parser___nit__parser__ReduceAction233___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction264#action for (self: ReduceAction264, Parser) */
+void nit__parser___nit__parser__ReduceAction264___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var2 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var8 /* : Bool */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var12 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var13 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_passignopnode6 /* var passignopnode6: nullable Object */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
 val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-val* var20 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var21 /* : Int */;
-long var22 /* : Int */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var16 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
+long var17 /* : Int */;
+long var18 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var3;
+var_nodearraylist3 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var4;
+var_nodearraylist2 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist2 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist1 = var7;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var8 = 1;
+var_nodearraylist1 = var5;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
+var6 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var8 = 0;
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
+var6 = 0;
 } else {
-var8 = var_pexprnode2->type->type_table[cltype] == idtype;
+var6 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6803);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7177);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist5;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype10 = type_nullable__nit__TId.color;
-idtype11 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var9 = 1;
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype8 = type_nullable__nit__AExpr.color;
+idtype9 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var7 = 1;
 } else {
-if(cltype10 >= var_tidnode3->type->table_size) {
-var9 = 0;
+if(cltype8 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var7 = 0;
 } else {
-var9 = var_tidnode3->type->type_table[cltype10] == idtype11;
+var7 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6805);
-show_backtrace(1);
-}
-var12 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var12); /* Direct call array#Array#init on <var12:Array[Object]>*/
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7179);
+fatal_exit(1);
 }
-var_listnode5 = var12;
-var13 = NEW_nit__AListExprs(&type_nit__AListExprs);
-{
-nit__parser_prod___AListExprs___init_alistexprs(var13, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var13:AListExprs>*/
-}
-var_pexprsnode4 = var13;
-var_passignopnode6 = var_nodearraylist6;
-/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
-cltype15 = type_nullable__nit__AAssignOp.color;
-idtype16 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode6 == NULL) {
-var14 = 1;
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype11 = type_nullable__nit__TKwthen.color;
+idtype12 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
+var10 = 1;
 } else {
-if(cltype15 >= var_passignopnode6->type->table_size) {
-var14 = 0;
+if(cltype11 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
+var10 = 0;
 } else {
-var14 = var_passignopnode6->type->type_table[cltype15] == idtype16;
+var10 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var14)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6811);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7181);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist7;
+var_pexprnode7 = var_nodearraylist6;
 /* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype18 = type_nullable__nit__AExpr.color;
-idtype19 = type_nullable__nit__AExpr.id;
+cltype14 = type_nullable__nit__AExpr.color;
+idtype15 = type_nullable__nit__AExpr.id;
 if(var_pexprnode7 == NULL) {
-var17 = 1;
+var13 = 1;
 } else {
-if(cltype18 >= var_pexprnode7->type->table_size) {
-var17 = 0;
+if(cltype14 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
+var13 = 0;
 } else {
-var17 = var_pexprnode7->type->type_table[cltype18] == idtype19;
+var13 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var17)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6813);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7183);
+fatal_exit(1);
 }
-var20 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var16 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var20, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var20:ACallReassignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var16, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, ((val*)NULL), ((val*)NULL), var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var16:AIfExpr>*/
 }
-var_pexprnode1 = var20;
+var_pexprnode1 = var16;
 var_node_list = var_pexprnode1;
-var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction233> */
+var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction264> */
 {
-var22 = nit___nit__Parser___go_to(var_p, var21);
+var18 = nit___nit__Parser___go_to(var_p, var17);
 }
 {
-nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction234#action for (self: ReduceAction234, Parser) */
-void nit__parser___nit__parser__ReduceAction234___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction265#action for (self: ReduceAction265, Parser) */
+void nit__parser___nit__parser__ReduceAction265___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var3 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var4 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var5 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var3 /* : nullable Object */;
 val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var4 /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var9 /* : nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var10 /* : Bool */;
+val* var_tkwifnode2 /* var tkwifnode2: nullable Object */;
+short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var8 /* : Bool */;
+int cltype9;
+int idtype10;
+val* var_tkwthennode4 /* var tkwthennode4: nullable Object */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprnode7 /* var pexprnode7: nullable Object */;
 short int var14 /* : Bool */;
 int cltype15;
 int idtype16;
-val* var_passignopnode5 /* var passignopnode5: nullable Object */;
-short int var17 /* : Bool */;
-int cltype18;
-int idtype19;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var20 /* : Bool */;
-int cltype21;
-int idtype22;
-val* var23 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var24 /* : Int */;
-long var25 /* : Int */;
+val* var17 /* : AIfExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AIfExpr */;
+long var18 /* : Int */;
+long var19 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist9 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist8 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist7 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var4;
+var_nodearraylist3 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var5;
+var_nodearraylist2 = var5;
 {
 var6 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var6;
+var_tkwifnode2 = var_nodearraylist1;
+/* <var_tkwifnode2:nullable Object> isa nullable TKwif */
+cltype = type_nullable__nit__TKwif.color;
+idtype = type_nullable__nit__TKwif.id;
+if(var_tkwifnode2 == NULL) {
+var7 = 1;
+} else {
+if(cltype >= (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->table_size) {
+var7 = 0;
+} else {
+var7 = (((long)var_tkwifnode2&3)?type_info[((long)var_tkwifnode2&3)]:var_tkwifnode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist3 = var7;
-{
-var8 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var8;
-{
-var9 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7209);
+fatal_exit(1);
 }
-var_nodearraylist1 = var9;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var10 = 1;
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype9 = type_nullable__nit__AExpr.color;
+idtype10 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var8 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var10 = 0;
+if(cltype9 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var8 = 0;
 } else {
-var10 = var_pexprnode2->type->type_table[cltype] == idtype;
+var8 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype9] == idtype10;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6840);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7211);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist6;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype12 = type_nullable__nit__TId.color;
-idtype13 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
+var_tkwthennode4 = var_nodearraylist5;
+/* <var_tkwthennode4:nullable Object> isa nullable TKwthen */
+cltype12 = type_nullable__nit__TKwthen.color;
+idtype13 = type_nullable__nit__TKwthen.id;
+if(var_tkwthennode4 == NULL) {
 var11 = 1;
 } else {
-if(cltype12 >= var_tidnode3->type->table_size) {
+if(cltype12 >= (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->table_size) {
 var11 = 0;
 } else {
-var11 = var_tidnode3->type->type_table[cltype12] == idtype13;
+var11 = (((long)var_tkwthennode4&3)?type_info[((long)var_tkwthennode4&3)]:var_tkwthennode4->type)->type_table[cltype12] == idtype13;
 }
 }
 if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6842);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7213);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist7;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype15 = type_nullable__nit__AExprs.color;
-idtype16 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_pexprnode7 = var_nodearraylist7;
+/* <var_pexprnode7:nullable Object> isa nullable AExpr */
+cltype15 = type_nullable__nit__AExpr.color;
+idtype16 = type_nullable__nit__AExpr.id;
+if(var_pexprnode7 == NULL) {
 var14 = 1;
 } else {
-if(cltype15 >= var_pexprsnode4->type->table_size) {
+if(cltype15 >= (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->table_size) {
 var14 = 0;
 } else {
-var14 = var_pexprsnode4->type->type_table[cltype15] == idtype16;
+var14 = (((long)var_pexprnode7&3)?type_info[((long)var_pexprnode7&3)]:var_pexprnode7->type)->type_table[cltype15] == idtype16;
 }
 }
 if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6844);
-show_backtrace(1);
-}
-var_passignopnode5 = var_nodearraylist8;
-/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
-cltype18 = type_nullable__nit__AAssignOp.color;
-idtype19 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode5 == NULL) {
-var17 = 1;
-} else {
-if(cltype18 >= var_passignopnode5->type->table_size) {
-var17 = 0;
-} else {
-var17 = var_passignopnode5->type->type_table[cltype18] == idtype19;
-}
-}
-if (unlikely(!var17)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6846);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7215);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist9;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype21 = type_nullable__nit__AExpr.color;
-idtype22 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
-var20 = 1;
-} else {
-if(cltype21 >= var_pexprnode6->type->table_size) {
-var20 = 0;
-} else {
-var20 = var_pexprnode6->type->type_table[cltype21] == idtype22;
-}
-}
-if (unlikely(!var20)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6848);
-show_backtrace(1);
-}
-var23 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var17 = NEW_nit__AIfExpr(&type_nit__AIfExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var23, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var23:ACallReassignExpr>*/
+nit__parser_prod___AIfExpr___init_aifexpr(var17, var_tkwifnode2, var_pexprnode3, var_tkwthennode4, ((val*)NULL), ((val*)NULL), var_pexprnode7); /* Direct call parser_prod#AIfExpr#init_aifexpr on <var17:AIfExpr>*/
 }
-var_pexprnode1 = var23;
+var_pexprnode1 = var17;
 var_node_list = var_pexprnode1;
-var24 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction234> */
+var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction265> */
 {
-var25 = nit___nit__Parser___go_to(var_p, var24);
+var19 = nit___nit__Parser___go_to(var_p, var18);
 }
 {
-nit___nit__Parser___push(var_p, var25, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction235#action for (self: ReduceAction235, Parser) */
-void nit__parser___nit__parser__ReduceAction235___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction267#action for (self: ReduceAction267, Parser) */
+void nit__parser___nit__parser__ReduceAction267___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
-val* var1 /* : nullable Object */;
-val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
-val* var2 /* : nullable Object */;
-val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
-val* var3 /* : nullable Object */;
-val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
-val* var4 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
-val* var5 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
-val* var6 /* : nullable Object */;
+val* var /* : nullable Object */;
 val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
-val* var7 /* : nullable Object */;
+val* var1 /* : nullable Object */;
 val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
-val* var8 /* : nullable Object */;
+val* var2 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var_pexprnode2 /* var pexprnode2: nullable Object */;
-short int var9 /* : Bool */;
+val* var_tkwloopnode2 /* var tkwloopnode2: nullable Object */;
+short int var3 /* : Bool */;
 int cltype;
 int idtype;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var13 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var14 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_passignopnode6 /* var passignopnode6: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var18 /* : Bool */;
-int cltype19;
-int idtype20;
-val* var21 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var22 /* : Int */;
-long var23 /* : Int */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var4 /* : Bool */;
+int cltype5;
+int idtype6;
+val* var_plabelnode4 /* var plabelnode4: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var10 /* : ALoopExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ALoopExpr */;
+long var11 /* : Int */;
+long var12 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
-{
-var1 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist8 = var1;
-{
-var2 = nit___nit__Parser___pop(var_p);
-}
-var_nodearraylist7 = var2;
+var_node_list = ((val*)NULL);
 {
-var3 = nit___nit__Parser___pop(var_p);
+var = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist6 = var3;
+var_nodearraylist3 = var;
 {
-var4 = nit___nit__Parser___pop(var_p);
+var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var4;
+var_nodearraylist2 = var1;
 {
-var5 = nit___nit__Parser___pop(var_p);
+var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var5;
-{
-var6 = nit___nit__Parser___pop(var_p);
+var_nodearraylist1 = var2;
+var_tkwloopnode2 = var_nodearraylist1;
+/* <var_tkwloopnode2:nullable Object> isa nullable TKwloop */
+cltype = type_nullable__nit__TKwloop.color;
+idtype = type_nullable__nit__TKwloop.id;
+if(var_tkwloopnode2 == NULL) {
+var3 = 1;
+} else {
+if(cltype >= (((long)var_tkwloopnode2&3)?type_info[((long)var_tkwloopnode2&3)]:var_tkwloopnode2->type)->table_size) {
+var3 = 0;
+} else {
+var3 = (((long)var_tkwloopnode2&3)?type_info[((long)var_tkwloopnode2&3)]:var_tkwloopnode2->type)->type_table[cltype] == idtype;
 }
-var_nodearraylist3 = var6;
-{
-var7 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var7;
-{
-var8 = nit___nit__Parser___pop(var_p);
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7237);
+fatal_exit(1);
 }
-var_nodearraylist1 = var8;
-var_pexprnode2 = var_nodearraylist1;
-/* <var_pexprnode2:nullable Object> isa nullable AExpr */
-cltype = type_nullable__nit__AExpr.color;
-idtype = type_nullable__nit__AExpr.id;
-if(var_pexprnode2 == NULL) {
-var9 = 1;
+var_pexprnode3 = var_nodearraylist2;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype5 = type_nullable__nit__AExpr.color;
+idtype6 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var4 = 1;
 } else {
-if(cltype >= var_pexprnode2->type->table_size) {
-var9 = 0;
+if(cltype5 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var4 = 0;
 } else {
-var9 = var_pexprnode2->type->type_table[cltype] == idtype;
+var4 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype5] == idtype6;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var4)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6874);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7239);
+fatal_exit(1);
 }
-var_tidnode3 = var_nodearraylist6;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype11 = type_nullable__nit__TId.color;
-idtype12 = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var10 = 1;
+var_plabelnode4 = var_nodearraylist3;
+/* <var_plabelnode4:nullable Object> isa nullable ALabel */
+cltype8 = type_nullable__nit__ALabel.color;
+idtype9 = type_nullable__nit__ALabel.id;
+if(var_plabelnode4 == NULL) {
+var7 = 1;
 } else {
-if(cltype11 >= var_tidnode3->type->table_size) {
-var10 = 0;
+if(cltype8 >= (((long)var_plabelnode4&3)?type_info[((long)var_plabelnode4&3)]:var_plabelnode4->type)->table_size) {
+var7 = 0;
 } else {
-var10 = var_tidnode3->type->type_table[cltype11] == idtype12;
+var7 = (((long)var_plabelnode4&3)?type_info[((long)var_plabelnode4&3)]:var_plabelnode4->type)->type_table[cltype8] == idtype9;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6876);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7241);
+fatal_exit(1);
+}
+var10 = NEW_nit__ALoopExpr(&type_nit__ALoopExpr);
+{
+nit__parser_prod___ALoopExpr___init_aloopexpr(var10, var_tkwloopnode2, var_pexprnode3, var_plabelnode4); /* Direct call parser_prod#ALoopExpr#init_aloopexpr on <var10:ALoopExpr>*/
 }
-var13 = NEW_standard__Array(&type_standard__Array__standard__Object);
+var_pexprnode1 = var10;
+var_node_list = var_pexprnode1;
+var11 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction267> */
 {
-standard___standard__Array___standard__kernel__Object__init(var13); /* Direct call array#Array#init on <var13:Array[Object]>*/
+var12 = nit___nit__Parser___go_to(var_p, var11);
 }
-var_listnode5 = var13;
-var14 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-nit__parser_prod___AListExprs___init_alistexprs(var14, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var14:AListExprs>*/
+nit___nit__Parser___push(var_p, var12, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
-var_pexprsnode4 = var14;
-var_passignopnode6 = var_nodearraylist7;
-/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
-cltype16 = type_nullable__nit__AAssignOp.color;
-idtype17 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode6 == NULL) {
-var15 = 1;
+RET_LABEL:;
+}
+/* method parser#ReduceAction268#action for (self: ReduceAction268, Parser) */
+void nit__parser___nit__parser__ReduceAction268___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+val* var_p /* var p: Parser */;
+val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var1 /* : nullable Object */;
+val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
+val* var_tkwloopnode2 /* var tkwloopnode2: nullable Object */;
+short int var2 /* : Bool */;
+int cltype;
+int idtype;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var3 /* : Bool */;
+int cltype4;
+int idtype5;
+val* var6 /* : ALoopExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable ALoopExpr */;
+long var7 /* : Int */;
+long var8 /* : Int */;
+var_p = p0;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var;
+{
+var1 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var1;
+var_tkwloopnode2 = var_nodearraylist1;
+/* <var_tkwloopnode2:nullable Object> isa nullable TKwloop */
+cltype = type_nullable__nit__TKwloop.color;
+idtype = type_nullable__nit__TKwloop.id;
+if(var_tkwloopnode2 == NULL) {
+var2 = 1;
 } else {
-if(cltype16 >= var_passignopnode6->type->table_size) {
-var15 = 0;
+if(cltype >= (((long)var_tkwloopnode2&3)?type_info[((long)var_tkwloopnode2&3)]:var_tkwloopnode2->type)->table_size) {
+var2 = 0;
 } else {
-var15 = var_passignopnode6->type->type_table[cltype16] == idtype17;
+var2 = (((long)var_tkwloopnode2&3)?type_info[((long)var_tkwloopnode2&3)]:var_tkwloopnode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var2)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6882);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7259);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist8;
-/* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype19 = type_nullable__nit__AExpr.color;
-idtype20 = type_nullable__nit__AExpr.id;
-if(var_pexprnode7 == NULL) {
-var18 = 1;
+var_pexprnode3 = var_nodearraylist2;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype4 = type_nullable__nit__AExpr.color;
+idtype5 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var3 = 1;
 } else {
-if(cltype19 >= var_pexprnode7->type->table_size) {
-var18 = 0;
+if(cltype4 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var3 = 0;
 } else {
-var18 = var_pexprnode7->type->type_table[cltype19] == idtype20;
+var3 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype4] == idtype5;
 }
 }
-if (unlikely(!var18)) {
+if (unlikely(!var3)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6884);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7261);
+fatal_exit(1);
 }
-var21 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var6 = NEW_nit__ALoopExpr(&type_nit__ALoopExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var21, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var21:ACallReassignExpr>*/
+nit__parser_prod___ALoopExpr___init_aloopexpr(var6, var_tkwloopnode2, var_pexprnode3, ((val*)NULL)); /* Direct call parser_prod#ALoopExpr#init_aloopexpr on <var6:ALoopExpr>*/
 }
-var_pexprnode1 = var21;
+var_pexprnode1 = var6;
 var_node_list = var_pexprnode1;
-var22 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction235> */
+var7 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction268> */
 {
-var23 = nit___nit__Parser___go_to(var_p, var22);
+var8 = nit___nit__Parser___go_to(var_p, var7);
 }
 {
-nit___nit__Parser___push(var_p, var23, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var8, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction238#action for (self: ReduceAction238, Parser) */
-void nit__parser___nit__parser__ReduceAction238___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction269#action for (self: ReduceAction269, Parser) */
+void nit__parser___nit__parser__ReduceAction269___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var6 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_tkwwhilenode2 /* var tkwwhilenode2: nullable Object */;
 short int var7 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
 short int var8 /* : Bool */;
 int cltype9;
 int idtype10;
-val* var_passignopnode5 /* var passignopnode5: nullable Object */;
+val* var_tkwdonode4 /* var tkwdonode4: nullable Object */;
 short int var11 /* : Bool */;
 int cltype12;
 int idtype13;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
 short int var14 /* : Bool */;
 int cltype15;
 int idtype16;
-val* var17 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var18 /* : Int */;
-long var19 /* : Int */;
+val* var_plabelnode6 /* var plabelnode6: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var20 /* : AWhileExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AWhileExpr */;
+long var21 /* : Int */;
+long var22 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist7 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist6 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist5 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist4 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist3 = var4;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
+var5 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist2 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var5;
-var_tidnode3 = var_nodearraylist1;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
+var_nodearraylist1 = var6;
+var_tkwwhilenode2 = var_nodearraylist1;
+/* <var_tkwwhilenode2:nullable Object> isa nullable TKwwhile */
+cltype = type_nullable__nit__TKwwhile.color;
+idtype = type_nullable__nit__TKwwhile.id;
+if(var_tkwwhilenode2 == NULL) {
 var7 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
+if(cltype >= (((long)var_tkwwhilenode2&3)?type_info[((long)var_tkwwhilenode2&3)]:var_tkwwhilenode2->type)->table_size) {
 var7 = 0;
 } else {
-var7 = var_tidnode3->type->type_table[cltype] == idtype;
+var7 = (((long)var_tkwwhilenode2&3)?type_info[((long)var_tkwwhilenode2&3)]:var_tkwwhilenode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var7)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6907);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7284);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist2;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype9 = type_nullable__nit__AExprs.color;
-idtype10 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype9 = type_nullable__nit__AExpr.color;
+idtype10 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
 var8 = 1;
 } else {
-if(cltype9 >= var_pexprsnode4->type->table_size) {
+if(cltype9 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
 var8 = 0;
 } else {
-var8 = var_pexprsnode4->type->type_table[cltype9] == idtype10;
+var8 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype9] == idtype10;
 }
 }
 if (unlikely(!var8)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6909);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7286);
+fatal_exit(1);
 }
-var_passignopnode5 = var_nodearraylist3;
-/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
-cltype12 = type_nullable__nit__AAssignOp.color;
-idtype13 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode5 == NULL) {
+var_tkwdonode4 = var_nodearraylist5;
+/* <var_tkwdonode4:nullable Object> isa nullable TKwdo */
+cltype12 = type_nullable__nit__TKwdo.color;
+idtype13 = type_nullable__nit__TKwdo.id;
+if(var_tkwdonode4 == NULL) {
 var11 = 1;
 } else {
-if(cltype12 >= var_passignopnode5->type->table_size) {
+if(cltype12 >= (((long)var_tkwdonode4&3)?type_info[((long)var_tkwdonode4&3)]:var_tkwdonode4->type)->table_size) {
 var11 = 0;
 } else {
-var11 = var_passignopnode5->type->type_table[cltype12] == idtype13;
+var11 = (((long)var_tkwdonode4&3)?type_info[((long)var_tkwdonode4&3)]:var_tkwdonode4->type)->type_table[cltype12] == idtype13;
 }
 }
 if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6911);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7288);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist4;
-/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+var_pexprnode5 = var_nodearraylist6;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
 cltype15 = type_nullable__nit__AExpr.color;
 idtype16 = type_nullable__nit__AExpr.id;
-if(var_pexprnode6 == NULL) {
+if(var_pexprnode5 == NULL) {
 var14 = 1;
 } else {
-if(cltype15 >= var_pexprnode6->type->table_size) {
+if(cltype15 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
 var14 = 0;
 } else {
-var14 = var_pexprnode6->type->type_table[cltype15] == idtype16;
+var14 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype15] == idtype16;
 }
 }
 if (unlikely(!var14)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6913);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7290);
+fatal_exit(1);
 }
-var17 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var_plabelnode6 = var_nodearraylist7;
+/* <var_plabelnode6:nullable Object> isa nullable ALabel */
+cltype18 = type_nullable__nit__ALabel.color;
+idtype19 = type_nullable__nit__ALabel.id;
+if(var_plabelnode6 == NULL) {
+var17 = 1;
+} else {
+if(cltype18 >= (((long)var_plabelnode6&3)?type_info[((long)var_plabelnode6&3)]:var_plabelnode6->type)->table_size) {
+var17 = 0;
+} else {
+var17 = (((long)var_plabelnode6&3)?type_info[((long)var_plabelnode6&3)]:var_plabelnode6->type)->type_table[cltype18] == idtype19;
+}
+}
+if (unlikely(!var17)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7292);
+fatal_exit(1);
+}
+var20 = NEW_nit__AWhileExpr(&type_nit__AWhileExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var17, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var17:ACallReassignExpr>*/
+nit__parser_prod___AWhileExpr___init_awhileexpr(var20, var_tkwwhilenode2, var_pexprnode3, var_tkwdonode4, var_pexprnode5, var_plabelnode6); /* Direct call parser_prod#AWhileExpr#init_awhileexpr on <var20:AWhileExpr>*/
 }
-var_pexprnode1 = var17;
+var_pexprnode1 = var20;
 var_node_list = var_pexprnode1;
-var18 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction238> */
+var21 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction269> */
 {
-var19 = nit___nit__Parser___go_to(var_p, var18);
+var22 = nit___nit__Parser___go_to(var_p, var21);
 }
 {
-nit___nit__Parser___push(var_p, var19, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var22, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction239#action for (self: ReduceAction239, Parser) */
-void nit__parser___nit__parser__ReduceAction239___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction270#action for (self: ReduceAction270, Parser) */
+void nit__parser___nit__parser__ReduceAction270___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
 val* var3 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var4 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var5 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var4 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
+val* var_tkwwhilenode2 /* var tkwwhilenode2: nullable Object */;
 short int var6 /* : Bool */;
 int cltype;
 int idtype;
-val* var7 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var8 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_passignopnode6 /* var passignopnode6: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var15 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var16 /* : Int */;
+val* var_pexprnode3 /* var pexprnode3: nullable Object */;
+short int var7 /* : Bool */;
+int cltype8;
+int idtype9;
+val* var_tkwdonode4 /* var tkwdonode4: nullable Object */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var_pexprnode5 /* var pexprnode5: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var16 /* : AWhileExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AWhileExpr */;
 long var17 /* : Int */;
+long var18 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist6 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var1;
+var_nodearraylist5 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var2;
+var_nodearraylist4 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var3;
-var4 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist3 = var3;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var4) on <var4:AImplicitSelfExpr> */
-RET_LABEL5:(void)0;
+var4 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist2 = var4;
+{
+var5 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var4;
-var_tidnode3 = var_nodearraylist1;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
+var_nodearraylist1 = var5;
+var_tkwwhilenode2 = var_nodearraylist1;
+/* <var_tkwwhilenode2:nullable Object> isa nullable TKwwhile */
+cltype = type_nullable__nit__TKwwhile.color;
+idtype = type_nullable__nit__TKwwhile.id;
+if(var_tkwwhilenode2 == NULL) {
 var6 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
+if(cltype >= (((long)var_tkwwhilenode2&3)?type_info[((long)var_tkwwhilenode2&3)]:var_tkwwhilenode2->type)->table_size) {
 var6 = 0;
 } else {
-var6 = var_tidnode3->type->type_table[cltype] == idtype;
+var6 = (((long)var_tkwwhilenode2&3)?type_info[((long)var_tkwwhilenode2&3)]:var_tkwwhilenode2->type)->type_table[cltype] == idtype;
 }
 }
 if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6935);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7316);
+fatal_exit(1);
 }
-var7 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var7); /* Direct call array#Array#init on <var7:Array[Object]>*/
+var_pexprnode3 = var_nodearraylist3;
+/* <var_pexprnode3:nullable Object> isa nullable AExpr */
+cltype8 = type_nullable__nit__AExpr.color;
+idtype9 = type_nullable__nit__AExpr.id;
+if(var_pexprnode3 == NULL) {
+var7 = 1;
+} else {
+if(cltype8 >= (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->table_size) {
+var7 = 0;
+} else {
+var7 = (((long)var_pexprnode3&3)?type_info[((long)var_pexprnode3&3)]:var_pexprnode3->type)->type_table[cltype8] == idtype9;
 }
-var_listnode5 = var7;
-var8 = NEW_nit__AListExprs(&type_nit__AListExprs);
-{
-nit__parser_prod___AListExprs___init_alistexprs(var8, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var8:AListExprs>*/
 }
-var_pexprsnode4 = var8;
-var_passignopnode6 = var_nodearraylist2;
-/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
-cltype10 = type_nullable__nit__AAssignOp.color;
-idtype11 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode6 == NULL) {
-var9 = 1;
+if (unlikely(!var7)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7318);
+fatal_exit(1);
+}
+var_tkwdonode4 = var_nodearraylist5;
+/* <var_tkwdonode4:nullable Object> isa nullable TKwdo */
+cltype11 = type_nullable__nit__TKwdo.color;
+idtype12 = type_nullable__nit__TKwdo.id;
+if(var_tkwdonode4 == NULL) {
+var10 = 1;
 } else {
-if(cltype10 >= var_passignopnode6->type->table_size) {
-var9 = 0;
+if(cltype11 >= (((long)var_tkwdonode4&3)?type_info[((long)var_tkwdonode4&3)]:var_tkwdonode4->type)->table_size) {
+var10 = 0;
 } else {
-var9 = var_passignopnode6->type->type_table[cltype10] == idtype11;
+var10 = (((long)var_tkwdonode4&3)?type_info[((long)var_tkwdonode4&3)]:var_tkwdonode4->type)->type_table[cltype11] == idtype12;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var10)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6941);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7320);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist3;
-/* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype13 = type_nullable__nit__AExpr.color;
-idtype14 = type_nullable__nit__AExpr.id;
-if(var_pexprnode7 == NULL) {
-var12 = 1;
+var_pexprnode5 = var_nodearraylist6;
+/* <var_pexprnode5:nullable Object> isa nullable AExpr */
+cltype14 = type_nullable__nit__AExpr.color;
+idtype15 = type_nullable__nit__AExpr.id;
+if(var_pexprnode5 == NULL) {
+var13 = 1;
 } else {
-if(cltype13 >= var_pexprnode7->type->table_size) {
-var12 = 0;
+if(cltype14 >= (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->table_size) {
+var13 = 0;
 } else {
-var12 = var_pexprnode7->type->type_table[cltype13] == idtype14;
+var13 = (((long)var_pexprnode5&3)?type_info[((long)var_pexprnode5&3)]:var_pexprnode5->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6943);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7322);
+fatal_exit(1);
 }
-var15 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var16 = NEW_nit__AWhileExpr(&type_nit__AWhileExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var15, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var15:ACallReassignExpr>*/
+nit__parser_prod___AWhileExpr___init_awhileexpr(var16, var_tkwwhilenode2, var_pexprnode3, var_tkwdonode4, var_pexprnode5, ((val*)NULL)); /* Direct call parser_prod#AWhileExpr#init_awhileexpr on <var16:AWhileExpr>*/
 }
-var_pexprnode1 = var15;
+var_pexprnode1 = var16;
 var_node_list = var_pexprnode1;
-var16 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction239> */
+var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction270> */
 {
-var17 = nit___nit__Parser___go_to(var_p, var16);
+var18 = nit___nit__Parser___go_to(var_p, var17);
 }
 {
-nit___nit__Parser___push(var_p, var17, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction240#action for (self: ReduceAction240, Parser) */
-void nit__parser___nit__parser__ReduceAction240___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction271#action for (self: ReduceAction271, Parser) */
+void nit__parser___nit__parser__ReduceAction271___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist11 /* var nodearraylist11: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var_nodearraylist10 /* var nodearraylist10: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var4 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var5 /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var6 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var7 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var8 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var9 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var10 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var6 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var8 /* : Bool */;
+val* var11 /* : Array[Object] */;
+val* var_listnode4 /* var listnode4: Array[Object] */;
+val* var_tkwfornode2 /* var tkwfornode2: nullable Object */;
+short int var12 /* : Bool */;
 int cltype;
 int idtype;
-val* var_pexprsnode4 /* var pexprsnode4: nullable Object */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-val* var_passignopnode5 /* var passignopnode5: nullable Object */;
-short int var12 /* : Bool */;
-int cltype13;
-int idtype14;
-val* var_pexprnode6 /* var pexprnode6: nullable Object */;
-short int var15 /* : Bool */;
-int cltype16;
-int idtype17;
-val* var18 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var19 /* : Int */;
-long var20 /* : Int */;
+val* var_listnode3 /* var listnode3: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var16 /* : Array[Object] */;
+val* var_tkwinnode5 /* var tkwinnode5: nullable Object */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var20 /* : Bool */;
+int cltype21;
+int idtype22;
+val* var_tkwdonode7 /* var tkwdonode7: nullable Object */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+val* var_pexprnode8 /* var pexprnode8: nullable Object */;
+short int var26 /* : Bool */;
+int cltype27;
+int idtype28;
+val* var_plabelnode9 /* var plabelnode9: nullable Object */;
+short int var29 /* : Bool */;
+int cltype30;
+int idtype31;
+val* var32 /* : AForExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AForExpr */;
+long var33 /* : Int */;
+long var34 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist11 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist5 = var1;
+var_nodearraylist10 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var2;
+var_nodearraylist9 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var3;
+var_nodearraylist8 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var4;
+var_nodearraylist7 = var4;
 {
 var5 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var5;
-var6 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist6 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist5 = var6;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var6) on <var6:AImplicitSelfExpr> */
-RET_LABEL7:(void)0;
+var7 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist4 = var7;
+{
+var8 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var6;
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var8 = 1;
+var_nodearraylist3 = var8;
+{
+var9 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var9;
+{
+var10 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var10;
+var11 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var11); /* Direct call array#Array#init on <var11:Array[Object]>*/
+}
+var_listnode4 = var11;
+var_tkwfornode2 = var_nodearraylist1;
+/* <var_tkwfornode2:nullable Object> isa nullable TKwfor */
+cltype = type_nullable__nit__TKwfor.color;
+idtype = type_nullable__nit__TKwfor.id;
+if(var_tkwfornode2 == NULL) {
+var12 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var8 = 0;
+if(cltype >= (((long)var_tkwfornode2&3)?type_info[((long)var_tkwfornode2&3)]:var_tkwfornode2->type)->table_size) {
+var12 = 0;
 } else {
-var8 = var_tidnode3->type->type_table[cltype] == idtype;
+var12 = (((long)var_tkwfornode2&3)?type_info[((long)var_tkwfornode2&3)]:var_tkwfornode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var8)) {
+if (unlikely(!var12)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6967);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7352);
+fatal_exit(1);
 }
-var_pexprsnode4 = var_nodearraylist3;
-/* <var_pexprsnode4:nullable Object> isa nullable AExprs */
-cltype10 = type_nullable__nit__AExprs.color;
-idtype11 = type_nullable__nit__AExprs.id;
-if(var_pexprsnode4 == NULL) {
-var9 = 1;
+var_listnode3 = var_nodearraylist3;
+/* <var_listnode3:nullable Object> isa Array[Object] */
+cltype14 = type_standard__Array__standard__Object.color;
+idtype15 = type_standard__Array__standard__Object.id;
+if(var_listnode3 == NULL) {
+var13 = 0;
 } else {
-if(cltype10 >= var_pexprsnode4->type->table_size) {
-var9 = 0;
+if(cltype14 >= (((long)var_listnode3&3)?type_info[((long)var_listnode3&3)]:var_listnode3->type)->table_size) {
+var13 = 0;
 } else {
-var9 = var_pexprsnode4->type->type_table[cltype10] == idtype11;
+var13 = (((long)var_listnode3&3)?type_info[((long)var_listnode3&3)]:var_listnode3->type)->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var9)) {
+if (unlikely(!var13)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6969);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7354);
+fatal_exit(1);
 }
-var_passignopnode5 = var_nodearraylist4;
-/* <var_passignopnode5:nullable Object> isa nullable AAssignOp */
-cltype13 = type_nullable__nit__AAssignOp.color;
-idtype14 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode5 == NULL) {
-var12 = 1;
+{
+var16 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode4, var_listnode3);
+}
+var_listnode4 = var16;
+var_tkwinnode5 = var_nodearraylist5;
+/* <var_tkwinnode5:nullable Object> isa nullable TKwin */
+cltype18 = type_nullable__nit__TKwin.color;
+idtype19 = type_nullable__nit__TKwin.id;
+if(var_tkwinnode5 == NULL) {
+var17 = 1;
 } else {
-if(cltype13 >= var_passignopnode5->type->table_size) {
-var12 = 0;
+if(cltype18 >= (((long)var_tkwinnode5&3)?type_info[((long)var_tkwinnode5&3)]:var_tkwinnode5->type)->table_size) {
+var17 = 0;
 } else {
-var12 = var_passignopnode5->type->type_table[cltype13] == idtype14;
+var17 = (((long)var_tkwinnode5&3)?type_info[((long)var_tkwinnode5&3)]:var_tkwinnode5->type)->type_table[cltype18] == idtype19;
 }
 }
-if (unlikely(!var12)) {
+if (unlikely(!var17)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6971);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7357);
+fatal_exit(1);
 }
-var_pexprnode6 = var_nodearraylist5;
+var_pexprnode6 = var_nodearraylist7;
 /* <var_pexprnode6:nullable Object> isa nullable AExpr */
-cltype16 = type_nullable__nit__AExpr.color;
-idtype17 = type_nullable__nit__AExpr.id;
+cltype21 = type_nullable__nit__AExpr.color;
+idtype22 = type_nullable__nit__AExpr.id;
 if(var_pexprnode6 == NULL) {
-var15 = 1;
+var20 = 1;
 } else {
-if(cltype16 >= var_pexprnode6->type->table_size) {
-var15 = 0;
+if(cltype21 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var20 = 0;
 } else {
-var15 = var_pexprnode6->type->type_table[cltype16] == idtype17;
+var20 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype21] == idtype22;
 }
 }
-if (unlikely(!var15)) {
+if (unlikely(!var20)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6973);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7359);
+fatal_exit(1);
 }
-var18 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var_tkwdonode7 = var_nodearraylist9;
+/* <var_tkwdonode7:nullable Object> isa nullable TKwdo */
+cltype24 = type_nullable__nit__TKwdo.color;
+idtype25 = type_nullable__nit__TKwdo.id;
+if(var_tkwdonode7 == NULL) {
+var23 = 1;
+} else {
+if(cltype24 >= (((long)var_tkwdonode7&3)?type_info[((long)var_tkwdonode7&3)]:var_tkwdonode7->type)->table_size) {
+var23 = 0;
+} else {
+var23 = (((long)var_tkwdonode7&3)?type_info[((long)var_tkwdonode7&3)]:var_tkwdonode7->type)->type_table[cltype24] == idtype25;
+}
+}
+if (unlikely(!var23)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7361);
+fatal_exit(1);
+}
+var_pexprnode8 = var_nodearraylist10;
+/* <var_pexprnode8:nullable Object> isa nullable AExpr */
+cltype27 = type_nullable__nit__AExpr.color;
+idtype28 = type_nullable__nit__AExpr.id;
+if(var_pexprnode8 == NULL) {
+var26 = 1;
+} else {
+if(cltype27 >= (((long)var_pexprnode8&3)?type_info[((long)var_pexprnode8&3)]:var_pexprnode8->type)->table_size) {
+var26 = 0;
+} else {
+var26 = (((long)var_pexprnode8&3)?type_info[((long)var_pexprnode8&3)]:var_pexprnode8->type)->type_table[cltype27] == idtype28;
+}
+}
+if (unlikely(!var26)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7363);
+fatal_exit(1);
+}
+var_plabelnode9 = var_nodearraylist11;
+/* <var_plabelnode9:nullable Object> isa nullable ALabel */
+cltype30 = type_nullable__nit__ALabel.color;
+idtype31 = type_nullable__nit__ALabel.id;
+if(var_plabelnode9 == NULL) {
+var29 = 1;
+} else {
+if(cltype30 >= (((long)var_plabelnode9&3)?type_info[((long)var_plabelnode9&3)]:var_plabelnode9->type)->table_size) {
+var29 = 0;
+} else {
+var29 = (((long)var_plabelnode9&3)?type_info[((long)var_plabelnode9&3)]:var_plabelnode9->type)->type_table[cltype30] == idtype31;
+}
+}
+if (unlikely(!var29)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7365);
+fatal_exit(1);
+}
+var32 = NEW_nit__AForExpr(&type_nit__AForExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var18, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode5, var_pexprnode6); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var18:ACallReassignExpr>*/
+nit__parser_prod___AForExpr___init_aforexpr(var32, var_tkwfornode2, var_listnode4, var_tkwinnode5, var_pexprnode6, var_tkwdonode7, var_pexprnode8, var_plabelnode9); /* Direct call parser_prod#AForExpr#init_aforexpr on <var32:AForExpr>*/
 }
-var_pexprnode1 = var18;
+var_pexprnode1 = var32;
 var_node_list = var_pexprnode1;
-var19 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction240> */
+var33 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction271> */
 {
-var20 = nit___nit__Parser___go_to(var_p, var19);
+var34 = nit___nit__Parser___go_to(var_p, var33);
 }
 {
-nit___nit__Parser___push(var_p, var20, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var34, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }
-/* method parser#ReduceAction241#action for (self: ReduceAction241, Parser) */
-void nit__parser___nit__parser__ReduceAction241___nit__parser_work__ReduceAction__action(val* self, val* p0) {
+/* method parser#ReduceAction272#action for (self: ReduceAction272, Parser) */
+void nit__parser___nit__parser__ReduceAction272___nit__parser_work__ReduceAction__action(val* self, val* p0) {
 val* var_p /* var p: Parser */;
-val* var /* : null */;
 val* var_node_list /* var node_list: nullable Object */;
+val* var /* : nullable Object */;
+val* var_nodearraylist10 /* var nodearraylist10: nullable Object */;
 val* var1 /* : nullable Object */;
-val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var_nodearraylist9 /* var nodearraylist9: nullable Object */;
 val* var2 /* : nullable Object */;
-val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var_nodearraylist8 /* var nodearraylist8: nullable Object */;
 val* var3 /* : nullable Object */;
-val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var_nodearraylist7 /* var nodearraylist7: nullable Object */;
 val* var4 /* : nullable Object */;
+val* var_nodearraylist6 /* var nodearraylist6: nullable Object */;
+val* var5 /* : nullable Object */;
+val* var_nodearraylist5 /* var nodearraylist5: nullable Object */;
+val* var6 /* : nullable Object */;
+val* var_nodearraylist4 /* var nodearraylist4: nullable Object */;
+val* var7 /* : nullable Object */;
+val* var_nodearraylist3 /* var nodearraylist3: nullable Object */;
+val* var8 /* : nullable Object */;
+val* var_nodearraylist2 /* var nodearraylist2: nullable Object */;
+val* var9 /* : nullable Object */;
 val* var_nodearraylist1 /* var nodearraylist1: nullable Object */;
-val* var5 /* : AImplicitSelfExpr */;
-val* var_pexprnode2 /* var pexprnode2: nullable AImplicitSelfExpr */;
-val* var_tidnode3 /* var tidnode3: nullable Object */;
-short int var7 /* : Bool */;
+val* var10 /* : Array[Object] */;
+val* var_listnode4 /* var listnode4: Array[Object] */;
+val* var_tkwfornode2 /* var tkwfornode2: nullable Object */;
+short int var11 /* : Bool */;
 int cltype;
 int idtype;
-val* var8 /* : Array[Object] */;
-val* var_listnode5 /* var listnode5: Array[Object] */;
-val* var9 /* : AListExprs */;
-val* var_pexprsnode4 /* var pexprsnode4: nullable AListExprs */;
-val* var_passignopnode6 /* var passignopnode6: nullable Object */;
-short int var10 /* : Bool */;
-int cltype11;
-int idtype12;
-val* var_pexprnode7 /* var pexprnode7: nullable Object */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-val* var16 /* : ACallReassignExpr */;
-val* var_pexprnode1 /* var pexprnode1: nullable ACallReassignExpr */;
-long var17 /* : Int */;
-long var18 /* : Int */;
+val* var_listnode3 /* var listnode3: nullable Object */;
+short int var12 /* : Bool */;
+int cltype13;
+int idtype14;
+val* var15 /* : Array[Object] */;
+val* var_tkwinnode5 /* var tkwinnode5: nullable Object */;
+short int var16 /* : Bool */;
+int cltype17;
+int idtype18;
+val* var_pexprnode6 /* var pexprnode6: nullable Object */;
+short int var19 /* : Bool */;
+int cltype20;
+int idtype21;
+val* var_tkwdonode7 /* var tkwdonode7: nullable Object */;
+short int var22 /* : Bool */;
+int cltype23;
+int idtype24;
+val* var_pexprnode8 /* var pexprnode8: nullable Object */;
+short int var25 /* : Bool */;
+int cltype26;
+int idtype27;
+val* var28 /* : AForExpr */;
+val* var_pexprnode1 /* var pexprnode1: nullable AForExpr */;
+long var29 /* : Int */;
+long var30 /* : Int */;
 var_p = p0;
-var = NULL;
-var_node_list = var;
+var_node_list = ((val*)NULL);
+{
+var = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist10 = var;
 {
 var1 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist4 = var1;
+var_nodearraylist9 = var1;
 {
 var2 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist3 = var2;
+var_nodearraylist8 = var2;
 {
 var3 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist2 = var3;
+var_nodearraylist7 = var3;
 {
 var4 = nit___nit__Parser___pop(var_p);
 }
-var_nodearraylist1 = var4;
-var5 = NEW_nit__AImplicitSelfExpr(&type_nit__AImplicitSelfExpr);
+var_nodearraylist6 = var4;
 {
-{ /* Inline parser_prod#AImplicitSelfExpr#init_aimplicitselfexpr (var5) on <var5:AImplicitSelfExpr> */
-RET_LABEL6:(void)0;
+var5 = nit___nit__Parser___pop(var_p);
 }
+var_nodearraylist5 = var5;
+{
+var6 = nit___nit__Parser___pop(var_p);
 }
-var_pexprnode2 = var5;
-var_tidnode3 = var_nodearraylist2;
-/* <var_tidnode3:nullable Object> isa nullable TId */
-cltype = type_nullable__nit__TId.color;
-idtype = type_nullable__nit__TId.id;
-if(var_tidnode3 == NULL) {
-var7 = 1;
+var_nodearraylist4 = var6;
+{
+var7 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist3 = var7;
+{
+var8 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist2 = var8;
+{
+var9 = nit___nit__Parser___pop(var_p);
+}
+var_nodearraylist1 = var9;
+var10 = NEW_standard__Array(&type_standard__Array__standard__Object);
+{
+standard___standard__Array___standard__kernel__Object__init(var10); /* Direct call array#Array#init on <var10:Array[Object]>*/
+}
+var_listnode4 = var10;
+var_tkwfornode2 = var_nodearraylist1;
+/* <var_tkwfornode2:nullable Object> isa nullable TKwfor */
+cltype = type_nullable__nit__TKwfor.color;
+idtype = type_nullable__nit__TKwfor.id;
+if(var_tkwfornode2 == NULL) {
+var11 = 1;
 } else {
-if(cltype >= var_tidnode3->type->table_size) {
-var7 = 0;
+if(cltype >= (((long)var_tkwfornode2&3)?type_info[((long)var_tkwfornode2&3)]:var_tkwfornode2->type)->table_size) {
+var11 = 0;
 } else {
-var7 = var_tidnode3->type->type_table[cltype] == idtype;
+var11 = (((long)var_tkwfornode2&3)?type_info[((long)var_tkwfornode2&3)]:var_tkwfornode2->type)->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var11)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 6996);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7396);
+fatal_exit(1);
 }
-var8 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{
-standard___standard__Array___standard__kernel__Object__init(var8); /* Direct call array#Array#init on <var8:Array[Object]>*/
+var_listnode3 = var_nodearraylist3;
+/* <var_listnode3:nullable Object> isa Array[Object] */
+cltype13 = type_standard__Array__standard__Object.color;
+idtype14 = type_standard__Array__standard__Object.id;
+if(var_listnode3 == NULL) {
+var12 = 0;
+} else {
+if(cltype13 >= (((long)var_listnode3&3)?type_info[((long)var_listnode3&3)]:var_listnode3->type)->table_size) {
+var12 = 0;
+} else {
+var12 = (((long)var_listnode3&3)?type_info[((long)var_listnode3&3)]:var_listnode3->type)->type_table[cltype13] == idtype14;
+}
+}
+if (unlikely(!var12)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7398);
+fatal_exit(1);
 }
-var_listnode5 = var8;
-var9 = NEW_nit__AListExprs(&type_nit__AListExprs);
 {
-nit__parser_prod___AListExprs___init_alistexprs(var9, var_listnode5); /* Direct call parser_prod#AListExprs#init_alistexprs on <var9:AListExprs>*/
+var15 = nit__parser_work___nit__parser_work__ReduceAction___concat(self, var_listnode4, var_listnode3);
 }
-var_pexprsnode4 = var9;
-var_passignopnode6 = var_nodearraylist3;
-/* <var_passignopnode6:nullable Object> isa nullable AAssignOp */
-cltype11 = type_nullable__nit__AAssignOp.color;
-idtype12 = type_nullable__nit__AAssignOp.id;
-if(var_passignopnode6 == NULL) {
-var10 = 1;
+var_listnode4 = var15;
+var_tkwinnode5 = var_nodearraylist5;
+/* <var_tkwinnode5:nullable Object> isa nullable TKwin */
+cltype17 = type_nullable__nit__TKwin.color;
+idtype18 = type_nullable__nit__TKwin.id;
+if(var_tkwinnode5 == NULL) {
+var16 = 1;
 } else {
-if(cltype11 >= var_passignopnode6->type->table_size) {
-var10 = 0;
+if(cltype17 >= (((long)var_tkwinnode5&3)?type_info[((long)var_tkwinnode5&3)]:var_tkwinnode5->type)->table_size) {
+var16 = 0;
 } else {
-var10 = var_passignopnode6->type->type_table[cltype11] == idtype12;
+var16 = (((long)var_tkwinnode5&3)?type_info[((long)var_tkwinnode5&3)]:var_tkwinnode5->type)->type_table[cltype17] == idtype18;
 }
 }
-if (unlikely(!var10)) {
+if (unlikely(!var16)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7002);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7401);
+fatal_exit(1);
 }
-var_pexprnode7 = var_nodearraylist4;
-/* <var_pexprnode7:nullable Object> isa nullable AExpr */
-cltype14 = type_nullable__nit__AExpr.color;
-idtype15 = type_nullable__nit__AExpr.id;
-if(var_pexprnode7 == NULL) {
-var13 = 1;
+var_pexprnode6 = var_nodearraylist7;
+/* <var_pexprnode6:nullable Object> isa nullable AExpr */
+cltype20 = type_nullable__nit__AExpr.color;
+idtype21 = type_nullable__nit__AExpr.id;
+if(var_pexprnode6 == NULL) {
+var19 = 1;
 } else {
-if(cltype14 >= var_pexprnode7->type->table_size) {
-var13 = 0;
+if(cltype20 >= (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->table_size) {
+var19 = 0;
 } else {
-var13 = var_pexprnode7->type->type_table[cltype14] == idtype15;
+var19 = (((long)var_pexprnode6&3)?type_info[((long)var_pexprnode6&3)]:var_pexprnode6->type)->type_table[cltype20] == idtype21;
 }
 }
-if (unlikely(!var13)) {
+if (unlikely(!var19)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7004);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7403);
+fatal_exit(1);
 }
-var16 = NEW_nit__ACallReassignExpr(&type_nit__ACallReassignExpr);
+var_tkwdonode7 = var_nodearraylist9;
+/* <var_tkwdonode7:nullable Object> isa nullable TKwdo */
+cltype23 = type_nullable__nit__TKwdo.color;
+idtype24 = type_nullable__nit__TKwdo.id;
+if(var_tkwdonode7 == NULL) {
+var22 = 1;
+} else {
+if(cltype23 >= (((long)var_tkwdonode7&3)?type_info[((long)var_tkwdonode7&3)]:var_tkwdonode7->type)->table_size) {
+var22 = 0;
+} else {
+var22 = (((long)var_tkwdonode7&3)?type_info[((long)var_tkwdonode7&3)]:var_tkwdonode7->type)->type_table[cltype23] == idtype24;
+}
+}
+if (unlikely(!var22)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7405);
+fatal_exit(1);
+}
+var_pexprnode8 = var_nodearraylist10;
+/* <var_pexprnode8:nullable Object> isa nullable AExpr */
+cltype26 = type_nullable__nit__AExpr.color;
+idtype27 = type_nullable__nit__AExpr.id;
+if(var_pexprnode8 == NULL) {
+var25 = 1;
+} else {
+if(cltype26 >= (((long)var_pexprnode8&3)?type_info[((long)var_pexprnode8&3)]:var_pexprnode8->type)->table_size) {
+var25 = 0;
+} else {
+var25 = (((long)var_pexprnode8&3)?type_info[((long)var_pexprnode8&3)]:var_pexprnode8->type)->type_table[cltype26] == idtype27;
+}
+}
+if (unlikely(!var25)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser, 7407);
+fatal_exit(1);
+}
+var28 = NEW_nit__AForExpr(&type_nit__AForExpr);
 {
-nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(var16, var_pexprnode2, var_tidnode3, var_pexprsnode4, var_passignopnode6, var_pexprnode7); /* Direct call parser_prod#ACallReassignExpr#init_acallreassignexpr on <var16:ACallReassignExpr>*/
+nit__parser_prod___AForExpr___init_aforexpr(var28, var_tkwfornode2, var_listnode4, var_tkwinnode5, var_pexprnode6, var_tkwdonode7, var_pexprnode8, ((val*)NULL)); /* Direct call parser_prod#AForExpr#init_aforexpr on <var28:AForExpr>*/
 }
-var_pexprnode1 = var16;
+var_pexprnode1 = var28;
 var_node_list = var_pexprnode1;
-var17 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction241> */
+var29 = self->attrs[COLOR_nit__parser_work__ReduceAction___goto].l; /* _goto on <self:ReduceAction272> */
 {
-var18 = nit___nit__Parser___go_to(var_p, var17);
+var30 = nit___nit__Parser___go_to(var_p, var29);
 }
 {
-nit___nit__Parser___push(var_p, var18, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
+nit___nit__Parser___push(var_p, var30, var_node_list); /* Direct call parser_work#Parser#push on <var_p:Parser>*/
 }
 RET_LABEL:;
 }