regern c_src
[nit.git] / c_src / nit__parser_prod.sep.3.c
index 9077932..c85fb3c 100644 (file)
@@ -1,9 +1,22 @@
 #include "nit__parser_prod.sep.0.h"
-/* method parser_prod#AOrElseExpr#n_expr2= for (self: AOrElseExpr, AExpr) */
-void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AIfexprExpr#n_kwif= for (self: AIfexprExpr, TKwif) */
+void nit__parser_prod___AIfexprExpr___n_kwif_61d(val* self, val* p0) {
+val* var_node /* var node: TKwif */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_kwif].val = var_node; /* _n_kwif on <self:AIfexprExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwif> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwif> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AIfexprExpr#n_expr= for (self: AIfexprExpr, AExpr) */
+void nit__parser_prod___AIfexprExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AOrElseExpr> */
+self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_expr].val = var_node; /* _n_expr on <self:AIfexprExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -12,87 +25,276 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AOrElseExpr#visit_all for (self: AOrElseExpr, Visitor) */
-void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AIfexprExpr#n_kwthen= for (self: AIfexprExpr, TKwthen) */
+void nit__parser_prod___AIfexprExpr___n_kwthen_61d(val* self, val* p0) {
+val* var_node /* var node: TKwthen */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_kwthen].val = var_node; /* _n_kwthen on <self:AIfexprExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwthen> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwthen> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AIfexprExpr#n_then= for (self: AIfexprExpr, AExpr) */
+void nit__parser_prod___AIfexprExpr___n_then_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_then].val = var_node; /* _n_then on <self:AIfexprExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AIfexprExpr#n_kwelse= for (self: AIfexprExpr, TKwelse) */
+void nit__parser_prod___AIfexprExpr___n_kwelse_61d(val* self, val* p0) {
+val* var_node /* var node: TKwelse */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_kwelse].val = var_node; /* _n_kwelse on <self:AIfexprExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwelse> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwelse> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AIfexprExpr#n_else= for (self: AIfexprExpr, AExpr) */
+void nit__parser_prod___AIfexprExpr___n_else_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_else].val = var_node; /* _n_else on <self:AIfexprExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AIfexprExpr#visit_all for (self: AIfexprExpr, Visitor) */
+void nit__parser_prod___AIfexprExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
+val* var /* : TKwif */;
 val* var1 /* : AExpr */;
+val* var2 /* : TKwthen */;
+val* var3 /* : AExpr */;
+val* var4 /* : TKwelse */;
+val* var5 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_kwif].val; /* _n_kwif on <self:AIfexprExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3144);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwif");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3004);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrElseExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_expr].val; /* _n_expr on <self:AIfexprExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3145);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3005);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_kwthen].val; /* _n_kwthen on <self:AIfexprExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwthen");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3006);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var3 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_then].val; /* _n_then on <self:AIfexprExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_then");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3007);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var4 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_kwelse].val; /* _n_kwelse on <self:AIfexprExpr> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwelse");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3008);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var5 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_else].val; /* _n_else on <self:AIfexprExpr> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_else");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3009);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var5); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#AImpliesExpr#init_aimpliesexpr for (self: AImpliesExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AImpliesExpr___init_aimpliesexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AWhileExpr#init_awhileexpr for (self: AWhileExpr, nullable TKwwhile, nullable AExpr, nullable TKwdo, nullable AExpr, nullable ALabel) */
+void nit__parser_prod___AWhileExpr___init_awhileexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
+val* var_n_kwwhile /* var n_kwwhile: nullable TKwwhile */;
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
+val* var_n_kwdo /* var n_kwdo: nullable TKwdo */;
+val* var_n_block /* var n_block: nullable AExpr */;
+val* var_n_label /* var n_label: nullable ALabel */;
+short int var /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+short int var11 /* : Bool */;
+short int var13 /* : Bool */;
+short int var14 /* : Bool */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AWhileExpr> */
+RET_LABEL1:(void)0;
+}
+}
+var_n_kwwhile = p0;
+var_n_expr = p1;
+var_n_kwdo = p2;
+var_n_block = p3;
+var_n_label = p4;
+if (unlikely(var_n_kwwhile == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3021);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwwhile].val = var_n_kwwhile; /* _n_kwwhile on <self:AWhileExpr> */
+if (var_n_kwwhile == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3022);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwwhile,self) on <var_n_kwwhile:nullable TKwwhile> */
+if (unlikely(var_n_kwwhile == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_kwwhile->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwwhile:nullable TKwwhile> */
+RET_LABEL2:(void)0;
+}
+}
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3154);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3023);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AImpliesExpr> */
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AWhileExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3155);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3024);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
+if (unlikely(var_n_kwdo == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3156);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3025);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AImpliesExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwdo].val = var_n_kwdo; /* _n_kwdo on <self:AWhileExpr> */
+if (var_n_kwdo == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3157);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3026);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwdo,self) on <var_n_kwdo:nullable TKwdo> */
+if (unlikely(var_n_kwdo == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+var_n_kwdo->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwdo:nullable TKwdo> */
+RET_LABEL4:(void)0;
+}
+}
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_block].val = var_n_block; /* _n_block on <self:AWhileExpr> */
+if (var_n_block == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_block,((val*)NULL)) on <var_n_block:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var7 = ((short int(*)(val* self, val* p0))(var_n_block->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_block, var_other); /* == on <var_n_block:nullable AExpr(AExpr)>*/
+}
+var8 = !var7;
+var5 = var8;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var = var5;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_block,self) on <var_n_block:nullable AExpr(AExpr)> */
+var_n_block->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_block:nullable AExpr(AExpr)> */
+RET_LABEL9:(void)0;
+}
+}
+} else {
+}
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_n_label; /* _n_label on <self:AWhileExpr> */
+if (var_n_label == NULL) {
+var10 = 0; /* is null */
+} else {
+var10 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_label,((val*)NULL)) on <var_n_label:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var13 = ((short int(*)(val* self, val* p0))(var_n_label->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_label, var_other); /* == on <var_n_label:nullable ALabel(ALabel)>*/
+}
+var14 = !var13;
+var11 = var14;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
 }
+var10 = var11;
+}
+if (var10){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_label,self) on <var_n_label:nullable ALabel(ALabel)> */
+var_n_label->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_label:nullable ALabel(ALabel)> */
+RET_LABEL15:(void)0;
+}
+}
+} else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AImpliesExpr#replace_child for (self: AImpliesExpr, ANode, nullable ANode) */
-void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AWhileExpr#replace_child for (self: AWhileExpr, ANode, nullable ANode) */
+void nit__parser_prod___AWhileExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwwhile */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -109,19 +311,45 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : TKwdo */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
+val* var27 /* : nullable AExpr */;
+short int var28 /* : Bool */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+int cltype35;
+int idtype36;
+const char* var_class_name37;
+val* var38 /* : nullable ALabel */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
+short int var42 /* : Bool */;
+short int var44 /* : Bool */;
+short int var45 /* : Bool */;
+int cltype46;
+int idtype47;
+const char* var_class_name48;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwwhile].val; /* _n_kwwhile on <self:AWhileExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3162);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwwhile");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3035);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwwhile> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwwhile> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -134,9 +362,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwwhile */
+cltype = type_nit__TKwwhile.color;
+idtype = type_nit__TKwwhile.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -148,21 +376,21 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3163);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwwhile", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3036);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AImpliesExpr#n_expr= on <self:AImpliesExpr>*/
+nit__parser_prod___AWhileExpr___n_kwwhile_61d(self, var_new_child); /* Direct call parser_prod#AWhileExpr#n_kwwhile= on <self:AWhileExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_expr].val; /* _n_expr on <self:AWhileExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3166);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3039);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
@@ -196,919 +424,172 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3167);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3040);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AImpliesExpr#n_expr2= on <self:AImpliesExpr>*/
+nit__parser_prod___AWhileExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AWhileExpr#n_expr= on <self:AWhileExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-RET_LABEL:;
+var17 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwdo].val; /* _n_kwdo on <self:AWhileExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwdo");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3043);
+fatal_exit(1);
 }
-/* method parser_prod#AImpliesExpr#n_expr= for (self: AImpliesExpr, AExpr) */
-void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_node; /* _n_expr on <self:AImpliesExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:TKwdo> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:TKwdo> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
 }
-RET_LABEL:;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
-/* method parser_prod#AImpliesExpr#n_expr2= for (self: AImpliesExpr, AExpr) */
-void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AImpliesExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
 }
+if (var18){
+/* <var_new_child:nullable ANode> isa TKwdo */
+cltype24 = type_nit__TKwdo.color;
+idtype25 = type_nit__TKwdo.id;
+if(var_new_child == NULL) {
+var23 = 0;
+} else {
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
-RET_LABEL:;
 }
-/* method parser_prod#AImpliesExpr#visit_all for (self: AImpliesExpr, Visitor) */
-void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3186);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwdo", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3044);
+fatal_exit(1);
 }
 {
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+nit__parser_prod___AWhileExpr___n_kwdo_61d(self, var_new_child); /* Direct call parser_prod#AWhileExpr#n_kwdo= on <self:AWhileExpr>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3187);
-show_backtrace(1);
+goto RET_LABEL;
+} else {
 }
+var27 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_block].val; /* _n_block on <self:AWhileExpr> */
+if (var27 == NULL) {
+var28 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:nullable AExpr> */
+var_other = var_old_child;
 {
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:nullable AExpr(AExpr)> */
+var33 = var27 == var_other;
+var31 = var33;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#ANotExpr#init_anotexpr for (self: ANotExpr, nullable TKwnot, nullable AExpr) */
-void nit__parser_prod___ANotExpr___init_anotexpr(val* self, val* p0, val* p1) {
-val* var_n_kwnot /* var n_kwnot: nullable TKwnot */;
-val* var_n_expr /* var n_expr: nullable AExpr */;
-var_n_kwnot = p0;
-var_n_expr = p1;
-if (unlikely(var_n_kwnot == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3196);
-show_backtrace(1);
+var29 = var31;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
 }
-self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val = var_n_kwnot; /* _n_kwnot on <self:ANotExpr> */
-if (var_n_kwnot == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3197);
-show_backtrace(1);
+var28 = var29;
+}
+if (var28){
+/* <var_new_child:nullable ANode> isa nullable AExpr */
+cltype35 = type_nullable__nit__AExpr.color;
+idtype36 = type_nullable__nit__AExpr.id;
+if(var_new_child == NULL) {
+var34 = 1;
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_kwnot,self) on <var_n_kwnot:nullable TKwnot> */
-if (unlikely(var_n_kwnot == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+if(cltype35 >= var_new_child->type->table_size) {
+var34 = 0;
+} else {
+var34 = var_new_child->type->type_table[cltype35] == idtype36;
 }
-var_n_kwnot->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwnot:nullable TKwnot> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3198);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ANotExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3199);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL2:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANotExpr#replace_child for (self: ANotExpr, ANode, nullable ANode) */
-void nit__parser_prod___ANotExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : TKwnot */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val; /* _n_kwnot on <self:ANotExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwnot");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3204);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwnot> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwnot> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-}
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
-}
-}
-if (var1){
-/* <var_new_child:nullable ANode> isa TKwnot */
-cltype = type_nit__TKwnot.color;
-idtype = type_nit__TKwnot.id;
-if(var_new_child == NULL) {
-var6 = 0;
-} else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwnot", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3205);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ANotExpr___n_kwnot_61d(self, var_new_child); /* Direct call parser_prod#ANotExpr#n_kwnot= on <self:ANotExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var7 = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3208);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-}
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-}
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var13 = 0;
-} else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
-}
-}
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3209);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ANotExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#ANotExpr#n_expr= on <self:ANotExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANotExpr#n_kwnot= for (self: ANotExpr, TKwnot) */
-void nit__parser_prod___ANotExpr___n_kwnot_61d(val* self, val* p0) {
-val* var_node /* var node: TKwnot */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val = var_node; /* _n_kwnot on <self:ANotExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwnot> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwnot> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANotExpr#n_expr= for (self: ANotExpr, AExpr) */
-void nit__parser_prod___ANotExpr___n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val = var_node; /* _n_expr on <self:ANotExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANotExpr#visit_all for (self: ANotExpr, Visitor) */
-void nit__parser_prod___ANotExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : TKwnot */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val; /* _n_kwnot on <self:ANotExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwnot");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3228);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-var1 = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3229);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-RET_LABEL:;
-}
-/* method parser_prod#AEqExpr#init_aeqexpr for (self: AEqExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AEqExpr___init_aeqexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3238);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AEqExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3239);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3240);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AEqExpr> */
-if (var_n_expr2 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3241);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AEqExpr#replace_child for (self: AEqExpr, ANode, nullable ANode) */
-void nit__parser_prod___AEqExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AEqExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3246);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-}
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
-}
-}
-if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var6 = 0;
-} else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3247);
-show_backtrace(1);
-}
-{
-nit__parser_prod___AEqExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AEqExpr#n_expr= on <self:AEqExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AEqExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3250);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-}
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-}
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var13 = 0;
-} else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
-}
-}
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3251);
-show_backtrace(1);
-}
-{
-nit__parser_prod___AEqExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AEqExpr#n_expr2= on <self:AEqExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-RET_LABEL:;
-}
-/* method parser_prod#AEqExpr#n_expr= for (self: AEqExpr, AExpr) */
-void nit__parser_prod___AEqExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AEqExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AEqExpr#n_expr2= for (self: AEqExpr, AExpr) */
-void nit__parser_prod___AEqExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AEqExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AEqExpr#visit_all for (self: AEqExpr, Visitor) */
-void nit__parser_prod___AEqExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AEqExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3270);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AEqExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3271);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANeExpr#init_aneexpr for (self: ANeExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___ANeExpr___init_aneexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3280);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ANeExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3281);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3282);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ANeExpr> */
-if (var_n_expr2 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3283);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANeExpr#replace_child for (self: ANeExpr, ANode, nullable ANode) */
-void nit__parser_prod___ANeExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ANeExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3288);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-}
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
-}
-}
-if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var6 = 0;
-} else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3289);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ANeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ANeExpr#n_expr= on <self:ANeExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ANeExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3292);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-}
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-}
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var13 = 0;
-} else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
-}
-}
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3293);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ANeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ANeExpr#n_expr2= on <self:ANeExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANeExpr#n_expr= for (self: ANeExpr, AExpr) */
-void nit__parser_prod___ANeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ANeExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANeExpr#n_expr2= for (self: ANeExpr, AExpr) */
-void nit__parser_prod___ANeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ANeExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANeExpr#visit_all for (self: ANeExpr, Visitor) */
-void nit__parser_prod___ANeExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ANeExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3312);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ANeExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3313);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-RET_LABEL:;
-}
-/* method parser_prod#ALtExpr#init_altexpr for (self: ALtExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___ALtExpr___init_altexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3322);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ALtExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3323);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3324);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ALtExpr> */
-if (var_n_expr2 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3325);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ALtExpr#replace_child for (self: ALtExpr, ANode, nullable ANode) */
-void nit__parser_prod___ALtExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALtExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3330);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-}
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
-}
-}
-if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var6 = 0;
-} else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
 }
-}
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3331);
-show_backtrace(1);
+if (unlikely(!var34)) {
+var_class_name37 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable AExpr", var_class_name37);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3048);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ALtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ALtExpr#n_expr= on <self:ALtExpr>*/
+nit__parser_prod___AWhileExpr___n_block_61d(self, var_new_child); /* Direct call parser_prod#AWhileExpr#n_block= on <self:AWhileExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALtExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3334);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+var38 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:AWhileExpr> */
+if (var38 == NULL) {
+var39 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var38,var_old_child) on <var38:nullable ALabel> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var38,var_other) on <var38:nullable ALabel(ALabel)> */
+var44 = var38 == var_other;
+var42 = var44;
+goto RET_LABEL43;
+RET_LABEL43:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var40 = var42;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
 }
+var39 = var40;
 }
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+if (var39){
+/* <var_new_child:nullable ANode> isa nullable ALabel */
+cltype46 = type_nullable__nit__ALabel.color;
+idtype47 = type_nullable__nit__ALabel.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var45 = 1;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype46 >= var_new_child->type->table_size) {
+var45 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var45 = var_new_child->type->type_table[cltype46] == idtype47;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3335);
-show_backtrace(1);
+if (unlikely(!var45)) {
+var_class_name48 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable ALabel", var_class_name48);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3052);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ALtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ALtExpr#n_expr2= on <self:ALtExpr>*/
+nit__parser_prod___AWhileExpr___nit__parser_nodes__ALabelable__n_label_61d(self, var_new_child); /* Direct call parser_prod#AWhileExpr#n_label= on <self:AWhileExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ALtExpr#n_expr= for (self: ALtExpr, AExpr) */
-void nit__parser_prod___ALtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AWhileExpr#n_kwwhile= for (self: AWhileExpr, TKwwhile) */
+void nit__parser_prod___AWhileExpr___n_kwwhile_61d(val* self, val* p0) {
+val* var_node /* var node: TKwwhile */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ALtExpr> */
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwwhile].val = var_node; /* _n_kwwhile on <self:AWhileExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwwhile> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwwhile> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ALtExpr#n_expr2= for (self: ALtExpr, AExpr) */
-void nit__parser_prod___ALtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AWhileExpr#n_expr= for (self: AWhileExpr, AExpr) */
+void nit__parser_prod___AWhileExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ALtExpr> */
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_expr].val = var_node; /* _n_expr on <self:AWhileExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -1117,308 +598,249 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ALtExpr#visit_all for (self: ALtExpr, Visitor) */
-void nit__parser_prod___ALtExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALtExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3354);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALtExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3355);
-show_backtrace(1);
-}
+/* method parser_prod#AWhileExpr#n_kwdo= for (self: AWhileExpr, TKwdo) */
+void nit__parser_prod___AWhileExpr___n_kwdo_61d(val* self, val* p0) {
+val* var_node /* var node: TKwdo */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwdo].val = var_node; /* _n_kwdo on <self:AWhileExpr> */
 {
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-RET_LABEL:;
-}
-/* method parser_prod#ALeExpr#init_aleexpr for (self: ALeExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___ALeExpr___init_aleexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3364);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ALeExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3365);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwdo> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwdo> */
 RET_LABEL1:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3366);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ALeExpr> */
-if (var_n_expr2 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3367);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
-}
-}
 RET_LABEL:;
 }
-/* method parser_prod#ALeExpr#replace_child for (self: ALeExpr, ANode, nullable ANode) */
-void nit__parser_prod___ALeExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+/* method parser_prod#AWhileExpr#n_block= for (self: AWhileExpr, nullable AExpr) */
+void nit__parser_prod___AWhileExpr___n_block_61d(val* self, val* p0) {
+val* var_node /* var node: nullable AExpr */;
+short int var /* : Bool */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALeExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3372);
-show_backtrace(1);
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_block].val = var_node; /* _n_block on <self:AWhileExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable AExpr> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable AExpr(AExpr)>*/
 }
-}
-var1 = var3;
+var4 = !var3;
+var1 = var4;
 goto RET_LABEL2;
 RET_LABEL2:(void)0;
 }
+var = var1;
 }
-if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var6 = 0;
-} else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3373);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ALeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ALeExpr#n_expr= on <self:ALeExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALeExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3376);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
-var_other = var_old_child;
+if (var){
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-}
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-}
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var13 = 0;
-} else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
-}
-}
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3377);
-show_backtrace(1);
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable AExpr(AExpr)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable AExpr(AExpr)> */
+RET_LABEL5:(void)0;
 }
-{
-nit__parser_prod___ALeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ALeExpr#n_expr2= on <self:ALeExpr>*/
 }
-goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ALeExpr#n_expr= for (self: ALeExpr, AExpr) */
-void nit__parser_prod___ALeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AWhileExpr#n_label= for (self: AWhileExpr, nullable ALabel) */
+void nit__parser_prod___AWhileExpr___nit__parser_nodes__ALabelable__n_label_61d(val* self, val* p0) {
+val* var_node /* var node: nullable ALabel */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ALeExpr> */
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_node; /* _n_label on <self:AWhileExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable ALabel> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable ALabel(ALabel)>*/
 }
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
 }
-RET_LABEL:;
+var = var1;
 }
-/* method parser_prod#ALeExpr#n_expr2= for (self: ALeExpr, AExpr) */
-void nit__parser_prod___ALeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ALeExpr> */
+if (var){
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable ALabel(ALabel)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable ALabel(ALabel)> */
+RET_LABEL5:(void)0;
 }
 }
+} else {
+}
 RET_LABEL:;
 }
-/* method parser_prod#ALeExpr#visit_all for (self: ALeExpr, Visitor) */
-void nit__parser_prod___ALeExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AWhileExpr#visit_all for (self: AWhileExpr, Visitor) */
+void nit__parser_prod___AWhileExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
+val* var /* : TKwwhile */;
 val* var1 /* : AExpr */;
+val* var2 /* : TKwdo */;
+val* var3 /* : nullable AExpr */;
+val* var4 /* : nullable ALabel */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALeExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwwhile].val; /* _n_kwwhile on <self:AWhileExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3396);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwwhile");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3086);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALeExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_expr].val; /* _n_expr on <self:AWhileExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3397);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3087);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-RET_LABEL:;
+var2 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_kwdo].val; /* _n_kwdo on <self:AWhileExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwdo");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3088);
+fatal_exit(1);
 }
-/* method parser_prod#ALlExpr#init_allexpr for (self: ALlExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___ALlExpr___init_allexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3406);
-show_backtrace(1);
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ALlExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3407);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+var3 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_block].val; /* _n_block on <self:AWhileExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+var4 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:AWhileExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+RET_LABEL:;
+}
+/* method parser_prod#ALoopExpr#init_aloopexpr for (self: ALoopExpr, nullable TKwloop, nullable AExpr, nullable ALabel) */
+void nit__parser_prod___ALoopExpr___init_aloopexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_kwloop /* var n_kwloop: nullable TKwloop */;
+val* var_n_block /* var n_block: nullable AExpr */;
+val* var_n_label /* var n_label: nullable ALabel */;
+short int var /* : Bool */;
+short int var3 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+short int var8 /* : Bool */;
+short int var9 /* : Bool */;
+short int var11 /* : Bool */;
+short int var12 /* : Bool */;
+{
+{ /* Inline kernel#Object#init (self) on <self:ALoopExpr> */
 RET_LABEL1:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
+var_n_kwloop = p0;
+var_n_block = p1;
+var_n_label = p2;
+if (unlikely(var_n_kwloop == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3408);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3100);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ALlExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_kwloop].val = var_n_kwloop; /* _n_kwloop on <self:ALoopExpr> */
+if (var_n_kwloop == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3409);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3101);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwloop,self) on <var_n_kwloop:nullable TKwloop> */
+if (unlikely(var_n_kwloop == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+var_n_kwloop->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwloop:nullable TKwloop> */
 RET_LABEL2:(void)0;
 }
 }
+self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_block].val = var_n_block; /* _n_block on <self:ALoopExpr> */
+if (var_n_block == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_block,((val*)NULL)) on <var_n_block:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var5 = ((short int(*)(val* self, val* p0))(var_n_block->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_block, var_other); /* == on <var_n_block:nullable AExpr(AExpr)>*/
+}
+var6 = !var5;
+var3 = var6;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+var = var3;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_block,self) on <var_n_block:nullable AExpr(AExpr)> */
+var_n_block->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_block:nullable AExpr(AExpr)> */
+RET_LABEL7:(void)0;
+}
+}
+} else {
+}
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_n_label; /* _n_label on <self:ALoopExpr> */
+if (var_n_label == NULL) {
+var8 = 0; /* is null */
+} else {
+var8 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_label,((val*)NULL)) on <var_n_label:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var11 = ((short int(*)(val* self, val* p0))(var_n_label->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_label, var_other); /* == on <var_n_label:nullable ALabel(ALabel)>*/
+}
+var12 = !var11;
+var9 = var12;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+var8 = var9;
+}
+if (var8){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_label,self) on <var_n_label:nullable ALabel(ALabel)> */
+var_n_label->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_label:nullable ALabel(ALabel)> */
+RET_LABEL13:(void)0;
+}
+}
+} else {
+}
 RET_LABEL:;
 }
-/* method parser_prod#ALlExpr#replace_child for (self: ALlExpr, ANode, nullable ANode) */
-void nit__parser_prod___ALlExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ALoopExpr#replace_child for (self: ALoopExpr, ANode, nullable ANode) */
+void nit__parser_prod___ALoopExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwloop */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -1427,27 +849,37 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
+val* var7 /* : nullable AExpr */;
 short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
+short int var9 /* : Bool */;
+short int var11 /* : Bool */;
 short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+const char* var_class_name17;
+val* var18 /* : nullable ALabel */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var24 /* : Bool */;
+short int var25 /* : Bool */;
+int cltype26;
+int idtype27;
+const char* var_class_name28;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALlExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_kwloop].val; /* _n_kwloop on <self:ALoopExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3414);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwloop");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3110);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwloop> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwloop> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -1460,9 +892,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwloop */
+cltype = type_nit__TKwloop.color;
+idtype = type_nit__TKwloop.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -1474,172 +906,419 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3415);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwloop", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3111);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ALlExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ALlExpr#n_expr= on <self:ALlExpr>*/
+nit__parser_prod___ALoopExpr___n_kwloop_61d(self, var_new_child); /* Direct call parser_prod#ALoopExpr#n_kwloop= on <self:ALoopExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALlExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3418);
-show_backtrace(1);
+var7 = self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_block].val; /* _n_block on <self:ALoopExpr> */
+if (var7 == NULL) {
+var8 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:nullable AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:nullable AExpr(AExpr)> */
+var13 = var7 == var_other;
+var11 = var13;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
+}
+}
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+var8 = var9;
+}
+if (var8){
+/* <var_new_child:nullable ANode> isa nullable AExpr */
+cltype15 = type_nullable__nit__AExpr.color;
+idtype16 = type_nullable__nit__AExpr.id;
+if(var_new_child == NULL) {
+var14 = 1;
+} else {
+if(cltype15 >= var_new_child->type->table_size) {
+var14 = 0;
+} else {
+var14 = var_new_child->type->type_table[cltype15] == idtype16;
+}
+}
+if (unlikely(!var14)) {
+var_class_name17 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable AExpr", var_class_name17);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3115);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+nit__parser_prod___ALoopExpr___n_block_61d(self, var_new_child); /* Direct call parser_prod#ALoopExpr#n_block= on <self:ALoopExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var18 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:ALoopExpr> */
+if (var18 == NULL) {
+var19 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var18,var_old_child) on <var18:nullable ALabel> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var18,var_other) on <var18:nullable ALabel(ALabel)> */
+var24 = var18 == var_other;
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
+var19 = var20;
 }
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+if (var19){
+/* <var_new_child:nullable ANode> isa nullable ALabel */
+cltype26 = type_nullable__nit__ALabel.color;
+idtype27 = type_nullable__nit__ALabel.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var25 = 1;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype26 >= var_new_child->type->table_size) {
+var25 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var25 = var_new_child->type->type_table[cltype26] == idtype27;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3419);
-show_backtrace(1);
+if (unlikely(!var25)) {
+var_class_name28 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable ALabel", var_class_name28);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3119);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ALlExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ALlExpr#n_expr2= on <self:ALlExpr>*/
+nit__parser_prod___ALoopExpr___nit__parser_nodes__ALabelable__n_label_61d(self, var_new_child); /* Direct call parser_prod#ALoopExpr#n_label= on <self:ALoopExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ALlExpr#n_expr= for (self: ALlExpr, AExpr) */
-void nit__parser_prod___ALlExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#ALoopExpr#n_kwloop= for (self: ALoopExpr, TKwloop) */
+void nit__parser_prod___ALoopExpr___n_kwloop_61d(val* self, val* p0) {
+val* var_node /* var node: TKwloop */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ALlExpr> */
+self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_kwloop].val = var_node; /* _n_kwloop on <self:ALoopExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwloop> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwloop> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#ALoopExpr#n_block= for (self: ALoopExpr, nullable AExpr) */
+void nit__parser_prod___ALoopExpr___n_block_61d(val* self, val* p0) {
+val* var_node /* var node: nullable AExpr */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_block].val = var_node; /* _n_block on <self:ALoopExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable AExpr(AExpr)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable AExpr(AExpr)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable AExpr(AExpr)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#ALoopExpr#n_label= for (self: ALoopExpr, nullable ALabel) */
+void nit__parser_prod___ALoopExpr___nit__parser_nodes__ALabelable__n_label_61d(val* self, val* p0) {
+val* var_node /* var node: nullable ALabel */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_node; /* _n_label on <self:ALoopExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable ALabel(ALabel)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable ALabel(ALabel)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable ALabel(ALabel)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#ALoopExpr#visit_all for (self: ALoopExpr, Visitor) */
+void nit__parser_prod___ALoopExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+val* var_v /* var v: Visitor */;
+val* var /* : TKwloop */;
+val* var1 /* : nullable AExpr */;
+val* var2 /* : nullable ALabel */;
+var_v = p0;
+var = self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_kwloop].val; /* _n_kwloop on <self:ALoopExpr> */
+if (unlikely(var == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwloop");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3143);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var1 = self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_block].val; /* _n_block on <self:ALoopExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var2 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:ALoopExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+RET_LABEL:;
+}
+/* method parser_prod#AForExpr#init_aforexpr for (self: AForExpr, nullable TKwfor, Collection[Object], nullable TKwin, nullable AExpr, nullable TKwdo, nullable AExpr, nullable ALabel) */
+void nit__parser_prod___AForExpr___init_aforexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4, val* p5, val* p6) {
+val* var_n_kwfor /* var n_kwfor: nullable TKwfor */;
+val* var_n_ids /* var n_ids: Collection[Object] */;
+val* var_n_kwin /* var n_kwin: nullable TKwin */;
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_kwdo /* var n_kwdo: nullable TKwdo */;
+val* var_n_block /* var n_block: nullable AExpr */;
+val* var_n_label /* var n_label: nullable ALabel */;
+val* var /* : ANodes[TId] */;
+val* var4 /* : ANodes[TId] */;
+short int var8 /* : Bool */;
+short int var9 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var11 /* : Bool */;
+short int var12 /* : Bool */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline kernel#Object#init (self) on <self:AForExpr> */
 RET_LABEL1:(void)0;
 }
 }
-RET_LABEL:;
-}
-/* method parser_prod#ALlExpr#n_expr2= for (self: ALlExpr, AExpr) */
-void nit__parser_prod___ALlExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ALlExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
+var_n_kwfor = p0;
+var_n_ids = p1;
+var_n_kwin = p2;
+var_n_expr = p3;
+var_n_kwdo = p4;
+var_n_block = p5;
+var_n_label = p6;
+if (unlikely(var_n_kwfor == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3159);
+fatal_exit(1);
 }
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwfor].val = var_n_kwfor; /* _n_kwfor on <self:AForExpr> */
+if (var_n_kwfor == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3160);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwfor,self) on <var_n_kwfor:nullable TKwfor> */
+if (unlikely(var_n_kwfor == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-RET_LABEL:;
+var_n_kwfor->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwfor:nullable TKwfor> */
+RET_LABEL2:(void)0;
 }
-/* method parser_prod#ALlExpr#visit_all for (self: ALlExpr, Visitor) */
-void nit__parser_prod___ALlExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALlExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3438);
-show_backtrace(1);
 }
 {
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline parser_nodes#AForExpr#n_ids (self) on <self:AForExpr> */
+var4 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_ids].val; /* _n_ids on <self:AForExpr> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_ids");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1934);
+fatal_exit(1);
+}
+var = var4;
+RET_LABEL3:(void)0;
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALlExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3439);
-show_backtrace(1);
 }
 {
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+nit___nit__ANodes___unsafe_add_all(var, var_n_ids); /* Direct call parser_nodes#ANodes#unsafe_add_all on <var:ANodes[TId]>*/
+}
+if (unlikely(var_n_kwin == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3162);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwin].val = var_n_kwin; /* _n_kwin on <self:AForExpr> */
+if (var_n_kwin == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3163);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwin,self) on <var_n_kwin:nullable TKwin> */
+if (unlikely(var_n_kwin == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_kwin->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwin:nullable TKwin> */
+RET_LABEL5:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#AGtExpr#init_agtexpr for (self: AGtExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AGtExpr___init_agtexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3448);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3164);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AGtExpr> */
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AForExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3449);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3165);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL6:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
+if (unlikely(var_n_kwdo == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3450);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3166);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AGtExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwdo].val = var_n_kwdo; /* _n_kwdo on <self:AForExpr> */
+if (var_n_kwdo == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3451);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3167);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwdo,self) on <var_n_kwdo:nullable TKwdo> */
+if (unlikely(var_n_kwdo == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+var_n_kwdo->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwdo:nullable TKwdo> */
+RET_LABEL7:(void)0;
+}
+}
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val = var_n_block; /* _n_block on <self:AForExpr> */
+if (var_n_block == NULL) {
+var8 = 0; /* is null */
+} else {
+var8 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_block,((val*)NULL)) on <var_n_block:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var11 = ((short int(*)(val* self, val* p0))(var_n_block->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_block, var_other); /* == on <var_n_block:nullable AExpr(AExpr)>*/
+}
+var12 = !var11;
+var9 = var12;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+var8 = var9;
+}
+if (var8){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_block,self) on <var_n_block:nullable AExpr(AExpr)> */
+var_n_block->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_block:nullable AExpr(AExpr)> */
+RET_LABEL13:(void)0;
+}
+}
+} else {
+}
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_n_label; /* _n_label on <self:AForExpr> */
+if (var_n_label == NULL) {
+var14 = 0; /* is null */
+} else {
+var14 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_label,((val*)NULL)) on <var_n_label:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var17 = ((short int(*)(val* self, val* p0))(var_n_label->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_label, var_other); /* == on <var_n_label:nullable ALabel(ALabel)>*/
+}
+var18 = !var17;
+var15 = var18;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
+}
+var14 = var15;
 }
+if (var14){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_label,self) on <var_n_label:nullable ALabel(ALabel)> */
+var_n_label->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_label:nullable ALabel(ALabel)> */
+RET_LABEL19:(void)0;
+}
+}
+} else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGtExpr#replace_child for (self: AGtExpr, ANode, nullable ANode) */
-void nit__parser_prod___AGtExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AForExpr#replace_child for (self: AForExpr, ANode, nullable ANode) */
+void nit__parser_prod___AForExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwfor */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -1648,27 +1327,64 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
+val* var7 /* : ANodes[TId] */;
+val* var9 /* : ANodes[TId] */;
 short int var10 /* : Bool */;
+val* var11 /* : TKwin */;
 short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
+short int var14 /* : Bool */;
+short int var16 /* : Bool */;
+short int var17 /* : Bool */;
+int cltype18;
+int idtype19;
+const char* var_class_name20;
+val* var21 /* : AExpr */;
+short int var22 /* : Bool */;
+short int var24 /* : Bool */;
+short int var26 /* : Bool */;
+short int var27 /* : Bool */;
+int cltype28;
+int idtype29;
+const char* var_class_name30;
+val* var31 /* : TKwdo */;
+short int var32 /* : Bool */;
+short int var34 /* : Bool */;
+short int var36 /* : Bool */;
+short int var37 /* : Bool */;
+int cltype38;
+int idtype39;
+const char* var_class_name40;
+val* var41 /* : nullable AExpr */;
+short int var42 /* : Bool */;
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+short int var47 /* : Bool */;
+short int var48 /* : Bool */;
+int cltype49;
+int idtype50;
+const char* var_class_name51;
+val* var52 /* : nullable ALabel */;
+short int var53 /* : Bool */;
+short int var54 /* : Bool */;
+short int var56 /* : Bool */;
+short int var58 /* : Bool */;
+short int var59 /* : Bool */;
+int cltype60;
+int idtype61;
+const char* var_class_name62;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGtExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwfor].val; /* _n_kwfor on <self:AForExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3456);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwfor");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3176);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwfor> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwfor> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -1681,9 +1397,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwfor */
+cltype = type_nit__TKwfor.color;
+idtype = type_nit__TKwfor.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -1695,304 +1411,299 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3457);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwfor", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3177);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AGtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AGtExpr#n_expr= on <self:AGtExpr>*/
+nit__parser_prod___AForExpr___n_kwfor_61d(self, var_new_child); /* Direct call parser_prod#AForExpr#n_kwfor= on <self:AForExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGtExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3460);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
-var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-}
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
-}
-}
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var13 = 0;
-} else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+{ /* Inline parser_nodes#AForExpr#n_ids (self) on <self:AForExpr> */
+var9 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_ids].val; /* _n_ids on <self:AForExpr> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_ids");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1934);
+fatal_exit(1);
 }
+var7 = var9;
+RET_LABEL8:(void)0;
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3461);
-show_backtrace(1);
 }
 {
-nit__parser_prod___AGtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AGtExpr#n_expr2= on <self:AGtExpr>*/
+var10 = nit___nit__ANodes___replace_child(var7, var_old_child, var_new_child);
 }
+if (var10){
 goto RET_LABEL;
 } else {
 }
-RET_LABEL:;
+var11 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwin].val; /* _n_kwin on <self:AForExpr> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwin");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3181);
+fatal_exit(1);
 }
-/* method parser_prod#AGtExpr#n_expr= for (self: AGtExpr, AExpr) */
-void nit__parser_prod___AGtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AGtExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AGtExpr#n_expr2= for (self: AGtExpr, AExpr) */
-void nit__parser_prod___AGtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AGtExpr> */
+{ /* Inline kernel#Object#== (var11,var_old_child) on <var11:TKwin> */
+var_other = var_old_child;
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var11,var_other) on <var11:TKwin> */
+var16 = var11 == var_other;
+var14 = var16;
+goto RET_LABEL15;
+RET_LABEL15:(void)0;
 }
 }
-RET_LABEL:;
-}
-/* method parser_prod#AGtExpr#visit_all for (self: AGtExpr, Visitor) */
-void nit__parser_prod___AGtExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGtExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3480);
-show_backtrace(1);
+var12 = var14;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
 }
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGtExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3481);
-show_backtrace(1);
+if (var12){
+/* <var_new_child:nullable ANode> isa TKwin */
+cltype18 = type_nit__TKwin.color;
+idtype19 = type_nit__TKwin.id;
+if(var_new_child == NULL) {
+var17 = 0;
+} else {
+if(cltype18 >= var_new_child->type->table_size) {
+var17 = 0;
+} else {
+var17 = var_new_child->type->type_table[cltype18] == idtype19;
 }
-{
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-RET_LABEL:;
+if (unlikely(!var17)) {
+var_class_name20 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwin", var_class_name20);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3182);
+fatal_exit(1);
 }
-/* method parser_prod#AGeExpr#init_ageexpr for (self: AGeExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AGeExpr___init_ageexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3490);
-show_backtrace(1);
+{
+nit__parser_prod___AForExpr___n_kwin_61d(self, var_new_child); /* Direct call parser_prod#AForExpr#n_kwin= on <self:AForExpr>*/
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AGeExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3491);
-show_backtrace(1);
+goto RET_LABEL;
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
 }
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3492);
-show_backtrace(1);
+var21 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
+if (unlikely(var21 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3185);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AGeExpr> */
-if (var_n_expr2 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3493);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+{
+{ /* Inline kernel#Object#== (var21,var_old_child) on <var21:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var21,var_other) on <var21:AExpr> */
+var26 = var21 == var_other;
+var24 = var26;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
 }
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#AGeExpr#replace_child for (self: AGeExpr, ANode, nullable ANode) */
-void nit__parser_prod___AGeExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGeExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3498);
-show_backtrace(1);
+if (var22){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype28 = type_nit__AExpr.color;
+idtype29 = type_nit__AExpr.id;
+if(var_new_child == NULL) {
+var27 = 0;
+} else {
+if(cltype28 >= var_new_child->type->table_size) {
+var27 = 0;
+} else {
+var27 = var_new_child->type->type_table[cltype28] == idtype29;
+}
+}
+if (unlikely(!var27)) {
+var_class_name30 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name30);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3186);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+nit__parser_prod___AForExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AForExpr#n_expr= on <self:AForExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var31 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwdo].val; /* _n_kwdo on <self:AForExpr> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwdo");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3189);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var31,var_old_child) on <var31:TKwdo> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var31,var_other) on <var31:TKwdo> */
+var36 = var31 == var_other;
+var34 = var36;
+goto RET_LABEL35;
+RET_LABEL35:(void)0;
 }
 }
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
+var32 = var34;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
 }
 }
-if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+if (var32){
+/* <var_new_child:nullable ANode> isa TKwdo */
+cltype38 = type_nit__TKwdo.color;
+idtype39 = type_nit__TKwdo.id;
 if(var_new_child == NULL) {
-var6 = 0;
+var37 = 0;
 } else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
+if(cltype38 >= var_new_child->type->table_size) {
+var37 = 0;
 } else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
+var37 = var_new_child->type->type_table[cltype38] == idtype39;
 }
 }
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3499);
-show_backtrace(1);
+if (unlikely(!var37)) {
+var_class_name40 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwdo", var_class_name40);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3190);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AGeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AGeExpr#n_expr= on <self:AGeExpr>*/
+nit__parser_prod___AForExpr___n_kwdo_61d(self, var_new_child); /* Direct call parser_prod#AForExpr#n_kwdo= on <self:AForExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGeExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3502);
-show_backtrace(1);
+var41 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
+if (var41 == NULL) {
+var42 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var41,var_old_child) on <var41:nullable AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var41,var_other) on <var41:nullable AExpr(AExpr)> */
+var47 = var41 == var_other;
+var45 = var47;
+goto RET_LABEL46;
+RET_LABEL46:(void)0;
+}
+}
+var43 = var45;
+goto RET_LABEL44;
+RET_LABEL44:(void)0;
+}
+var42 = var43;
+}
+if (var42){
+/* <var_new_child:nullable ANode> isa nullable AExpr */
+cltype49 = type_nullable__nit__AExpr.color;
+idtype50 = type_nullable__nit__AExpr.id;
+if(var_new_child == NULL) {
+var48 = 1;
+} else {
+if(cltype49 >= var_new_child->type->table_size) {
+var48 = 0;
+} else {
+var48 = var_new_child->type->type_table[cltype49] == idtype50;
+}
+}
+if (unlikely(!var48)) {
+var_class_name51 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable AExpr", var_class_name51);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3194);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+nit__parser_prod___AForExpr___n_block_61d(self, var_new_child); /* Direct call parser_prod#AForExpr#n_block= on <self:AForExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var52 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:AForExpr> */
+if (var52 == NULL) {
+var53 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var52,var_old_child) on <var52:nullable ALabel> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var52,var_other) on <var52:nullable ALabel(ALabel)> */
+var58 = var52 == var_other;
+var56 = var58;
+goto RET_LABEL57;
+RET_LABEL57:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var54 = var56;
+goto RET_LABEL55;
+RET_LABEL55:(void)0;
 }
+var53 = var54;
 }
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+if (var53){
+/* <var_new_child:nullable ANode> isa nullable ALabel */
+cltype60 = type_nullable__nit__ALabel.color;
+idtype61 = type_nullable__nit__ALabel.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var59 = 1;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype60 >= var_new_child->type->table_size) {
+var59 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var59 = var_new_child->type->type_table[cltype60] == idtype61;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3503);
-show_backtrace(1);
+if (unlikely(!var59)) {
+var_class_name62 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable ALabel", var_class_name62);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3198);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AGeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AGeExpr#n_expr2= on <self:AGeExpr>*/
+nit__parser_prod___AForExpr___nit__parser_nodes__ALabelable__n_label_61d(self, var_new_child); /* Direct call parser_prod#AForExpr#n_label= on <self:AForExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGeExpr#n_expr= for (self: AGeExpr, AExpr) */
-void nit__parser_prod___AGeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AForExpr#n_kwfor= for (self: AForExpr, TKwfor) */
+void nit__parser_prod___AForExpr___n_kwfor_61d(val* self, val* p0) {
+val* var_node /* var node: TKwfor */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AGeExpr> */
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwfor].val = var_node; /* _n_kwfor on <self:AForExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwfor> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwfor> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGeExpr#n_expr2= for (self: AGeExpr, AExpr) */
-void nit__parser_prod___AGeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AForExpr#n_kwin= for (self: AForExpr, TKwin) */
+void nit__parser_prod___AForExpr___n_kwin_61d(val* self, val* p0) {
+val* var_node /* var node: TKwin */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwin].val = var_node; /* _n_kwin on <self:AForExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwin> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwin> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AForExpr#n_expr= for (self: AForExpr, AExpr) */
+void nit__parser_prod___AForExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AGeExpr> */
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val = var_node; /* _n_expr on <self:AForExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -2001,87 +1712,322 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGeExpr#visit_all for (self: AGeExpr, Visitor) */
-void nit__parser_prod___AGeExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AForExpr#n_kwdo= for (self: AForExpr, TKwdo) */
+void nit__parser_prod___AForExpr___n_kwdo_61d(val* self, val* p0) {
+val* var_node /* var node: TKwdo */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwdo].val = var_node; /* _n_kwdo on <self:AForExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwdo> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwdo> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AForExpr#n_block= for (self: AForExpr, nullable AExpr) */
+void nit__parser_prod___AForExpr___n_block_61d(val* self, val* p0) {
+val* var_node /* var node: nullable AExpr */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val = var_node; /* _n_block on <self:AForExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable AExpr(AExpr)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable AExpr(AExpr)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable AExpr(AExpr)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#AForExpr#n_label= for (self: AForExpr, nullable ALabel) */
+void nit__parser_prod___AForExpr___nit__parser_nodes__ALabelable__n_label_61d(val* self, val* p0) {
+val* var_node /* var node: nullable ALabel */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_node; /* _n_label on <self:AForExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable ALabel(ALabel)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable ALabel(ALabel)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable ALabel(ALabel)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#AForExpr#visit_all for (self: AForExpr, Visitor) */
+void nit__parser_prod___AForExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
+val* var /* : TKwfor */;
+val* var1 /* : ANodes[TId] */;
+val* var3 /* : ANodes[TId] */;
+val* var4 /* : TKwin */;
+val* var5 /* : AExpr */;
+val* var6 /* : TKwdo */;
+val* var7 /* : nullable AExpr */;
+val* var8 /* : nullable ALabel */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGeExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwfor].val; /* _n_kwfor on <self:AForExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3522);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwfor");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3237);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGeExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3523);
-show_backtrace(1);
+{
+{ /* Inline parser_nodes#AForExpr#n_ids (self) on <self:AForExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_ids].val; /* _n_ids on <self:AForExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_ids");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1934);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 }
 {
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+nit___nit__ANodes___visit_all(var1, var_v); /* Direct call parser_nodes#ANodes#visit_all on <var1:ANodes[TId]>*/
+}
+var4 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwin].val; /* _n_kwin on <self:AForExpr> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwin");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3239);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var5 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3240);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var5); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var6 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_kwdo].val; /* _n_kwdo on <self:AForExpr> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwdo");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3241);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var6); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var7 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var7); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var8 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:AForExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var8); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGgExpr#init_aggexpr for (self: AGgExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AGgExpr___init_aggexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AWithExpr#init_awithexpr for (self: AWithExpr, nullable TKwwith, nullable AExpr, nullable TKwdo, nullable AExpr, nullable ALabel) */
+void nit__parser_prod___AWithExpr___init_awithexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
+val* var_n_kwwith /* var n_kwwith: nullable TKwwith */;
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
+val* var_n_kwdo /* var n_kwdo: nullable TKwdo */;
+val* var_n_block /* var n_block: nullable AExpr */;
+val* var_n_label /* var n_label: nullable ALabel */;
+short int var /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+short int var11 /* : Bool */;
+short int var13 /* : Bool */;
+short int var14 /* : Bool */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AWithExpr> */
+RET_LABEL1:(void)0;
+}
+}
+var_n_kwwith = p0;
+var_n_expr = p1;
+var_n_kwdo = p2;
+var_n_block = p3;
+var_n_label = p4;
+if (unlikely(var_n_kwwith == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3255);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwwith].val = var_n_kwwith; /* _n_kwwith on <self:AWithExpr> */
+if (var_n_kwwith == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3256);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwwith,self) on <var_n_kwwith:nullable TKwwith> */
+if (unlikely(var_n_kwwith == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_kwwith->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwwith:nullable TKwwith> */
+RET_LABEL2:(void)0;
+}
+}
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3532);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3257);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AGgExpr> */
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AWithExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3533);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3258);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
+if (unlikely(var_n_kwdo == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3534);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3259);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AGgExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwdo].val = var_n_kwdo; /* _n_kwdo on <self:AWithExpr> */
+if (var_n_kwdo == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3535);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3260);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwdo,self) on <var_n_kwdo:nullable TKwdo> */
+if (unlikely(var_n_kwdo == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_kwdo->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwdo:nullable TKwdo> */
+RET_LABEL4:(void)0;
+}
+}
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_block].val = var_n_block; /* _n_block on <self:AWithExpr> */
+if (var_n_block == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_block,((val*)NULL)) on <var_n_block:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var7 = ((short int(*)(val* self, val* p0))(var_n_block->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_block, var_other); /* == on <var_n_block:nullable AExpr(AExpr)>*/
+}
+var8 = !var7;
+var5 = var8;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var = var5;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_block,self) on <var_n_block:nullable AExpr(AExpr)> */
+var_n_block->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_block:nullable AExpr(AExpr)> */
+RET_LABEL9:(void)0;
+}
+}
+} else {
+}
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_n_label; /* _n_label on <self:AWithExpr> */
+if (var_n_label == NULL) {
+var10 = 0; /* is null */
+} else {
+var10 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_label,((val*)NULL)) on <var_n_label:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var13 = ((short int(*)(val* self, val* p0))(var_n_label->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_label, var_other); /* == on <var_n_label:nullable ALabel(ALabel)>*/
+}
+var14 = !var13;
+var11 = var14;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
+}
+var10 = var11;
+}
+if (var10){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_label,self) on <var_n_label:nullable ALabel(ALabel)> */
+var_n_label->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_label:nullable ALabel(ALabel)> */
+RET_LABEL15:(void)0;
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
 }
+} else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGgExpr#replace_child for (self: AGgExpr, ANode, nullable ANode) */
-void nit__parser_prod___AGgExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AWithExpr#replace_child for (self: AWithExpr, ANode, nullable ANode) */
+void nit__parser_prod___AWithExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwwith */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -2098,19 +2044,45 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : TKwdo */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
+val* var27 /* : nullable AExpr */;
+short int var28 /* : Bool */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+int cltype35;
+int idtype36;
+const char* var_class_name37;
+val* var38 /* : nullable ALabel */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
+short int var42 /* : Bool */;
+short int var44 /* : Bool */;
+short int var45 /* : Bool */;
+int cltype46;
+int idtype47;
+const char* var_class_name48;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGgExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwwith].val; /* _n_kwwith on <self:AWithExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3540);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwwith");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3269);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwwith> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwwith> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -2123,9 +2095,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwwith */
+cltype = type_nit__TKwwith.color;
+idtype = type_nit__TKwwith.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -2137,21 +2109,21 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3541);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwwith", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3270);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AGgExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AGgExpr#n_expr= on <self:AGgExpr>*/
+nit__parser_prod___AWithExpr___n_kwwith_61d(self, var_new_child); /* Direct call parser_prod#AWithExpr#n_kwwith= on <self:AWithExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGgExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val; /* _n_expr on <self:AWithExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3544);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3273);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
@@ -2185,35 +2157,172 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3545);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3274);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AGgExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AGgExpr#n_expr2= on <self:AGgExpr>*/
+nit__parser_prod___AWithExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AWithExpr#n_expr= on <self:AWithExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwdo].val; /* _n_kwdo on <self:AWithExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwdo");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3277);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:TKwdo> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:TKwdo> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa TKwdo */
+cltype24 = type_nit__TKwdo.color;
+idtype25 = type_nit__TKwdo.id;
+if(var_new_child == NULL) {
+var23 = 0;
+} else {
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
+}
+}
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwdo", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3278);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AWithExpr___n_kwdo_61d(self, var_new_child); /* Direct call parser_prod#AWithExpr#n_kwdo= on <self:AWithExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var27 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_block].val; /* _n_block on <self:AWithExpr> */
+if (var27 == NULL) {
+var28 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:nullable AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:nullable AExpr(AExpr)> */
+var33 = var27 == var_other;
+var31 = var33;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
+}
+}
+var29 = var31;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
+}
+var28 = var29;
+}
+if (var28){
+/* <var_new_child:nullable ANode> isa nullable AExpr */
+cltype35 = type_nullable__nit__AExpr.color;
+idtype36 = type_nullable__nit__AExpr.id;
+if(var_new_child == NULL) {
+var34 = 1;
+} else {
+if(cltype35 >= var_new_child->type->table_size) {
+var34 = 0;
+} else {
+var34 = var_new_child->type->type_table[cltype35] == idtype36;
+}
+}
+if (unlikely(!var34)) {
+var_class_name37 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable AExpr", var_class_name37);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3282);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AWithExpr___n_block_61d(self, var_new_child); /* Direct call parser_prod#AWithExpr#n_block= on <self:AWithExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var38 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:AWithExpr> */
+if (var38 == NULL) {
+var39 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var38,var_old_child) on <var38:nullable ALabel> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var38,var_other) on <var38:nullable ALabel(ALabel)> */
+var44 = var38 == var_other;
+var42 = var44;
+goto RET_LABEL43;
+RET_LABEL43:(void)0;
+}
+}
+var40 = var42;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
+}
+var39 = var40;
+}
+if (var39){
+/* <var_new_child:nullable ANode> isa nullable ALabel */
+cltype46 = type_nullable__nit__ALabel.color;
+idtype47 = type_nullable__nit__ALabel.id;
+if(var_new_child == NULL) {
+var45 = 1;
+} else {
+if(cltype46 >= var_new_child->type->table_size) {
+var45 = 0;
+} else {
+var45 = var_new_child->type->type_table[cltype46] == idtype47;
+}
+}
+if (unlikely(!var45)) {
+var_class_name48 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable ALabel", var_class_name48);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3286);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AWithExpr___nit__parser_nodes__ALabelable__n_label_61d(self, var_new_child); /* Direct call parser_prod#AWithExpr#n_label= on <self:AWithExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGgExpr#n_expr= for (self: AGgExpr, AExpr) */
-void nit__parser_prod___AGgExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AWithExpr#n_kwwith= for (self: AWithExpr, TKwwith) */
+void nit__parser_prod___AWithExpr___n_kwwith_61d(val* self, val* p0) {
+val* var_node /* var node: TKwwith */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AGgExpr> */
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwwith].val = var_node; /* _n_kwwith on <self:AWithExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwwith> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwwith> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGgExpr#n_expr2= for (self: AGgExpr, AExpr) */
-void nit__parser_prod___AGgExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AWithExpr#n_expr= for (self: AWithExpr, AExpr) */
+void nit__parser_prod___AWithExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AGgExpr> */
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val = var_node; /* _n_expr on <self:AWithExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -2222,87 +2331,306 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AGgExpr#visit_all for (self: AGgExpr, Visitor) */
-void nit__parser_prod___AGgExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AWithExpr#n_kwdo= for (self: AWithExpr, TKwdo) */
+void nit__parser_prod___AWithExpr___n_kwdo_61d(val* self, val* p0) {
+val* var_node /* var node: TKwdo */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwdo].val = var_node; /* _n_kwdo on <self:AWithExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwdo> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwdo> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AWithExpr#n_block= for (self: AWithExpr, nullable AExpr) */
+void nit__parser_prod___AWithExpr___n_block_61d(val* self, val* p0) {
+val* var_node /* var node: nullable AExpr */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_block].val = var_node; /* _n_block on <self:AWithExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable AExpr(AExpr)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable AExpr(AExpr)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable AExpr(AExpr)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#AWithExpr#n_label= for (self: AWithExpr, nullable ALabel) */
+void nit__parser_prod___AWithExpr___nit__parser_nodes__ALabelable__n_label_61d(val* self, val* p0) {
+val* var_node /* var node: nullable ALabel */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val = var_node; /* _n_label on <self:AWithExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable ALabel> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable ALabel(ALabel)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable ALabel(ALabel)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable ALabel(ALabel)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#AWithExpr#visit_all for (self: AWithExpr, Visitor) */
+void nit__parser_prod___AWithExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
+val* var /* : TKwwith */;
 val* var1 /* : AExpr */;
+val* var2 /* : TKwdo */;
+val* var3 /* : nullable AExpr */;
+val* var4 /* : nullable ALabel */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGgExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwwith].val; /* _n_kwwith on <self:AWithExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3564);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwwith");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3320);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGgExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val; /* _n_expr on <self:AWithExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3565);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3321);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_kwdo].val; /* _n_kwdo on <self:AWithExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwdo");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3322);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var3 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_block].val; /* _n_block on <self:AWithExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var4 = self->attrs[COLOR_nit__parser_nodes__ALabelable___n_label].val; /* _n_label on <self:AWithExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#AIsaExpr#init_aisaexpr for (self: AIsaExpr, nullable AExpr, nullable AType) */
-void nit__parser_prod___AIsaExpr___init_aisaexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AAssertExpr#init_aassertexpr for (self: AAssertExpr, nullable TKwassert, nullable TId, nullable AExpr, nullable TKwelse, nullable AExpr) */
+void nit__parser_prod___AAssertExpr___init_aassertexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
+val* var_n_kwassert /* var n_kwassert: nullable TKwassert */;
+val* var_n_id /* var n_id: nullable TId */;
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_type /* var n_type: nullable AType */;
-var_n_expr = p0;
-var_n_type = p1;
+val* var_n_kwelse /* var n_kwelse: nullable TKwelse */;
+val* var_n_else /* var n_else: nullable AExpr */;
+short int var /* : Bool */;
+short int var3 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AAssertExpr> */
+RET_LABEL1:(void)0;
+}
+}
+var_n_kwassert = p0;
+var_n_id = p1;
+var_n_expr = p2;
+var_n_kwelse = p3;
+var_n_else = p4;
+if (unlikely(var_n_kwassert == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3336);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwassert].val = var_n_kwassert; /* _n_kwassert on <self:AAssertExpr> */
+if (var_n_kwassert == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3337);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwassert,self) on <var_n_kwassert:nullable TKwassert> */
+if (unlikely(var_n_kwassert == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_kwassert->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwassert:nullable TKwassert> */
+RET_LABEL2:(void)0;
+}
+}
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_id].val = var_n_id; /* _n_id on <self:AAssertExpr> */
+if (var_n_id == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_id,((val*)NULL)) on <var_n_id:nullable TId> */
+var_other = ((val*)NULL);
+{
+var5 = ((short int(*)(val* self, val* p0))(var_n_id->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_id, var_other); /* == on <var_n_id:nullable TId(TId)>*/
+}
+var6 = !var5;
+var3 = var6;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+var = var3;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId(TId)> */
+var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId(TId)> */
+RET_LABEL7:(void)0;
+}
+}
+} else {
+}
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3574);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3340);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AIsaExpr> */
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AAssertExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3575);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3341);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL8:(void)0;
 }
 }
-if (unlikely(var_n_type == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3576);
-show_backtrace(1);
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwelse].val = var_n_kwelse; /* _n_kwelse on <self:AAssertExpr> */
+if (var_n_kwelse == NULL) {
+var9 = 0; /* is null */
+} else {
+var9 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_kwelse,((val*)NULL)) on <var_n_kwelse:nullable TKwelse> */
+var_other = ((val*)NULL);
+{
+var12 = ((short int(*)(val* self, val* p0))(var_n_kwelse->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_kwelse, var_other); /* == on <var_n_kwelse:nullable TKwelse(TKwelse)>*/
+}
+var13 = !var12;
+var10 = var13;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
+}
+var9 = var10;
+}
+if (var9){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwelse,self) on <var_n_kwelse:nullable TKwelse(TKwelse)> */
+var_n_kwelse->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwelse:nullable TKwelse(TKwelse)> */
+RET_LABEL14:(void)0;
+}
 }
-self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val = var_n_type; /* _n_type on <self:AIsaExpr> */
-if (var_n_type == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3577);
-show_backtrace(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_type,self) on <var_n_type:nullable AType> */
-if (unlikely(var_n_type == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
 }
-var_n_type->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_type:nullable AType> */
-RET_LABEL2:(void)0;
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_else].val = var_n_else; /* _n_else on <self:AAssertExpr> */
+if (var_n_else == NULL) {
+var15 = 0; /* is null */
+} else {
+var15 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n_else,((val*)NULL)) on <var_n_else:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var18 = ((short int(*)(val* self, val* p0))(var_n_else->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_else, var_other); /* == on <var_n_else:nullable AExpr(AExpr)>*/
+}
+var19 = !var18;
+var16 = var19;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
+}
+var15 = var16;
+}
+if (var15){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_n_else,self) on <var_n_else:nullable AExpr(AExpr)> */
+var_n_else->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_else:nullable AExpr(AExpr)> */
+RET_LABEL20:(void)0;
 }
 }
+} else {
+}
 RET_LABEL:;
 }
-/* method parser_prod#AIsaExpr#replace_child for (self: AIsaExpr, ANode, nullable ANode) */
-void nit__parser_prod___AIsaExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AAssertExpr#replace_child for (self: AAssertExpr, ANode, nullable ANode) */
+void nit__parser_prod___AAssertExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwassert */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -2311,27 +2639,54 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AType */;
+val* var7 /* : nullable TId */;
 short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
+short int var9 /* : Bool */;
+short int var11 /* : Bool */;
 short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
+short int var14 /* : Bool */;
+int cltype15;
+int idtype16;
+const char* var_class_name17;
+val* var18 /* : AExpr */;
+short int var19 /* : Bool */;
+short int var21 /* : Bool */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+int cltype25;
+int idtype26;
+const char* var_class_name27;
+val* var28 /* : nullable TKwelse */;
+short int var29 /* : Bool */;
+short int var30 /* : Bool */;
+short int var32 /* : Bool */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
+int cltype36;
+int idtype37;
+const char* var_class_name38;
+val* var39 /* : nullable AExpr */;
+short int var40 /* : Bool */;
+short int var41 /* : Bool */;
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+short int var46 /* : Bool */;
+int cltype47;
+int idtype48;
+const char* var_class_name49;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwassert].val; /* _n_kwassert on <self:AAssertExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3582);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwassert");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3350);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwassert> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwassert> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -2344,9 +2699,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwassert */
+cltype = type_nit__TKwassert.color;
+idtype = type_nit__TKwassert.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -2358,291 +2713,257 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3583);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwassert", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3351);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AIsaExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AIsaExpr#n_expr= on <self:AIsaExpr>*/
+nit__parser_prod___AAssertExpr___n_kwassert_61d(self, var_new_child); /* Direct call parser_prod#AAssertExpr#n_kwassert= on <self:AAssertExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val; /* _n_type on <self:AIsaExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3586);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AType> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_id].val; /* _n_id on <self:AAssertExpr> */
+if (var7 == NULL) {
+var8 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:nullable TId> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AType> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:nullable TId(TId)> */
+var13 = var7 == var_other;
+var11 = var13;
+goto RET_LABEL12;
+RET_LABEL12:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
 }
+var8 = var9;
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AType */
-cltype14 = type_nit__AType.color;
-idtype15 = type_nit__AType.id;
+/* <var_new_child:nullable ANode> isa nullable TId */
+cltype15 = type_nullable__nit__TId.color;
+idtype16 = type_nullable__nit__TId.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var14 = 1;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype15 >= var_new_child->type->table_size) {
+var14 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var14 = var_new_child->type->type_table[cltype15] == idtype16;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AType", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3587);
-show_backtrace(1);
+if (unlikely(!var14)) {
+var_class_name17 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable TId", var_class_name17);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3355);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AIsaExpr___n_type_61d(self, var_new_child); /* Direct call parser_prod#AIsaExpr#n_type= on <self:AIsaExpr>*/
+nit__parser_prod___AAssertExpr___n_id_61d(self, var_new_child); /* Direct call parser_prod#AAssertExpr#n_id= on <self:AAssertExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-RET_LABEL:;
+var18 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_expr].val; /* _n_expr on <self:AAssertExpr> */
+if (unlikely(var18 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3358);
+fatal_exit(1);
 }
-/* method parser_prod#AIsaExpr#n_expr= for (self: AIsaExpr, AExpr) */
-void nit__parser_prod___AIsaExpr___n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val = var_node; /* _n_expr on <self:AIsaExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AIsaExpr#n_type= for (self: AIsaExpr, AType) */
-void nit__parser_prod___AIsaExpr___n_type_61d(val* self, val* p0) {
-val* var_node /* var node: AType */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val = var_node; /* _n_type on <self:AIsaExpr> */
+{ /* Inline kernel#Object#== (var18,var_old_child) on <var18:AExpr> */
+var_other = var_old_child;
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AType> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AType> */
-RET_LABEL1:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var18,var_other) on <var18:AExpr> */
+var23 = var18 == var_other;
+var21 = var23;
+goto RET_LABEL22;
+RET_LABEL22:(void)0;
 }
 }
-RET_LABEL:;
+var19 = var21;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
 }
-/* method parser_prod#AIsaExpr#visit_all for (self: AIsaExpr, Visitor) */
-void nit__parser_prod___AIsaExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AType */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3606);
-show_backtrace(1);
 }
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+if (var19){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype25 = type_nit__AExpr.color;
+idtype26 = type_nit__AExpr.id;
+if(var_new_child == NULL) {
+var24 = 0;
+} else {
+if(cltype25 >= var_new_child->type->table_size) {
+var24 = 0;
+} else {
+var24 = var_new_child->type->type_table[cltype25] == idtype26;
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val; /* _n_type on <self:AIsaExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3607);
-show_backtrace(1);
 }
-{
-nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+if (unlikely(!var24)) {
+var_class_name27 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name27);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3359);
+fatal_exit(1);
 }
-RET_LABEL:;
+{
+nit__parser_prod___AAssertExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AAssertExpr#n_expr= on <self:AAssertExpr>*/
 }
-/* method parser_prod#APlusExpr#init_aplusexpr for (self: APlusExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___APlusExpr___init_aplusexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3616);
-show_backtrace(1);
+goto RET_LABEL;
+} else {
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:APlusExpr> */
-if (var_n_expr == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3617);
-show_backtrace(1);
+var28 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwelse].val; /* _n_kwelse on <self:AAssertExpr> */
+if (var28 == NULL) {
+var29 = 0; /* <var_old_child:ANode> cannot be null */
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+{ /* Inline kernel#Object#== (var28,var_old_child) on <var28:nullable TKwelse> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var28,var_other) on <var28:nullable TKwelse(TKwelse)> */
+var34 = var28 == var_other;
+var32 = var34;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
 }
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
 }
+var30 = var32;
+goto RET_LABEL31;
+RET_LABEL31:(void)0;
 }
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3618);
-show_backtrace(1);
+var29 = var30;
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:APlusExpr> */
-if (var_n_expr2 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3619);
-show_backtrace(1);
+if (var29){
+/* <var_new_child:nullable ANode> isa nullable TKwelse */
+cltype36 = type_nullable__nit__TKwelse.color;
+idtype37 = type_nullable__nit__TKwelse.id;
+if(var_new_child == NULL) {
+var35 = 1;
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+if(cltype36 >= var_new_child->type->table_size) {
+var35 = 0;
+} else {
+var35 = var_new_child->type->type_table[cltype36] == idtype37;
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
 }
+if (unlikely(!var35)) {
+var_class_name38 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable TKwelse", var_class_name38);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3363);
+fatal_exit(1);
 }
-RET_LABEL:;
+{
+nit__parser_prod___AAssertExpr___n_kwelse_61d(self, var_new_child); /* Direct call parser_prod#AAssertExpr#n_kwelse= on <self:AAssertExpr>*/
 }
-/* method parser_prod#APlusExpr#replace_child for (self: APlusExpr, ANode, nullable ANode) */
-void nit__parser_prod___APlusExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-val* var7 /* : AExpr */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-const char* var_class_name16;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:APlusExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3624);
-show_backtrace(1);
+goto RET_LABEL;
+} else {
 }
-{
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+var39 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_else].val; /* _n_else on <self:AAssertExpr> */
+if (var39 == NULL) {
+var40 = 0; /* <var_old_child:ANode> cannot be null */
+} else {
+{ /* Inline kernel#Object#== (var39,var_old_child) on <var39:nullable AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var39,var_other) on <var39:nullable AExpr(AExpr)> */
+var45 = var39 == var_other;
+var43 = var45;
+goto RET_LABEL44;
+RET_LABEL44:(void)0;
 }
 }
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
+var41 = var43;
+goto RET_LABEL42;
+RET_LABEL42:(void)0;
 }
+var40 = var41;
 }
-if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+if (var40){
+/* <var_new_child:nullable ANode> isa nullable AExpr */
+cltype47 = type_nullable__nit__AExpr.color;
+idtype48 = type_nullable__nit__AExpr.id;
 if(var_new_child == NULL) {
-var6 = 0;
+var46 = 1;
 } else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
+if(cltype47 >= var_new_child->type->table_size) {
+var46 = 0;
 } else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
+var46 = var_new_child->type->type_table[cltype47] == idtype48;
 }
 }
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3625);
-show_backtrace(1);
+if (unlikely(!var46)) {
+var_class_name49 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable AExpr", var_class_name49);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3367);
+fatal_exit(1);
 }
 {
-nit__parser_prod___APlusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#APlusExpr#n_expr= on <self:APlusExpr>*/
+nit__parser_prod___AAssertExpr___n_else_61d(self, var_new_child); /* Direct call parser_prod#AAssertExpr#n_else= on <self:AAssertExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:APlusExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3628);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method parser_prod#AAssertExpr#n_kwassert= for (self: AAssertExpr, TKwassert) */
+void nit__parser_prod___AAssertExpr___n_kwassert_61d(val* self, val* p0) {
+val* var_node /* var node: TKwassert */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwassert].val = var_node; /* _n_kwassert on <self:AAssertExpr> */
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
-}
-}
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwassert> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwassert> */
+RET_LABEL1:(void)0;
 }
 }
-if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var13 = 0;
-} else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+RET_LABEL:;
+}
+/* method parser_prod#AAssertExpr#n_id= for (self: AAssertExpr, nullable TId) */
+void nit__parser_prod___AAssertExpr___n_id_61d(val* self, val* p0) {
+val* var_node /* var node: nullable TId */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_id].val = var_node; /* _n_id on <self:AAssertExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable TId> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable TId(TId)>*/
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3629);
-show_backtrace(1);
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
 }
+if (var){
 {
-nit__parser_prod___APlusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#APlusExpr#n_expr2= on <self:APlusExpr>*/
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable TId(TId)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable TId(TId)> */
+RET_LABEL5:(void)0;
+}
 }
-goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#APlusExpr#n_expr= for (self: APlusExpr, AExpr) */
-void nit__parser_prod___APlusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AAssertExpr#n_expr= for (self: AAssertExpr, AExpr) */
+void nit__parser_prod___AAssertExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:APlusExpr> */
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_expr].val = var_node; /* _n_expr on <self:AAssertExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -2651,100 +2972,185 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#APlusExpr#n_expr2= for (self: APlusExpr, AExpr) */
-void nit__parser_prod___APlusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AAssertExpr#n_kwelse= for (self: AAssertExpr, nullable TKwelse) */
+void nit__parser_prod___AAssertExpr___n_kwelse_61d(val* self, val* p0) {
+val* var_node /* var node: nullable TKwelse */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:APlusExpr> */
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwelse].val = var_node; /* _n_kwelse on <self:AAssertExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable TKwelse> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
-RET_LABEL1:(void)0;
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable TKwelse(TKwelse)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable TKwelse(TKwelse)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable TKwelse(TKwelse)> */
+RET_LABEL5:(void)0;
+}
 }
+} else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#APlusExpr#visit_all for (self: APlusExpr, Visitor) */
-void nit__parser_prod___APlusExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AAssertExpr#n_else= for (self: AAssertExpr, nullable AExpr) */
+void nit__parser_prod___AAssertExpr___n_else_61d(val* self, val* p0) {
+val* var_node /* var node: nullable AExpr */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_else].val = var_node; /* _n_else on <self:AAssertExpr> */
+if (var_node == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_node,((val*)NULL)) on <var_node:nullable AExpr> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable AExpr(AExpr)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable AExpr(AExpr)> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable AExpr(AExpr)> */
+RET_LABEL5:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#AAssertExpr#visit_all for (self: AAssertExpr, Visitor) */
+void nit__parser_prod___AAssertExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
-val* var1 /* : AExpr */;
+val* var /* : TKwassert */;
+val* var1 /* : nullable TId */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable TKwelse */;
+val* var4 /* : nullable AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:APlusExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwassert].val; /* _n_kwassert on <self:AAssertExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3648);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwassert");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3401);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:APlusExpr> */
-if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3649);
-show_backtrace(1);
-}
+var1 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_id].val; /* _n_id on <self:AAssertExpr> */
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_expr].val; /* _n_expr on <self:AAssertExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3403);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var3 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_kwelse].val; /* _n_kwelse on <self:AAssertExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var4 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_else].val; /* _n_else on <self:AAssertExpr> */
+{
+nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#AMinusExpr#init_aminusexpr for (self: AMinusExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AMinusExpr___init_aminusexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AOnceExpr#init_aonceexpr for (self: AOnceExpr, nullable TKwonce, nullable AExpr) */
+void nit__parser_prod___AOnceExpr___init_aonceexpr(val* self, val* p0, val* p1) {
+val* var_n_kwonce /* var n_kwonce: nullable TKwonce */;
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
+{
+{ /* Inline kernel#Object#init (self) on <self:AOnceExpr> */
+RET_LABEL1:(void)0;
+}
+}
+var_n_kwonce = p0;
+var_n_expr = p1;
+if (unlikely(var_n_kwonce == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3658);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3414);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AMinusExpr> */
-if (var_n_expr == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_kwonce].val = var_n_kwonce; /* _n_kwonce on <self:AOnceExpr> */
+if (var_n_kwonce == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3659);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3415);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwonce,self) on <var_n_kwonce:nullable TKwonce> */
+if (unlikely(var_n_kwonce == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+var_n_kwonce->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwonce:nullable TKwonce> */
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3660);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3416);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AMinusExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AOnceExpr> */
+if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3661);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3417);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+RET_LABEL3:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AMinusExpr#replace_child for (self: AMinusExpr, ANode, nullable ANode) */
-void nit__parser_prod___AMinusExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AOnceExpr#replace_child for (self: AOnceExpr, ANode, nullable ANode) */
+void nit__parser_prod___AOnceExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwonce */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -2763,17 +3169,17 @@ int idtype15;
 const char* var_class_name16;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AMinusExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_kwonce].val; /* _n_kwonce on <self:AOnceExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3666);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwonce");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3422);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwonce> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwonce> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -2786,9 +3192,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwonce */
+cltype = type_nit__TKwonce.color;
+idtype = type_nit__TKwonce.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -2800,21 +3206,21 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3667);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwonce", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3423);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AMinusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AMinusExpr#n_expr= on <self:AMinusExpr>*/
+nit__parser_prod___AOnceExpr___n_kwonce_61d(self, var_new_child); /* Direct call parser_prod#AOnceExpr#n_kwonce= on <self:AOnceExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AMinusExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_expr].val; /* _n_expr on <self:AOnceExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3670);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3426);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
@@ -2848,35 +3254,35 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3671);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3427);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AMinusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AMinusExpr#n_expr2= on <self:AMinusExpr>*/
+nit__parser_prod___AOnceExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AOnceExpr#n_expr= on <self:AOnceExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AMinusExpr#n_expr= for (self: AMinusExpr, AExpr) */
-void nit__parser_prod___AMinusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AOnceExpr#n_kwonce= for (self: AOnceExpr, TKwonce) */
+void nit__parser_prod___AOnceExpr___n_kwonce_61d(val* self, val* p0) {
+val* var_node /* var node: TKwonce */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AMinusExpr> */
+self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_kwonce].val = var_node; /* _n_kwonce on <self:AOnceExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwonce> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwonce> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AMinusExpr#n_expr2= for (self: AMinusExpr, AExpr) */
-void nit__parser_prod___AMinusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AOnceExpr#n_expr= for (self: AOnceExpr, AExpr) */
+void nit__parser_prod___AOnceExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AMinusExpr> */
+self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_expr].val = var_node; /* _n_expr on <self:AOnceExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -2885,84 +3291,112 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AMinusExpr#visit_all for (self: AMinusExpr, Visitor) */
-void nit__parser_prod___AMinusExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AOnceExpr#visit_all for (self: AOnceExpr, Visitor) */
+void nit__parser_prod___AOnceExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
+val* var /* : TKwonce */;
 val* var1 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AMinusExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_kwonce].val; /* _n_kwonce on <self:AOnceExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3690);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwonce");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3446);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AMinusExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_expr].val; /* _n_expr on <self:AOnceExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3691);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3447);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarshipExpr#init_astarshipexpr for (self: AStarshipExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AStarshipExpr___init_astarshipexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AOrExpr#init_aorexpr for (self: AOrExpr, nullable AExpr, nullable TKwor, nullable AExpr) */
+void nit__parser_prod___AOrExpr___init_aorexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TKwor */;
 val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AOrExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_expr2 = p1;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3700);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3528);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AStarshipExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AOrExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3701);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3529);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
+}
+}
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3530);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_n_op; /* _n_op on <self:AOrExpr> */
+if (var_n_op == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3531);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TKwor> */
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TKwor> */
+RET_LABEL3:(void)0;
 }
 }
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3702);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3532);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AStarshipExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AOrExpr> */
 if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3703);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3533);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarshipExpr#replace_child for (self: AStarshipExpr, ANode, nullable ANode) */
-void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AOrExpr#replace_child for (self: AOrExpr, ANode, nullable ANode) */
+void nit__parser_prod___AOrExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -2974,7 +3408,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -2982,13 +3416,21 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : AExpr */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarshipExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3708);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3538);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -3022,26 +3464,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3709);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3539);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AStarshipExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AStarshipExpr#n_expr= on <self:AStarshipExpr>*/
+nit__parser_prod___AOrExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AOrExpr#n_expr= on <self:AOrExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarshipExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AOrExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3712);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3542);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -3054,9 +3496,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwor */
+cltype14 = type_nit__TKwor.color;
+idtype15 = type_nit__TKwor.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -3068,36 +3510,96 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3713);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwor", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3543);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AStarshipExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AStarshipExpr#n_expr2= on <self:AStarshipExpr>*/
+nit__parser_prod___AOrExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AOrExpr#n_op= on <self:AOrExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3546);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
+if(var_new_child == NULL) {
+var23 = 0;
+} else {
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
+}
+}
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3547);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AOrExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AOrExpr#n_expr2= on <self:AOrExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+RET_LABEL:;
+}
+/* method parser_prod#AOrExpr#n_expr= for (self: AOrExpr, AExpr) */
+void nit__parser_prod___AOrExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_node; /* _n_expr on <self:AOrExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+RET_LABEL1:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarshipExpr#n_expr= for (self: AStarshipExpr, AExpr) */
-void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#AOrExpr#n_op= for (self: AOrExpr, Token) */
+void nit__parser_prod___AOrExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AStarshipExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_node; /* _n_op on <self:AOrExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarshipExpr#n_expr2= for (self: AStarshipExpr, AExpr) */
-void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AOrExpr#n_expr2= for (self: AOrExpr, AExpr) */
+void nit__parser_prod___AOrExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AStarshipExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AOrExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3106,84 +3608,122 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarshipExpr#visit_all for (self: AStarshipExpr, Visitor) */
-void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AOrExpr#visit_all for (self: AOrExpr, Visitor) */
+void nit__parser_prod___AOrExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarshipExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3732);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3571);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarshipExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AOrExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3733);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3572);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3573);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#AStarExpr#init_astarexpr for (self: AStarExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AStarExpr___init_astarexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AAndExpr#init_aandexpr for (self: AAndExpr, nullable AExpr, nullable TKwand, nullable AExpr) */
+void nit__parser_prod___AAndExpr___init_aandexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TKwand */;
 val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AAndExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_expr2 = p1;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3742);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3583);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AStarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AAndExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3743);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3584);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
+}
+}
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3585);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_n_op; /* _n_op on <self:AAndExpr> */
+if (var_n_op == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3586);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TKwand> */
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TKwand> */
+RET_LABEL3:(void)0;
 }
 }
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3744);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3587);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AStarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AAndExpr> */
 if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3745);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3588);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarExpr#replace_child for (self: AStarExpr, ANode, nullable ANode) */
-void nit__parser_prod___AStarExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AAndExpr#replace_child for (self: AAndExpr, ANode, nullable ANode) */
+void nit__parser_prod___AAndExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -3195,7 +3735,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -3203,13 +3743,21 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : AExpr */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AAndExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3750);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3593);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -3243,26 +3791,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3751);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3594);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AStarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AStarExpr#n_expr= on <self:AStarExpr>*/
+nit__parser_prod___AAndExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AAndExpr#n_expr= on <self:AAndExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AAndExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3754);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3597);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -3275,9 +3823,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwand */
+cltype14 = type_nit__TKwand.color;
+idtype15 = type_nit__TKwand.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -3289,23 +3837,70 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3755);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwand", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3598);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AStarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AStarExpr#n_expr2= on <self:AStarExpr>*/
+nit__parser_prod___AAndExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AAndExpr#n_op= on <self:AAndExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AAndExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3601);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
+if(var_new_child == NULL) {
+var23 = 0;
+} else {
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
+}
+}
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3602);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AAndExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AAndExpr#n_expr2= on <self:AAndExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarExpr#n_expr= for (self: AStarExpr, AExpr) */
-void nit__parser_prod___AStarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AAndExpr#n_expr= for (self: AAndExpr, AExpr) */
+void nit__parser_prod___AAndExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AStarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_node; /* _n_expr on <self:AAndExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3314,11 +3909,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarExpr#n_expr2= for (self: AStarExpr, AExpr) */
-void nit__parser_prod___AStarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AAndExpr#n_op= for (self: AAndExpr, Token) */
+void nit__parser_prod___AAndExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_node; /* _n_op on <self:AAndExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AAndExpr#n_expr2= for (self: AAndExpr, AExpr) */
+void nit__parser_prod___AAndExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AStarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AAndExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3327,84 +3935,145 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarExpr#visit_all for (self: AStarExpr, Visitor) */
-void nit__parser_prod___AStarExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AAndExpr#visit_all for (self: AAndExpr, Visitor) */
+void nit__parser_prod___AAndExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AAndExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3774);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3626);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AAndExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3775);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3627);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AAndExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3628);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#AStarstarExpr#init_astarstarexpr for (self: AStarstarExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___AStarstarExpr___init_astarstarexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AOrElseExpr#init_aorelseexpr for (self: AOrElseExpr, nullable AExpr, nullable TKwor, nullable TKwelse, nullable AExpr) */
+void nit__parser_prod___AOrElseExpr___init_aorelseexpr(val* self, val* p0, val* p1, val* p2, val* p3) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TKwor */;
+val* var_n_kwelse /* var n_kwelse: nullable TKwelse */;
 val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AOrElseExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_expr2 = p1;
+var_n_op = p1;
+var_n_kwelse = p2;
+var_n_expr2 = p3;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3784);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3639);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AStarstarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AOrElseExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3785);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3640);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
+}
+}
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3641);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_n_op; /* _n_op on <self:AOrElseExpr> */
+if (var_n_op == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3642);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TKwor> */
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TKwor> */
+RET_LABEL3:(void)0;
+}
+}
+if (unlikely(var_n_kwelse == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3643);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__AOrElseExpr___n_kwelse].val = var_n_kwelse; /* _n_kwelse on <self:AOrElseExpr> */
+if (var_n_kwelse == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3644);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwelse,self) on <var_n_kwelse:nullable TKwelse> */
+if (unlikely(var_n_kwelse == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_kwelse->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwelse:nullable TKwelse> */
+RET_LABEL4:(void)0;
 }
 }
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3786);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3645);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AStarstarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AOrElseExpr> */
 if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3787);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3646);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+RET_LABEL5:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarstarExpr#replace_child for (self: AStarstarExpr, ANode, nullable ANode) */
-void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AOrElseExpr#replace_child for (self: AOrElseExpr, ANode, nullable ANode) */
+void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -3416,7 +4085,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -3424,13 +4093,29 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : TKwelse */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
+val* var27 /* : AExpr */;
+short int var28 /* : Bool */;
+short int var30 /* : Bool */;
+short int var32 /* : Bool */;
+short int var33 /* : Bool */;
+int cltype34;
+int idtype35;
+const char* var_class_name36;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarstarExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3792);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3651);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -3453,80 +4138,174 @@ if (var1){
 cltype = type_nit__AExpr.color;
 idtype = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var6 = 0;
+var6 = 0;
+} else {
+if(cltype >= var_new_child->type->table_size) {
+var6 = 0;
+} else {
+var6 = var_new_child->type->type_table[cltype] == idtype;
+}
+}
+if (unlikely(!var6)) {
+var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3652);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AOrElseExpr#n_expr= on <self:AOrElseExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AOrElseExpr> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3655);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
+var12 = var7 == var_other;
+var10 = var12;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
+}
+}
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+if (var8){
+/* <var_new_child:nullable ANode> isa TKwor */
+cltype14 = type_nit__TKwor.color;
+idtype15 = type_nit__TKwor.id;
+if(var_new_child == NULL) {
+var13 = 0;
+} else {
+if(cltype14 >= var_new_child->type->table_size) {
+var13 = 0;
+} else {
+var13 = var_new_child->type->type_table[cltype14] == idtype15;
+}
+}
+if (unlikely(!var13)) {
+var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwor", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3656);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AOrElseExpr#n_op= on <self:AOrElseExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__AOrElseExpr___n_kwelse].val; /* _n_kwelse on <self:AOrElseExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwelse");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3659);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:TKwelse> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:TKwelse> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa TKwelse */
+cltype24 = type_nit__TKwelse.color;
+idtype25 = type_nit__TKwelse.id;
+if(var_new_child == NULL) {
+var23 = 0;
 } else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
 } else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 }
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3793);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwelse", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3660);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AStarstarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AStarstarExpr#n_expr= on <self:AStarstarExpr>*/
+nit__parser_prod___AOrElseExpr___n_kwelse_61d(self, var_new_child); /* Direct call parser_prod#AOrElseExpr#n_kwelse= on <self:AOrElseExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarstarExpr> */
-if (unlikely(var7 == NULL)) {
+var27 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrElseExpr> */
+if (unlikely(var27 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3796);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3663);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
-var12 = var7 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:AExpr> */
+var32 = var27 == var_other;
+var30 = var32;
+goto RET_LABEL31;
+RET_LABEL31:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var28 = var30;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
 }
 }
-if (var8){
+if (var28){
 /* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+cltype34 = type_nit__AExpr.color;
+idtype35 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var33 = 0;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype34 >= var_new_child->type->table_size) {
+var33 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var33 = var_new_child->type->type_table[cltype34] == idtype35;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3797);
-show_backtrace(1);
+if (unlikely(!var33)) {
+var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name36);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3664);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AStarstarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AStarstarExpr#n_expr2= on <self:AStarstarExpr>*/
+nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AOrElseExpr#n_expr2= on <self:AOrElseExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarstarExpr#n_expr= for (self: AStarstarExpr, AExpr) */
-void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AOrElseExpr#n_expr= for (self: AOrElseExpr, AExpr) */
+void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AStarstarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_node; /* _n_expr on <self:AOrElseExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3535,11 +4314,37 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarstarExpr#n_expr2= for (self: AStarstarExpr, AExpr) */
-void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AOrElseExpr#n_op= for (self: AOrElseExpr, Token) */
+void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_node; /* _n_op on <self:AOrElseExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AOrElseExpr#n_kwelse= for (self: AOrElseExpr, TKwelse) */
+void nit__parser_prod___AOrElseExpr___n_kwelse_61d(val* self, val* p0) {
+val* var_node /* var node: TKwelse */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__AOrElseExpr___n_kwelse].val = var_node; /* _n_kwelse on <self:AOrElseExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwelse> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwelse> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AOrElseExpr#n_expr2= for (self: AOrElseExpr, AExpr) */
+void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AStarstarExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AOrElseExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3548,84 +4353,132 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AStarstarExpr#visit_all for (self: AStarstarExpr, Visitor) */
-void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AOrElseExpr#visit_all for (self: AOrElseExpr, Visitor) */
+void nit__parser_prod___AOrElseExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : TKwelse */;
+val* var3 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarstarExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3816);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3693);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarstarExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AOrElseExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3817);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3694);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__AOrElseExpr___n_kwelse].val; /* _n_kwelse on <self:AOrElseExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwelse");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3695);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
+var3 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrElseExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3696);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#ASlashExpr#init_aslashexpr for (self: ASlashExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___ASlashExpr___init_aslashexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AImpliesExpr#init_aimpliesexpr for (self: AImpliesExpr, nullable AExpr, nullable TKwimplies, nullable AExpr) */
+void nit__parser_prod___AImpliesExpr___init_aimpliesexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TKwimplies */;
 val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AImpliesExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_expr2 = p1;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3826);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3706);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ASlashExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AImpliesExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3827);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3707);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
+}
+}
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3708);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_n_op; /* _n_op on <self:AImpliesExpr> */
+if (var_n_op == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3709);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TKwimplies> */
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TKwimplies> */
+RET_LABEL3:(void)0;
 }
 }
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3828);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3710);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ASlashExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AImpliesExpr> */
 if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3829);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3711);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
 if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASlashExpr#replace_child for (self: ASlashExpr, ANode, nullable ANode) */
-void nit__parser_prod___ASlashExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AImpliesExpr#replace_child for (self: AImpliesExpr, ANode, nullable ANode) */
+void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -3637,7 +4490,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -3645,13 +4498,21 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : AExpr */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASlashExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3834);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3716);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -3685,26 +4546,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3835);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3717);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ASlashExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ASlashExpr#n_expr= on <self:ASlashExpr>*/
+nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AImpliesExpr#n_expr= on <self:AImpliesExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ASlashExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AImpliesExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3838);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3720);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -3717,9 +4578,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwimplies */
+cltype14 = type_nit__TKwimplies.color;
+idtype15 = type_nit__TKwimplies.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -3731,23 +4592,70 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3839);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwimplies", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3721);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ASlashExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ASlashExpr#n_expr2= on <self:ASlashExpr>*/
+nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AImpliesExpr#n_op= on <self:AImpliesExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3724);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
+if(var_new_child == NULL) {
+var23 = 0;
+} else {
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
+}
+}
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3725);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AImpliesExpr#n_expr2= on <self:AImpliesExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASlashExpr#n_expr= for (self: ASlashExpr, AExpr) */
-void nit__parser_prod___ASlashExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AImpliesExpr#n_expr= for (self: AImpliesExpr, AExpr) */
+void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ASlashExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val = var_node; /* _n_expr on <self:AImpliesExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3756,11 +4664,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASlashExpr#n_expr2= for (self: ASlashExpr, AExpr) */
-void nit__parser_prod___ASlashExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#AImpliesExpr#n_op= for (self: AImpliesExpr, Token) */
+void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val = var_node; /* _n_op on <self:AImpliesExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AImpliesExpr#n_expr2= for (self: AImpliesExpr, AExpr) */
+void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ABinBoolExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ASlashExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AImpliesExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3769,87 +4690,102 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASlashExpr#visit_all for (self: ASlashExpr, Visitor) */
-void nit__parser_prod___ASlashExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AImpliesExpr#visit_all for (self: AImpliesExpr, Visitor) */
+void nit__parser_prod___AImpliesExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASlashExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3858);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3749);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ASlashExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_op].val; /* _n_op on <self:AImpliesExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3859);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3750);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3751);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#APercentExpr#init_apercentexpr for (self: APercentExpr, nullable AExpr, nullable AExpr) */
-void nit__parser_prod___APercentExpr___init_apercentexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#ANotExpr#init_anotexpr for (self: ANotExpr, nullable TKwnot, nullable AExpr) */
+void nit__parser_prod___ANotExpr___init_anotexpr(val* self, val* p0, val* p1) {
+val* var_n_kwnot /* var n_kwnot: nullable TKwnot */;
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-var_n_expr = p0;
-var_n_expr2 = p1;
-if (unlikely(var_n_expr == NULL)) {
+{
+{ /* Inline kernel#Object#init (self) on <self:ANotExpr> */
+RET_LABEL1:(void)0;
+}
+}
+var_n_kwnot = p0;
+var_n_expr = p1;
+if (unlikely(var_n_kwnot == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3868);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3760);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:APercentExpr> */
-if (var_n_expr == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val = var_n_kwnot; /* _n_kwnot on <self:ANotExpr> */
+if (var_n_kwnot == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3869);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3761);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
-if (unlikely(var_n_expr == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwnot,self) on <var_n_kwnot:nullable TKwnot> */
+if (unlikely(var_n_kwnot == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
+var_n_kwnot->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwnot:nullable TKwnot> */
+RET_LABEL2:(void)0;
 }
-if (unlikely(var_n_expr2 == NULL)) {
+}
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3870);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3762);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:APercentExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ANotExpr> */
+if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3871);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3763);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
-RET_LABEL2:(void)0;
+var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+RET_LABEL3:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#APercentExpr#replace_child for (self: APercentExpr, ANode, nullable ANode) */
-void nit__parser_prod___APercentExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ANotExpr#replace_child for (self: ANotExpr, ANode, nullable ANode) */
+void nit__parser_prod___ANotExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : AExpr */;
+val* var /* : TKwnot */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -3868,17 +4804,17 @@ int idtype15;
 const char* var_class_name16;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:APercentExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val; /* _n_kwnot on <self:ANotExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3876);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwnot");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3768);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwnot> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwnot> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -3891,9 +4827,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype = type_nit__AExpr.color;
-idtype = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TKwnot */
+cltype = type_nit__TKwnot.color;
+idtype = type_nit__TKwnot.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -3905,21 +4841,21 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3877);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwnot", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3769);
+fatal_exit(1);
 }
 {
-nit__parser_prod___APercentExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#APercentExpr#n_expr= on <self:APercentExpr>*/
+nit__parser_prod___ANotExpr___n_kwnot_61d(self, var_new_child); /* Direct call parser_prod#ANotExpr#n_kwnot= on <self:ANotExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:APercentExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3880);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3772);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
@@ -3953,35 +4889,35 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3881);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3773);
+fatal_exit(1);
 }
 {
-nit__parser_prod___APercentExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#APercentExpr#n_expr2= on <self:APercentExpr>*/
+nit__parser_prod___ANotExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#ANotExpr#n_expr= on <self:ANotExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#APercentExpr#n_expr= for (self: APercentExpr, AExpr) */
-void nit__parser_prod___APercentExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
-val* var_node /* var node: AExpr */;
+/* method parser_prod#ANotExpr#n_kwnot= for (self: ANotExpr, TKwnot) */
+void nit__parser_prod___ANotExpr___n_kwnot_61d(val* self, val* p0) {
+val* var_node /* var node: TKwnot */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:APercentExpr> */
+self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val = var_node; /* _n_kwnot on <self:ANotExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwnot> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwnot> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#APercentExpr#n_expr2= for (self: APercentExpr, AExpr) */
-void nit__parser_prod___APercentExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+/* method parser_prod#ANotExpr#n_expr= for (self: ANotExpr, AExpr) */
+void nit__parser_prod___ANotExpr___n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:APercentExpr> */
+self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val = var_node; /* _n_expr on <self:ANotExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -3990,87 +4926,115 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#APercentExpr#visit_all for (self: APercentExpr, Visitor) */
-void nit__parser_prod___APercentExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#ANotExpr#visit_all for (self: ANotExpr, Visitor) */
+void nit__parser_prod___ANotExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : AExpr */;
+val* var /* : TKwnot */;
 val* var1 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:APercentExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_kwnot].val; /* _n_kwnot on <self:ANotExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3900);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwnot");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3792);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:APercentExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3901);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3793);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#AUminusExpr#init_auminusexpr for (self: AUminusExpr, nullable TMinus, nullable AExpr) */
-void nit__parser_prod___AUminusExpr___init_auminusexpr(val* self, val* p0, val* p1) {
-val* var_n_minus /* var n_minus: nullable TMinus */;
+/* method parser_prod#AEqExpr#init_aeqexpr for (self: AEqExpr, nullable AExpr, nullable TEq, nullable AExpr) */
+void nit__parser_prod___AEqExpr___init_aeqexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
-var_n_minus = p0;
-var_n_expr = p1;
-if (unlikely(var_n_minus == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3910);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__AUminusExpr___n_minus].val = var_n_minus; /* _n_minus on <self:AUminusExpr> */
-if (var_n_minus == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3911);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_minus,self) on <var_n_minus:nullable TMinus> */
-if (unlikely(var_n_minus == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_minus->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_minus:nullable TMinus> */
+val* var_n_op /* var n_op: nullable TEq */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AEqExpr> */
 RET_LABEL1:(void)0;
 }
 }
+var_n_expr = p0;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3912);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3803);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AUminusExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AEqExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3913);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3804);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
 RET_LABEL2:(void)0;
 }
 }
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3805);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AEqExpr> */
+if (var_n_op == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3806);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TEq> */
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TEq> */
+RET_LABEL3:(void)0;
+}
+}
+if (unlikely(var_n_expr2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3807);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AEqExpr> */
+if (var_n_expr2 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3808);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
+}
+}
 RET_LABEL:;
 }
-/* method parser_prod#AUminusExpr#replace_child for (self: AUminusExpr, ANode, nullable ANode) */
-void nit__parser_prod___AUminusExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AEqExpr#replace_child for (self: AEqExpr, ANode, nullable ANode) */
+void nit__parser_prod___AEqExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : TMinus */;
+val* var /* : AExpr */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -4079,7 +5043,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExpr */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -4087,19 +5051,27 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : AExpr */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AUminusExpr___n_minus].val; /* _n_minus on <self:AUminusExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AEqExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_minus");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3918);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3813);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:TMinus> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TMinus> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -4112,9 +5084,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa TMinus */
-cltype = type_nit__TMinus.color;
-idtype = type_nit__TMinus.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype = type_nit__AExpr.color;
+idtype = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -4126,27 +5098,27 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TMinus", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3919);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3814);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AUminusExpr___n_minus_61d(self, var_new_child); /* Direct call parser_prod#AUminusExpr#n_minus= on <self:AUminusExpr>*/
+nit__parser_prod___AEqExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AEqExpr#n_expr= on <self:AEqExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AUminusExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AEqExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3922);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3817);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExpr> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExpr> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -4159,9 +5131,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype14 = type_nit__AExpr.color;
-idtype15 = type_nit__AExpr.id;
+/* <var_new_child:nullable ANode> isa TEq */
+cltype14 = type_nit__TEq.color;
+idtype15 = type_nit__TEq.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -4173,36 +5145,96 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3923);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TEq", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3818);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AEqExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AEqExpr#n_op= on <self:AEqExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AEqExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3821);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
+if(var_new_child == NULL) {
+var23 = 0;
+} else {
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
+}
+}
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3822);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AUminusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AUminusExpr#n_expr= on <self:AUminusExpr>*/
+nit__parser_prod___AEqExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AEqExpr#n_expr2= on <self:AEqExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AUminusExpr#n_minus= for (self: AUminusExpr, TMinus) */
-void nit__parser_prod___AUminusExpr___n_minus_61d(val* self, val* p0) {
-val* var_node /* var node: TMinus */;
+/* method parser_prod#AEqExpr#n_expr= for (self: AEqExpr, AExpr) */
+void nit__parser_prod___AEqExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AEqExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AEqExpr#n_op= for (self: AEqExpr, Token) */
+void nit__parser_prod___AEqExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AUminusExpr___n_minus].val = var_node; /* _n_minus on <self:AUminusExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AEqExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TMinus> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TMinus> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AUminusExpr#n_expr= for (self: AUminusExpr, AExpr) */
-void nit__parser_prod___AUminusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AEqExpr#n_expr2= for (self: AEqExpr, AExpr) */
+void nit__parser_prod___AEqExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AUminusExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AEqExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -4211,147 +5243,125 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AUminusExpr#visit_all for (self: AUminusExpr, Visitor) */
-void nit__parser_prod___AUminusExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AEqExpr#visit_all for (self: AEqExpr, Visitor) */
+void nit__parser_prod___AEqExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : TMinus */;
-val* var1 /* : AExpr */;
+val* var /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AUminusExpr___n_minus].val; /* _n_minus on <self:AUminusExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AEqExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_minus");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3942);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3846);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AUminusExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AEqExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3943);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3847);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-RET_LABEL:;
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AEqExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3848);
+fatal_exit(1);
 }
-/* method parser_prod#ANewExpr#init_anewexpr for (self: ANewExpr, nullable TKwnew, nullable AType, nullable TId, nullable AExprs) */
-void nit__parser_prod___ANewExpr___init_anewexpr(val* self, val* p0, val* p1, val* p2, val* p3) {
-val* var_n_kwnew /* var n_kwnew: nullable TKwnew */;
-val* var_n_type /* var n_type: nullable AType */;
-val* var_n_id /* var n_id: nullable TId */;
-val* var_n_args /* var n_args: nullable AExprs */;
-val* var /* : null */;
-short int var3 /* : Bool */;
-short int var4 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var6 /* : Bool */;
-short int var7 /* : Bool */;
-var_n_kwnew = p0;
-var_n_type = p1;
-var_n_id = p2;
-var_n_args = p3;
-if (unlikely(var_n_kwnew == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3954);
-show_backtrace(1);
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_kwnew].val = var_n_kwnew; /* _n_kwnew on <self:ANewExpr> */
-if (var_n_kwnew == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3955);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_kwnew,self) on <var_n_kwnew:nullable TKwnew> */
-if (unlikely(var_n_kwnew == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+RET_LABEL:;
 }
-var_n_kwnew->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwnew:nullable TKwnew> */
+/* method parser_prod#ANeExpr#init_aneexpr for (self: ANeExpr, nullable AExpr, nullable TNe, nullable AExpr) */
+void nit__parser_prod___ANeExpr___init_aneexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TNe */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:ANeExpr> */
 RET_LABEL1:(void)0;
 }
 }
-if (unlikely(var_n_type == NULL)) {
+var_n_expr = p0;
+var_n_op = p1;
+var_n_expr2 = p2;
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3956);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3858);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_type].val = var_n_type; /* _n_type on <self:ANewExpr> */
-if (var_n_type == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ANeExpr> */
+if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3957);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3859);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_type,self) on <var_n_type:nullable AType> */
-if (unlikely(var_n_type == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_type->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_type:nullable AType> */
+var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
 RET_LABEL2:(void)0;
 }
 }
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_id].val = var_n_id; /* _n_id on <self:ANewExpr> */
-var = NULL;
-if (var_n_id == NULL) {
-var3 = 0; /* is null */
-} else {
-var3 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_n_id,var) on <var_n_id:nullable TId> */
-var_other = var;
-{
-var6 = ((short int (*)(val* self, val* p0))(var_n_id->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_id, var_other) /* == on <var_n_id:nullable TId(TId)>*/;
-}
-var7 = !var6;
-var4 = var7;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
-}
-var3 = var4;
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3860);
+fatal_exit(1);
 }
-if (var3){
-{
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId(TId)> */
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId(TId)> */
-RET_LABEL8:(void)0;
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:ANeExpr> */
+if (var_n_op == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3861);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TNe> */
+if (unlikely(var_n_op == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TNe> */
+RET_LABEL3:(void)0;
 }
-} else {
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3960);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3862);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_args].val = var_n_args; /* _n_args on <self:ANewExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ANeExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3961);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3863);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
-RET_LABEL9:(void)0;
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ANewExpr#replace_child for (self: ANewExpr, ANode, nullable ANode) */
-void nit__parser_prod___ANewExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ANeExpr#replace_child for (self: ANeExpr, ANode, nullable ANode) */
+void nit__parser_prod___ANeExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : TKwnew */;
+val* var /* : AExpr */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -4360,7 +5370,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AType */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -4368,36 +5378,27 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : nullable TId */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
-short int var19 /* : Bool */;
-short int var21 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
 short int var23 /* : Bool */;
-short int var24 /* : Bool */;
-int cltype25;
-int idtype26;
-const char* var_class_name27;
-val* var28 /* : AExprs */;
-short int var29 /* : Bool */;
-short int var31 /* : Bool */;
-short int var33 /* : Bool */;
-short int var34 /* : Bool */;
-int cltype35;
-int idtype36;
-const char* var_class_name37;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_kwnew].val; /* _n_kwnew on <self:ANewExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ANeExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwnew");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3966);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3868);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:TKwnew> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TKwnew> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -4410,9 +5411,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa TKwnew */
-cltype = type_nit__TKwnew.color;
-idtype = type_nit__TKwnew.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype = type_nit__AExpr.color;
+idtype = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -4424,27 +5425,27 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwnew", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3967);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3869);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ANewExpr___n_kwnew_61d(self, var_new_child); /* Direct call parser_prod#ANewExpr#n_kwnew= on <self:ANewExpr>*/
+nit__parser_prod___ANeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ANeExpr#n_expr= on <self:ANeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_type].val; /* _n_type on <self:ANewExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ANeExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3970);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3872);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AType> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AType> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -4457,9 +5458,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AType */
-cltype14 = type_nit__AType.color;
-idtype15 = type_nit__AType.id;
+/* <var_new_child:nullable ANode> isa TNe */
+cltype14 = type_nit__TNe.color;
+idtype15 = type_nit__TNe.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -4471,283 +5472,220 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AType", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3971);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ANewExpr___n_type_61d(self, var_new_child); /* Direct call parser_prod#ANewExpr#n_type= on <self:ANewExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var17 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_id].val; /* _n_id on <self:ANewExpr> */
-if (var17 == NULL) {
-var18 = 0; /* <var_old_child:ANode> cannot be null */
-} else {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:nullable TId> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:nullable TId(TId)> */
-var23 = var17 == var_other;
-var21 = var23;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
-}
-}
-var19 = var21;
-goto RET_LABEL20;
-RET_LABEL20:(void)0;
-}
-var18 = var19;
-}
-if (var18){
-/* <var_new_child:nullable ANode> isa nullable TId */
-cltype25 = type_nullable__nit__TId.color;
-idtype26 = type_nullable__nit__TId.id;
-if(var_new_child == NULL) {
-var24 = 1;
-} else {
-if(cltype25 >= var_new_child->type->table_size) {
-var24 = 0;
-} else {
-var24 = var_new_child->type->type_table[cltype25] == idtype26;
-}
-}
-if (unlikely(!var24)) {
-var_class_name27 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable TId", var_class_name27);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3975);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TNe", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3873);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ANewExpr___n_id_61d(self, var_new_child); /* Direct call parser_prod#ANewExpr#n_id= on <self:ANewExpr>*/
+nit__parser_prod___ANeExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#ANeExpr#n_op= on <self:ANeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var28 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_args].val; /* _n_args on <self:ANewExpr> */
-if (unlikely(var28 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3978);
-show_backtrace(1);
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ANeExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3876);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var28,var_old_child) on <var28:AExprs> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var28,var_other) on <var28:AExprs> */
-var33 = var28 == var_other;
-var31 = var33;
-goto RET_LABEL32;
-RET_LABEL32:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
 }
-var29 = var31;
-goto RET_LABEL30;
-RET_LABEL30:(void)0;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
 }
-if (var29){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype35 = type_nit__AExprs.color;
-idtype36 = type_nit__AExprs.id;
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var34 = 0;
+var23 = 0;
 } else {
-if(cltype35 >= var_new_child->type->table_size) {
-var34 = 0;
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
 } else {
-var34 = var_new_child->type->type_table[cltype35] == idtype36;
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 }
-if (unlikely(!var34)) {
-var_class_name37 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name37);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3979);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3877);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ANewExpr___n_args_61d(self, var_new_child); /* Direct call parser_prod#ANewExpr#n_args= on <self:ANewExpr>*/
+nit__parser_prod___ANeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ANeExpr#n_expr2= on <self:ANeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ANewExpr#n_kwnew= for (self: ANewExpr, TKwnew) */
-void nit__parser_prod___ANewExpr___n_kwnew_61d(val* self, val* p0) {
-val* var_node /* var node: TKwnew */;
+/* method parser_prod#ANeExpr#n_expr= for (self: ANeExpr, AExpr) */
+void nit__parser_prod___ANeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_kwnew].val = var_node; /* _n_kwnew on <self:ANewExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ANeExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwnew> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwnew> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ANewExpr#n_type= for (self: ANewExpr, AType) */
-void nit__parser_prod___ANewExpr___n_type_61d(val* self, val* p0) {
-val* var_node /* var node: AType */;
+/* method parser_prod#ANeExpr#n_op= for (self: ANeExpr, Token) */
+void nit__parser_prod___ANeExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_type].val = var_node; /* _n_type on <self:ANewExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:ANeExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AType> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AType> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ANewExpr#n_id= for (self: ANewExpr, nullable TId) */
-void nit__parser_prod___ANewExpr___n_id_61d(val* self, val* p0) {
-val* var_node /* var node: nullable TId */;
-val* var /* : null */;
-short int var1 /* : Bool */;
-short int var2 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_id].val = var_node; /* _n_id on <self:ANewExpr> */
-var = NULL;
-if (var_node == NULL) {
-var1 = 0; /* is null */
-} else {
-var1 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_node,var) on <var_node:nullable TId> */
-var_other = var;
-{
-var4 = ((short int (*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other) /* == on <var_node:nullable TId(TId)>*/;
-}
-var5 = !var4;
-var2 = var5;
-goto RET_LABEL3;
-RET_LABEL3:(void)0;
-}
-var1 = var2;
-}
-if (var1){
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable TId(TId)> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable TId(TId)> */
-RET_LABEL6:(void)0;
-}
-}
-} else {
-}
-RET_LABEL:;
-}
-/* method parser_prod#ANewExpr#n_args= for (self: ANewExpr, AExprs) */
-void nit__parser_prod___ANewExpr___n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
+/* method parser_prod#ANeExpr#n_expr2= for (self: ANeExpr, AExpr) */
+void nit__parser_prod___ANeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_args].val = var_node; /* _n_args on <self:ANewExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ANeExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ANewExpr#visit_all for (self: ANewExpr, Visitor) */
-void nit__parser_prod___ANewExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#ANeExpr#visit_all for (self: ANeExpr, Visitor) */
+void nit__parser_prod___ANeExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : TKwnew */;
-val* var1 /* : AType */;
-val* var2 /* : nullable TId */;
-val* var3 /* : AExprs */;
+val* var /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_kwnew].val; /* _n_kwnew on <self:ANewExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ANeExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwnew");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4008);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3901);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_type].val; /* _n_type on <self:ANewExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ANeExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4009);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3902);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_id].val; /* _n_id on <self:ANewExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ANeExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3903);
+fatal_exit(1);
+}
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_args].val; /* _n_args on <self:ANewExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4011);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method parser_prod#ALtExpr#init_altexpr for (self: ALtExpr, nullable AExpr, nullable TLt, nullable AExpr) */
+void nit__parser_prod___ALtExpr___init_altexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TLt */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
 {
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline kernel#Object#init (self) on <self:ALtExpr> */
+RET_LABEL1:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#AAttrExpr#init_aattrexpr for (self: AAttrExpr, nullable AExpr, nullable TAttrid) */
-void nit__parser_prod___AAttrExpr___init_aattrexpr(val* self, val* p0, val* p1) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_id /* var n_id: nullable TAttrid */;
 var_n_expr = p0;
-var_n_id = p1;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4020);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3913);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AAttrExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ALtExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4021);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3914);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_id == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4022);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3915);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val = var_n_id; /* _n_id on <self:AAttrExpr> */
-if (var_n_id == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:ALtExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4023);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3916);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TAttrid> */
-if (unlikely(var_n_id == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TLt> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TAttrid> */
-RET_LABEL2:(void)0;
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TLt> */
+RET_LABEL3:(void)0;
+}
+}
+if (unlikely(var_n_expr2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3917);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ALtExpr> */
+if (var_n_expr2 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3918);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrExpr#replace_child for (self: AAttrExpr, ANode, nullable ANode) */
-void nit__parser_prod___AAttrExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ALtExpr#replace_child for (self: ALtExpr, ANode, nullable ANode) */
+void nit__parser_prod___ALtExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -4759,7 +5697,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TAttrid */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -4767,13 +5705,21 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : AExpr */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALtExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4028);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3923);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -4807,26 +5753,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4029);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3924);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrExpr___nit__parser_nodes__AAttrFormExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AAttrExpr#n_expr= on <self:AAttrExpr>*/
+nit__parser_prod___ALtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ALtExpr#n_expr= on <self:ALtExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ALtExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4032);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3927);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TAttrid> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TAttrid> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -4838,38 +5784,85 @@ goto RET_LABEL9;
 RET_LABEL9:(void)0;
 }
 }
-if (var8){
-/* <var_new_child:nullable ANode> isa TAttrid */
-cltype14 = type_nit__TAttrid.color;
-idtype15 = type_nit__TAttrid.id;
+if (var8){
+/* <var_new_child:nullable ANode> isa TLt */
+cltype14 = type_nit__TLt.color;
+idtype15 = type_nit__TLt.id;
+if(var_new_child == NULL) {
+var13 = 0;
+} else {
+if(cltype14 >= var_new_child->type->table_size) {
+var13 = 0;
+} else {
+var13 = var_new_child->type->type_table[cltype14] == idtype15;
+}
+}
+if (unlikely(!var13)) {
+var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TLt", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3928);
+fatal_exit(1);
+}
+{
+nit__parser_prod___ALtExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#ALtExpr#n_op= on <self:ALtExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALtExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3931);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var23 = 0;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAttrid", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4033);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3932);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrExpr___nit__parser_nodes__AAttrFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#AAttrExpr#n_id= on <self:AAttrExpr>*/
+nit__parser_prod___ALtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ALtExpr#n_expr2= on <self:ALtExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrExpr#n_expr= for (self: AAttrExpr, AExpr) */
-void nit__parser_prod___AAttrExpr___nit__parser_nodes__AAttrFormExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#ALtExpr#n_expr= for (self: ALtExpr, AExpr) */
+void nit__parser_prod___ALtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val = var_node; /* _n_expr on <self:AAttrExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ALtExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -4878,143 +5871,148 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrExpr#n_id= for (self: AAttrExpr, TAttrid) */
-void nit__parser_prod___AAttrExpr___nit__parser_nodes__AAttrFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TAttrid */;
+/* method parser_prod#ALtExpr#n_op= for (self: ALtExpr, Token) */
+void nit__parser_prod___ALtExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:ALtExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#ALtExpr#n_expr2= for (self: ALtExpr, AExpr) */
+void nit__parser_prod___ALtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val = var_node; /* _n_id on <self:AAttrExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ALtExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAttrid> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAttrid> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrExpr#visit_all for (self: AAttrExpr, Visitor) */
-void nit__parser_prod___AAttrExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#ALtExpr#visit_all for (self: ALtExpr, Visitor) */
+void nit__parser_prod___ALtExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TAttrid */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALtExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4052);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3956);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ALtExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4053);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3957);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALtExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3958);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#AAttrAssignExpr#init_aattrassignexpr for (self: AAttrAssignExpr, nullable AExpr, nullable TAttrid, nullable TAssign, nullable AExpr) */
-void nit__parser_prod___AAttrAssignExpr___init_aattrassignexpr(val* self, val* p0, val* p1, val* p2, val* p3) {
+/* method parser_prod#ALeExpr#init_aleexpr for (self: ALeExpr, nullable AExpr, nullable TLe, nullable AExpr) */
+void nit__parser_prod___ALeExpr___init_aleexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_id /* var n_id: nullable TAttrid */;
-val* var_n_assign /* var n_assign: nullable TAssign */;
-val* var_n_value /* var n_value: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TLe */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:ALeExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_id = p1;
-var_n_assign = p2;
-var_n_value = p3;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4064);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3968);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AAttrAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ALeExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4065);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3969);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4066);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val = var_n_id; /* _n_id on <self:AAttrAssignExpr> */
-if (var_n_id == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4067);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TAttrid> */
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TAttrid> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_assign == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4068);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3970);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_n_assign; /* _n_assign on <self:AAttrAssignExpr> */
-if (var_n_assign == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:ALeExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4069);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3971);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign,self) on <var_n_assign:nullable TAssign> */
-if (unlikely(var_n_assign == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TLe> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign:nullable TAssign> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TLe> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4070);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3972);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_n_value; /* _n_value on <self:AAttrAssignExpr> */
-if (var_n_value == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ALeExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4071);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3973);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrAssignExpr#replace_child for (self: AAttrAssignExpr, ANode, nullable ANode) */
-void nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ALeExpr#replace_child for (self: ALeExpr, ANode, nullable ANode) */
+void nit__parser_prod___ALeExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -5026,7 +6024,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TAttrid */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -5034,7 +6032,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : TAssign */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -5042,21 +6040,13 @@ short int var23 /* : Bool */;
 int cltype24;
 int idtype25;
 const char* var_class_name26;
-val* var27 /* : AExpr */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-int cltype34;
-int idtype35;
-const char* var_class_name36;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALeExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4076);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3978);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -5090,26 +6080,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4077);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3979);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAttrFormExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AAttrAssignExpr#n_expr= on <self:AAttrAssignExpr>*/
+nit__parser_prod___ALeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ALeExpr#n_expr= on <self:ALeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrAssignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ALeExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4080);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3982);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TAttrid> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TAttrid> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -5122,9 +6112,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TAttrid */
-cltype14 = type_nit__TAttrid.color;
-idtype15 = type_nit__TAttrid.id;
+/* <var_new_child:nullable ANode> isa TLe */
+cltype14 = type_nit__TLe.color;
+idtype15 = type_nit__TLe.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -5136,27 +6126,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAttrid", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4081);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TLe", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3983);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAttrFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#AAttrAssignExpr#n_id= on <self:AAttrAssignExpr>*/
+nit__parser_prod___ALeExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#ALeExpr#n_op= on <self:ALeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:AAttrAssignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALeExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4084);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3986);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:TAssign> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:TAssign> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -5169,9 +6159,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa TAssign */
-cltype24 = type_nit__TAssign.color;
-idtype25 = type_nit__TAssign.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -5183,70 +6173,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAssign", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4085);
-show_backtrace(1);
-}
-{
-nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(self, var_new_child); /* Direct call parser_prod#AAttrAssignExpr#n_assign= on <self:AAttrAssignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var27 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:AAttrAssignExpr> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4088);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:AExpr> */
-var32 = var27 == var_other;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-}
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-}
-if (var28){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype34 = type_nit__AExpr.color;
-idtype35 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var33 = 0;
-} else {
-if(cltype34 >= var_new_child->type->table_size) {
-var33 = 0;
-} else {
-var33 = var_new_child->type->type_table[cltype34] == idtype35;
-}
-}
-if (unlikely(!var33)) {
-var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name36);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4089);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 3987);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#AAttrAssignExpr#n_value= on <self:AAttrAssignExpr>*/
+nit__parser_prod___ALeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ALeExpr#n_expr2= on <self:ALeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrAssignExpr#n_expr= for (self: AAttrAssignExpr, AExpr) */
-void nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAttrFormExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#ALeExpr#n_expr= for (self: ALeExpr, AExpr) */
+void nit__parser_prod___ALeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val = var_node; /* _n_expr on <self:AAttrAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ALeExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -5255,37 +6198,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrAssignExpr#n_id= for (self: AAttrAssignExpr, TAttrid) */
-void nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAttrFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TAttrid */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val = var_node; /* _n_id on <self:AAttrAssignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAttrid> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAttrid> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AAttrAssignExpr#n_assign= for (self: AAttrAssignExpr, TAssign) */
-void nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(val* self, val* p0) {
-val* var_node /* var node: TAssign */;
+/* method parser_prod#ALeExpr#n_op= for (self: ALeExpr, Token) */
+void nit__parser_prod___ALeExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_node; /* _n_assign on <self:AAttrAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:ALeExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAssign> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAssign> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrAssignExpr#n_value= for (self: AAttrAssignExpr, AExpr) */
-void nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#ALeExpr#n_expr2= for (self: ALeExpr, AExpr) */
+void nit__parser_prod___ALeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_node; /* _n_value on <self:AAttrAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ALeExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -5294,150 +6224,122 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrAssignExpr#visit_all for (self: AAttrAssignExpr, Visitor) */
-void nit__parser_prod___AAttrAssignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#ALeExpr#visit_all for (self: ALeExpr, Visitor) */
+void nit__parser_prod___ALeExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TAttrid */;
-val* var2 /* : TAssign */;
-val* var3 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALeExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4118);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4011);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrAssignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ALeExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4119);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4012);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:AAttrAssignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALeExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4120);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4013);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:AAttrAssignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4121);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method parser_prod#ALlExpr#init_allexpr for (self: ALlExpr, nullable AExpr, nullable TLl, nullable AExpr) */
+void nit__parser_prod___ALlExpr___init_allexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TLl */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
 {
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline kernel#Object#init (self) on <self:ALlExpr> */
+RET_LABEL1:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#AAttrReassignExpr#init_aattrreassignexpr for (self: AAttrReassignExpr, nullable AExpr, nullable TAttrid, nullable AAssignOp, nullable AExpr) */
-void nit__parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val* self, val* p0, val* p1, val* p2, val* p3) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_id /* var n_id: nullable TAttrid */;
-val* var_n_assign_op /* var n_assign_op: nullable AAssignOp */;
-val* var_n_value /* var n_value: nullable AExpr */;
 var_n_expr = p0;
-var_n_id = p1;
-var_n_assign_op = p2;
-var_n_value = p3;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4132);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4023);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AAttrReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ALlExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4133);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4024);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4134);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val = var_n_id; /* _n_id on <self:AAttrReassignExpr> */
-if (var_n_id == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4135);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TAttrid> */
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TAttrid> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_assign_op == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4136);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4025);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_n_assign_op; /* _n_assign_op on <self:AAttrReassignExpr> */
-if (var_n_assign_op == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:ALlExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4137);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4026);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign_op,self) on <var_n_assign_op:nullable AAssignOp> */
-if (unlikely(var_n_assign_op == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TLl> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign_op:nullable AAssignOp> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TLl> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4138);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4027);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_n_value; /* _n_value on <self:AAttrReassignExpr> */
-if (var_n_value == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ALlExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4139);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4028);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrReassignExpr#replace_child for (self: AAttrReassignExpr, ANode, nullable ANode) */
-void nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ALlExpr#replace_child for (self: ALlExpr, ANode, nullable ANode) */
+void nit__parser_prod___ALlExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -5449,7 +6351,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TAttrid */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -5457,7 +6359,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : AAssignOp */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -5465,21 +6367,13 @@ short int var23 /* : Bool */;
 int cltype24;
 int idtype25;
 const char* var_class_name26;
-val* var27 /* : AExpr */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-int cltype34;
-int idtype35;
-const char* var_class_name36;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALlExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4144);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4033);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -5513,26 +6407,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4145);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4034);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AAttrFormExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AAttrReassignExpr#n_expr= on <self:AAttrReassignExpr>*/
+nit__parser_prod___ALlExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ALlExpr#n_expr= on <self:ALlExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrReassignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ALlExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4148);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4037);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TAttrid> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TAttrid> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -5545,9 +6439,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TAttrid */
-cltype14 = type_nit__TAttrid.color;
-idtype15 = type_nit__TAttrid.id;
+/* <var_new_child:nullable ANode> isa TLl */
+cltype14 = type_nit__TLl.color;
+idtype15 = type_nit__TLl.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -5559,27 +6453,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAttrid", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4149);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TLl", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4038);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AAttrFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#AAttrReassignExpr#n_id= on <self:AAttrReassignExpr>*/
+nit__parser_prod___ALlExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#ALlExpr#n_op= on <self:ALlExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:AAttrReassignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALlExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4152);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4041);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AAssignOp> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AAssignOp> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -5591,85 +6485,38 @@ goto RET_LABEL19;
 RET_LABEL19:(void)0;
 }
 }
-if (var18){
-/* <var_new_child:nullable ANode> isa AAssignOp */
-cltype24 = type_nit__AAssignOp.color;
-idtype25 = type_nit__AAssignOp.id;
-if(var_new_child == NULL) {
-var23 = 0;
-} else {
-if(cltype24 >= var_new_child->type->table_size) {
-var23 = 0;
-} else {
-var23 = var_new_child->type->type_table[cltype24] == idtype25;
-}
-}
-if (unlikely(!var23)) {
-var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AAssignOp", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4153);
-show_backtrace(1);
-}
-{
-nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(self, var_new_child); /* Direct call parser_prod#AAttrReassignExpr#n_assign_op= on <self:AAttrReassignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var27 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:AAttrReassignExpr> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4156);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:AExpr> */
-var32 = var27 == var_other;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-}
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-}
-if (var28){
+if (var18){
 /* <var_new_child:nullable ANode> isa AExpr */
-cltype34 = type_nit__AExpr.color;
-idtype35 = type_nit__AExpr.id;
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var33 = 0;
+var23 = 0;
 } else {
-if(cltype34 >= var_new_child->type->table_size) {
-var33 = 0;
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
 } else {
-var33 = var_new_child->type->type_table[cltype34] == idtype35;
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 }
-if (unlikely(!var33)) {
-var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name36);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4157);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4042);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#AAttrReassignExpr#n_value= on <self:AAttrReassignExpr>*/
+nit__parser_prod___ALlExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ALlExpr#n_expr2= on <self:ALlExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrReassignExpr#n_expr= for (self: AAttrReassignExpr, AExpr) */
-void nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AAttrFormExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#ALlExpr#n_expr= for (self: ALlExpr, AExpr) */
+void nit__parser_prod___ALlExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val = var_node; /* _n_expr on <self:AAttrReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ALlExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -5678,37 +6525,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrReassignExpr#n_id= for (self: AAttrReassignExpr, TAttrid) */
-void nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AAttrFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TAttrid */;
+/* method parser_prod#ALlExpr#n_op= for (self: ALlExpr, Token) */
+void nit__parser_prod___ALlExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val = var_node; /* _n_id on <self:AAttrReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:ALlExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAttrid> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAttrid> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrReassignExpr#n_assign_op= for (self: AAttrReassignExpr, AAssignOp) */
-void nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(val* self, val* p0) {
-val* var_node /* var node: AAssignOp */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_node; /* _n_assign_op on <self:AAttrReassignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AAssignOp> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AAssignOp> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AAttrReassignExpr#n_value= for (self: AAttrReassignExpr, AExpr) */
-void nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#ALlExpr#n_expr2= for (self: ALlExpr, AExpr) */
+void nit__parser_prod___ALlExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_node; /* _n_value on <self:AAttrReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ALlExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -5717,127 +6551,122 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AAttrReassignExpr#visit_all for (self: AAttrReassignExpr, Visitor) */
-void nit__parser_prod___AAttrReassignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#ALlExpr#visit_all for (self: ALlExpr, Visitor) */
+void nit__parser_prod___ALlExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TAttrid */;
-val* var2 /* : AAssignOp */;
-val* var3 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ALlExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4186);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4066);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrReassignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ALlExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4187);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4067);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:AAttrReassignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ALlExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4188);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4068);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:AAttrReassignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4189);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method parser_prod#AGtExpr#init_agtexpr for (self: AGtExpr, nullable AExpr, nullable TGt, nullable AExpr) */
+void nit__parser_prod___AGtExpr___init_agtexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TGt */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
 {
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline kernel#Object#init (self) on <self:AGtExpr> */
+RET_LABEL1:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#ACallExpr#init_acallexpr for (self: ACallExpr, nullable AExpr, nullable TId, nullable AExprs) */
-void nit__parser_prod___ACallExpr___init_acallexpr(val* self, val* p0, val* p1, val* p2) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_id /* var n_id: nullable TId */;
-val* var_n_args /* var n_args: nullable AExprs */;
 var_n_expr = p0;
-var_n_id = p1;
-var_n_args = p2;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4199);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4078);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ACallExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AGtExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4200);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4079);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_id == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4201);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4080);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val = var_n_id; /* _n_id on <self:ACallExpr> */
-if (var_n_id == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AGtExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4202);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4081);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId> */
-if (unlikely(var_n_id == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TGt> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId> */
-RET_LABEL2:(void)0;
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TGt> */
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4203);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4082);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val = var_n_args; /* _n_args on <self:ACallExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AGtExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4204);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4083);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
-RET_LABEL3:(void)0;
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallExpr#replace_child for (self: ACallExpr, ANode, nullable ANode) */
-void nit__parser_prod___ACallExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AGtExpr#replace_child for (self: AGtExpr, ANode, nullable ANode) */
+void nit__parser_prod___AGtExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -5849,7 +6678,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TId */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -5857,7 +6686,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : AExprs */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -5867,11 +6696,11 @@ int idtype25;
 const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ACallExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGtExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4209);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4088);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -5905,26 +6734,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4210);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4089);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ACallExpr#n_expr= on <self:ACallExpr>*/
+nit__parser_prod___AGtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AGtExpr#n_expr= on <self:AGtExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AGtExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4213);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4092);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TId> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TId> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -5937,9 +6766,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TId */
-cltype14 = type_nit__TId.color;
-idtype15 = type_nit__TId.id;
+/* <var_new_child:nullable ANode> isa TGt */
+cltype14 = type_nit__TGt.color;
+idtype15 = type_nit__TGt.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -5951,27 +6780,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TId", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4214);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TGt", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4093);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallExpr___nit__parser_nodes__ACallFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#ACallExpr#n_id= on <self:ACallExpr>*/
+nit__parser_prod___AGtExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AGtExpr#n_op= on <self:AGtExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGtExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4217);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4096);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExprs> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -5984,9 +6813,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype24 = type_nit__AExprs.color;
-idtype25 = type_nit__AExprs.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -5998,23 +6827,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4218);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4097);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallExpr___nit__parser_nodes__ACallFormExpr__n_args_61d(self, var_new_child); /* Direct call parser_prod#ACallExpr#n_args= on <self:ACallExpr>*/
+nit__parser_prod___AGtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AGtExpr#n_expr2= on <self:AGtExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallExpr#n_expr= for (self: ACallExpr, AExpr) */
-void nit__parser_prod___ACallExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AGtExpr#n_expr= for (self: AGtExpr, AExpr) */
+void nit__parser_prod___AGtExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ACallExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AGtExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -6023,189 +6852,148 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallExpr#n_id= for (self: ACallExpr, TId) */
-void nit__parser_prod___ACallExpr___nit__parser_nodes__ACallFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TId */;
+/* method parser_prod#AGtExpr#n_op= for (self: AGtExpr, Token) */
+void nit__parser_prod___AGtExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val = var_node; /* _n_id on <self:ACallExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AGtExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TId> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TId> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallExpr#n_args= for (self: ACallExpr, AExprs) */
-void nit__parser_prod___ACallExpr___nit__parser_nodes__ACallFormExpr__n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
+/* method parser_prod#AGtExpr#n_expr2= for (self: AGtExpr, AExpr) */
+void nit__parser_prod___AGtExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val = var_node; /* _n_args on <self:ACallExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AGtExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallExpr#visit_all for (self: ACallExpr, Visitor) */
-void nit__parser_prod___ACallExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AGtExpr#visit_all for (self: AGtExpr, Visitor) */
+void nit__parser_prod___AGtExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TId */;
-val* var2 /* : AExprs */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ACallExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGtExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4242);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4121);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AGtExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4243);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4122);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGtExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4244);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4123);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallAssignExpr#init_acallassignexpr for (self: ACallAssignExpr, nullable AExpr, nullable TId, nullable AExprs, nullable TAssign, nullable AExpr) */
-void nit__parser_prod___ACallAssignExpr___init_acallassignexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
+/* method parser_prod#AGeExpr#init_ageexpr for (self: AGeExpr, nullable AExpr, nullable TGe, nullable AExpr) */
+void nit__parser_prod___AGeExpr___init_ageexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_id /* var n_id: nullable TId */;
-val* var_n_args /* var n_args: nullable AExprs */;
-val* var_n_assign /* var n_assign: nullable TAssign */;
-val* var_n_value /* var n_value: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TGe */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AGeExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_id = p1;
-var_n_args = p2;
-var_n_assign = p3;
-var_n_value = p4;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4256);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4133);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ACallAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AGeExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4257);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4134);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4258);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val = var_n_id; /* _n_id on <self:ACallAssignExpr> */
-if (var_n_id == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4259);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId> */
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4260);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4135);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val = var_n_args; /* _n_args on <self:ACallAssignExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AGeExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4261);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4136);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TGe> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TGe> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_assign == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4262);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4137);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_n_assign; /* _n_assign on <self:ACallAssignExpr> */
-if (var_n_assign == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AGeExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4263);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4138);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign,self) on <var_n_assign:nullable TAssign> */
-if (unlikely(var_n_assign == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign:nullable TAssign> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4264);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_n_value; /* _n_value on <self:ACallAssignExpr> */
-if (var_n_value == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4265);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
-RET_LABEL5:(void)0;
-}
-}
 RET_LABEL:;
 }
-/* method parser_prod#ACallAssignExpr#replace_child for (self: ACallAssignExpr, ANode, nullable ANode) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AGeExpr#replace_child for (self: AGeExpr, ANode, nullable ANode) */
+void nit__parser_prod___AGeExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -6217,7 +7005,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TId */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -6225,7 +7013,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : AExprs */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -6233,29 +7021,13 @@ short int var23 /* : Bool */;
 int cltype24;
 int idtype25;
 const char* var_class_name26;
-val* var27 /* : TAssign */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-int cltype34;
-int idtype35;
-const char* var_class_name36;
-val* var37 /* : AExpr */;
-short int var38 /* : Bool */;
-short int var40 /* : Bool */;
-short int var42 /* : Bool */;
-short int var43 /* : Bool */;
-int cltype44;
-int idtype45;
-const char* var_class_name46;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ACallAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGeExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4270);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4143);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -6289,26 +7061,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4271);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4144);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ACallAssignExpr#n_expr= on <self:ACallAssignExpr>*/
+nit__parser_prod___AGeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AGeExpr#n_expr= on <self:AGeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallAssignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AGeExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4274);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4147);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TId> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TId> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -6321,9 +7093,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TId */
-cltype14 = type_nit__TId.color;
-idtype15 = type_nit__TId.id;
+/* <var_new_child:nullable ANode> isa TGe */
+cltype14 = type_nit__TGe.color;
+idtype15 = type_nit__TGe.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -6335,27 +7107,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TId", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4275);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TGe", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4148);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ACallFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#ACallAssignExpr#n_id= on <self:ACallAssignExpr>*/
+nit__parser_prod___AGeExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AGeExpr#n_op= on <self:AGeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallAssignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGeExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4278);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4151);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExprs> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -6368,9 +7140,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype24 = type_nit__AExprs.color;
-idtype25 = type_nit__AExprs.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -6382,117 +7154,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4279);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ACallFormExpr__n_args_61d(self, var_new_child); /* Direct call parser_prod#ACallAssignExpr#n_args= on <self:ACallAssignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var27 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:ACallAssignExpr> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4282);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:TAssign> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:TAssign> */
-var32 = var27 == var_other;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-}
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-}
-if (var28){
-/* <var_new_child:nullable ANode> isa TAssign */
-cltype34 = type_nit__TAssign.color;
-idtype35 = type_nit__TAssign.id;
-if(var_new_child == NULL) {
-var33 = 0;
-} else {
-if(cltype34 >= var_new_child->type->table_size) {
-var33 = 0;
-} else {
-var33 = var_new_child->type->type_table[cltype34] == idtype35;
-}
-}
-if (unlikely(!var33)) {
-var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAssign", var_class_name36);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4283);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ACallAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(self, var_new_child); /* Direct call parser_prod#ACallAssignExpr#n_assign= on <self:ACallAssignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var37 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ACallAssignExpr> */
-if (unlikely(var37 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4286);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var37,var_old_child) on <var37:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var37,var_other) on <var37:AExpr> */
-var42 = var37 == var_other;
-var40 = var42;
-goto RET_LABEL41;
-RET_LABEL41:(void)0;
-}
-}
-var38 = var40;
-goto RET_LABEL39;
-RET_LABEL39:(void)0;
-}
-}
-if (var38){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype44 = type_nit__AExpr.color;
-idtype45 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var43 = 0;
-} else {
-if(cltype44 >= var_new_child->type->table_size) {
-var43 = 0;
-} else {
-var43 = var_new_child->type->type_table[cltype44] == idtype45;
-}
-}
-if (unlikely(!var43)) {
-var_class_name46 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name46);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4287);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4152);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#ACallAssignExpr#n_value= on <self:ACallAssignExpr>*/
+nit__parser_prod___AGeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AGeExpr#n_expr2= on <self:AGeExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallAssignExpr#n_expr= for (self: ACallAssignExpr, AExpr) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AGeExpr#n_expr= for (self: AGeExpr, AExpr) */
+void nit__parser_prod___AGeExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ACallAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AGeExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -6501,50 +7179,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallAssignExpr#n_id= for (self: ACallAssignExpr, TId) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ACallFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TId */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val = var_node; /* _n_id on <self:ACallAssignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TId> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TId> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ACallAssignExpr#n_args= for (self: ACallAssignExpr, AExprs) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ACallFormExpr__n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val = var_node; /* _n_args on <self:ACallAssignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ACallAssignExpr#n_assign= for (self: ACallAssignExpr, TAssign) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(val* self, val* p0) {
-val* var_node /* var node: TAssign */;
+/* method parser_prod#AGeExpr#n_op= for (self: AGeExpr, Token) */
+void nit__parser_prod___AGeExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_node; /* _n_assign on <self:ACallAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AGeExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAssign> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAssign> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallAssignExpr#n_value= for (self: ACallAssignExpr, AExpr) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#AGeExpr#n_expr2= for (self: AGeExpr, AExpr) */
+void nit__parser_prod___AGeExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_node; /* _n_value on <self:ACallAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AGeExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -6553,183 +7205,122 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallAssignExpr#visit_all for (self: ACallAssignExpr, Visitor) */
-void nit__parser_prod___ACallAssignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AGeExpr#visit_all for (self: AGeExpr, Visitor) */
+void nit__parser_prod___AGeExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TId */;
-val* var2 /* : AExprs */;
-val* var3 /* : TAssign */;
-val* var4 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ACallAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGeExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4321);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4176);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallAssignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AGeExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4322);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4177);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallAssignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGeExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4323);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4178);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:ACallAssignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4324);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-var4 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ACallAssignExpr> */
-if (unlikely(var4 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4325);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method parser_prod#AGgExpr#init_aggexpr for (self: AGgExpr, nullable AExpr, nullable TGg, nullable AExpr) */
+void nit__parser_prod___AGgExpr___init_aggexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TGg */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
 {
-nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline kernel#Object#init (self) on <self:AGgExpr> */
+RET_LABEL1:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#ACallReassignExpr#init_acallreassignexpr for (self: ACallReassignExpr, nullable AExpr, nullable TId, nullable AExprs, nullable AAssignOp, nullable AExpr) */
-void nit__parser_prod___ACallReassignExpr___init_acallreassignexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_id /* var n_id: nullable TId */;
-val* var_n_args /* var n_args: nullable AExprs */;
-val* var_n_assign_op /* var n_assign_op: nullable AAssignOp */;
-val* var_n_value /* var n_value: nullable AExpr */;
 var_n_expr = p0;
-var_n_id = p1;
-var_n_args = p2;
-var_n_assign_op = p3;
-var_n_value = p4;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4337);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4188);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ACallReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AGgExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4338);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4189);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4339);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val = var_n_id; /* _n_id on <self:ACallReassignExpr> */
-if (var_n_id == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4340);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId> */
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4341);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4190);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val = var_n_args; /* _n_args on <self:ACallReassignExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AGgExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4342);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4191);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TGg> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TGg> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_assign_op == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4343);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4192);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_n_assign_op; /* _n_assign_op on <self:ACallReassignExpr> */
-if (var_n_assign_op == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AGgExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4344);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4193);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign_op,self) on <var_n_assign_op:nullable AAssignOp> */
-if (unlikely(var_n_assign_op == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign_op:nullable AAssignOp> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4345);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_n_value; /* _n_value on <self:ACallReassignExpr> */
-if (var_n_value == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4346);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
-RET_LABEL5:(void)0;
-}
-}
 RET_LABEL:;
 }
-/* method parser_prod#ACallReassignExpr#replace_child for (self: ACallReassignExpr, ANode, nullable ANode) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AGgExpr#replace_child for (self: AGgExpr, ANode, nullable ANode) */
+void nit__parser_prod___AGgExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -6741,7 +7332,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TId */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -6749,7 +7340,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : AExprs */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -6757,29 +7348,13 @@ short int var23 /* : Bool */;
 int cltype24;
 int idtype25;
 const char* var_class_name26;
-val* var27 /* : AAssignOp */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-int cltype34;
-int idtype35;
-const char* var_class_name36;
-val* var37 /* : AExpr */;
-short int var38 /* : Bool */;
-short int var40 /* : Bool */;
-short int var42 /* : Bool */;
-short int var43 /* : Bool */;
-int cltype44;
-int idtype45;
-const char* var_class_name46;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ACallReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGgExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4351);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4198);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -6813,26 +7388,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4352);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4199);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ACallReassignExpr#n_expr= on <self:ACallReassignExpr>*/
+nit__parser_prod___AGgExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AGgExpr#n_expr= on <self:AGgExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallReassignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AGgExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4355);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4202);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TId> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TId> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -6845,9 +7420,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TId */
-cltype14 = type_nit__TId.color;
-idtype15 = type_nit__TId.id;
+/* <var_new_child:nullable ANode> isa TGg */
+cltype14 = type_nit__TGg.color;
+idtype15 = type_nit__TGg.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -6859,27 +7434,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TId", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4356);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TGg", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4203);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ACallFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#ACallReassignExpr#n_id= on <self:ACallReassignExpr>*/
+nit__parser_prod___AGgExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AGgExpr#n_op= on <self:AGgExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallReassignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGgExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4359);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4206);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExprs> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -6892,9 +7467,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype24 = type_nit__AExprs.color;
-idtype25 = type_nit__AExprs.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -6906,117 +7481,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4360);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ACallFormExpr__n_args_61d(self, var_new_child); /* Direct call parser_prod#ACallReassignExpr#n_args= on <self:ACallReassignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var27 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:ACallReassignExpr> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4363);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:AAssignOp> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:AAssignOp> */
-var32 = var27 == var_other;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-}
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-}
-if (var28){
-/* <var_new_child:nullable ANode> isa AAssignOp */
-cltype34 = type_nit__AAssignOp.color;
-idtype35 = type_nit__AAssignOp.id;
-if(var_new_child == NULL) {
-var33 = 0;
-} else {
-if(cltype34 >= var_new_child->type->table_size) {
-var33 = 0;
-} else {
-var33 = var_new_child->type->type_table[cltype34] == idtype35;
-}
-}
-if (unlikely(!var33)) {
-var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AAssignOp", var_class_name36);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4364);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ACallReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(self, var_new_child); /* Direct call parser_prod#ACallReassignExpr#n_assign_op= on <self:ACallReassignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var37 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:ACallReassignExpr> */
-if (unlikely(var37 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4367);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var37,var_old_child) on <var37:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var37,var_other) on <var37:AExpr> */
-var42 = var37 == var_other;
-var40 = var42;
-goto RET_LABEL41;
-RET_LABEL41:(void)0;
-}
-}
-var38 = var40;
-goto RET_LABEL39;
-RET_LABEL39:(void)0;
-}
-}
-if (var38){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype44 = type_nit__AExpr.color;
-idtype45 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var43 = 0;
-} else {
-if(cltype44 >= var_new_child->type->table_size) {
-var43 = 0;
-} else {
-var43 = var_new_child->type->type_table[cltype44] == idtype45;
-}
-}
-if (unlikely(!var43)) {
-var_class_name46 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name46);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4368);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4207);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ACallReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#ACallReassignExpr#n_value= on <self:ACallReassignExpr>*/
+nit__parser_prod___AGgExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AGgExpr#n_expr2= on <self:AGgExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallReassignExpr#n_expr= for (self: ACallReassignExpr, AExpr) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AGgExpr#n_expr= for (self: AGgExpr, AExpr) */
+void nit__parser_prod___AGgExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ACallReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AGgExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -7025,50 +7506,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallReassignExpr#n_id= for (self: ACallReassignExpr, TId) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ACallFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TId */;
+/* method parser_prod#AGgExpr#n_op= for (self: AGgExpr, Token) */
+void nit__parser_prod___AGgExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val = var_node; /* _n_id on <self:ACallReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AGgExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TId> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TId> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallReassignExpr#n_args= for (self: ACallReassignExpr, AExprs) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ACallFormExpr__n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val = var_node; /* _n_args on <self:ACallReassignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ACallReassignExpr#n_assign_op= for (self: ACallReassignExpr, AAssignOp) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(val* self, val* p0) {
-val* var_node /* var node: AAssignOp */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_node; /* _n_assign_op on <self:ACallReassignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AAssignOp> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AAssignOp> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ACallReassignExpr#n_value= for (self: ACallReassignExpr, AExpr) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#AGgExpr#n_expr2= for (self: AGgExpr, AExpr) */
+void nit__parser_prod___AGgExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_node; /* _n_value on <self:ACallReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AGgExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -7077,495 +7532,449 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACallReassignExpr#visit_all for (self: ACallReassignExpr, Visitor) */
-void nit__parser_prod___ACallReassignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AGgExpr#visit_all for (self: AGgExpr, Visitor) */
+void nit__parser_prod___AGgExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TId */;
-val* var2 /* : AExprs */;
-val* var3 /* : AAssignOp */;
-val* var4 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ACallReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AGgExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4402);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4231);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallReassignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AGgExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4403);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4232);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallReassignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AGgExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4404);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4233);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:ACallReassignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4405);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-var4 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:ACallReassignExpr> */
-if (unlikely(var4 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4406);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var4); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
 RET_LABEL:;
 }
-/* method parser_prod#ASuperExpr#init_asuperexpr for (self: ASuperExpr, nullable AQualified, nullable TKwsuper, nullable AExprs) */
-void nit__parser_prod___ASuperExpr___init_asuperexpr(val* self, val* p0, val* p1, val* p2) {
-val* var_n_qualified /* var n_qualified: nullable AQualified */;
-val* var_n_kwsuper /* var n_kwsuper: nullable TKwsuper */;
-val* var_n_args /* var n_args: nullable AExprs */;
-val* var /* : null */;
-short int var1 /* : Bool */;
-short int var2 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-var_n_qualified = p0;
-var_n_kwsuper = p1;
-var_n_args = p2;
-self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_qualified].val = var_n_qualified; /* _n_qualified on <self:ASuperExpr> */
-var = NULL;
-if (var_n_qualified == NULL) {
-var1 = 0; /* is null */
-} else {
-var1 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_n_qualified,var) on <var_n_qualified:nullable AQualified> */
-var_other = var;
+/* method parser_prod#AIsaExpr#init_aisaexpr for (self: AIsaExpr, nullable AExpr, nullable TKwisa, nullable AType) */
+void nit__parser_prod___AIsaExpr___init_aisaexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_kwisa /* var n_kwisa: nullable TKwisa */;
+val* var_n_type /* var n_type: nullable AType */;
 {
-var4 = ((short int (*)(val* self, val* p0))(var_n_qualified->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_qualified, var_other) /* == on <var_n_qualified:nullable AQualified(AQualified)>*/;
+{ /* Inline kernel#Object#init (self) on <self:AIsaExpr> */
+RET_LABEL1:(void)0;
 }
-var5 = !var4;
-var2 = var5;
-goto RET_LABEL3;
-RET_LABEL3:(void)0;
 }
-var1 = var2;
+var_n_expr = p0;
+var_n_kwisa = p1;
+var_n_type = p2;
+if (unlikely(var_n_expr == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4243);
+fatal_exit(1);
 }
-if (var1){
-{
-{ /* Inline parser_nodes#ANode#parent= (var_n_qualified,self) on <var_n_qualified:nullable AQualified(AQualified)> */
-var_n_qualified->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_qualified:nullable AQualified(AQualified)> */
-RET_LABEL6:(void)0;
+self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AIsaExpr> */
+if (var_n_expr == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4244);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
+if (unlikely(var_n_expr == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
+var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+RET_LABEL2:(void)0;
 }
-} else {
 }
-if (unlikely(var_n_kwsuper == NULL)) {
+if (unlikely(var_n_kwisa == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4418);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4245);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_kwsuper].val = var_n_kwsuper; /* _n_kwsuper on <self:ASuperExpr> */
-if (var_n_kwsuper == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_kwisa].val = var_n_kwisa; /* _n_kwisa on <self:AIsaExpr> */
+if (var_n_kwisa == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4419);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4246);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_kwsuper,self) on <var_n_kwsuper:nullable TKwsuper> */
-if (unlikely(var_n_kwsuper == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_kwisa,self) on <var_n_kwisa:nullable TKwisa> */
+if (unlikely(var_n_kwisa == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_kwsuper->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwsuper:nullable TKwsuper> */
-RET_LABEL7:(void)0;
+var_n_kwisa->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwisa:nullable TKwisa> */
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_type == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4420);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4247);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val = var_n_args; /* _n_args on <self:ASuperExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val = var_n_type; /* _n_type on <self:AIsaExpr> */
+if (var_n_type == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4421);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4248);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_type,self) on <var_n_type:nullable AType> */
+if (unlikely(var_n_type == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
-RET_LABEL8:(void)0;
+var_n_type->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_type:nullable AType> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASuperExpr#replace_child for (self: ASuperExpr, ANode, nullable ANode) */
-void nit__parser_prod___ASuperExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AIsaExpr#replace_child for (self: AIsaExpr, ANode, nullable ANode) */
+void nit__parser_prod___AIsaExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : nullable AQualified */;
+val* var /* : AExpr */;
 short int var1 /* : Bool */;
-short int var2 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var4 /* : Bool */;
+short int var3 /* : Bool */;
+short int var5 /* : Bool */;
 short int var6 /* : Bool */;
-short int var7 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var8 /* : TKwsuper */;
-short int var9 /* : Bool */;
-short int var11 /* : Bool */;
+val* var7 /* : TKwisa */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+short int var12 /* : Bool */;
 short int var13 /* : Bool */;
-short int var14 /* : Bool */;
-int cltype15;
-int idtype16;
-const char* var_class_name17;
-val* var18 /* : AExprs */;
-short int var19 /* : Bool */;
-short int var21 /* : Bool */;
+int cltype14;
+int idtype15;
+const char* var_class_name16;
+val* var17 /* : AType */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
 short int var23 /* : Bool */;
-short int var24 /* : Bool */;
-int cltype25;
-int idtype26;
-const char* var_class_name27;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_qualified].val; /* _n_qualified on <self:ASuperExpr> */
-if (var == NULL) {
-var1 = 0; /* <var_old_child:ANode> cannot be null */
-} else {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:nullable AQualified> */
+var = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
+if (unlikely(var == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4253);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:nullable AQualified(AQualified)> */
-var6 = var == var_other;
-var4 = var6;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
+var5 = var == var_other;
+var3 = var5;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
 }
 }
-var2 = var4;
-goto RET_LABEL3;
-RET_LABEL3:(void)0;
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
 }
-var1 = var2;
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa nullable AQualified */
-cltype = type_nullable__nit__AQualified.color;
-idtype = type_nullable__nit__AQualified.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype = type_nit__AExpr.color;
+idtype = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var7 = 1;
+var6 = 0;
 } else {
 if(cltype >= var_new_child->type->table_size) {
-var7 = 0;
+var6 = 0;
 } else {
-var7 = var_new_child->type->type_table[cltype] == idtype;
+var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 }
-if (unlikely(!var7)) {
+if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable AQualified", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4427);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4254);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ASuperExpr___n_qualified_61d(self, var_new_child); /* Direct call parser_prod#ASuperExpr#n_qualified= on <self:ASuperExpr>*/
+nit__parser_prod___AIsaExpr___n_expr_61d(self, var_new_child); /* Direct call parser_prod#AIsaExpr#n_expr= on <self:AIsaExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var8 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_kwsuper].val; /* _n_kwsuper on <self:ASuperExpr> */
-if (unlikely(var8 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwsuper");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4430);
-show_backtrace(1);
+var7 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_kwisa].val; /* _n_kwisa on <self:AIsaExpr> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwisa");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4257);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var8,var_old_child) on <var8:TKwsuper> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TKwisa> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var8,var_other) on <var8:TKwsuper> */
-var13 = var8 == var_other;
-var11 = var13;
-goto RET_LABEL12;
-RET_LABEL12:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TKwisa> */
+var12 = var7 == var_other;
+var10 = var12;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
 }
 }
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
 }
 }
-if (var9){
-/* <var_new_child:nullable ANode> isa TKwsuper */
-cltype15 = type_nit__TKwsuper.color;
-idtype16 = type_nit__TKwsuper.id;
+if (var8){
+/* <var_new_child:nullable ANode> isa TKwisa */
+cltype14 = type_nit__TKwisa.color;
+idtype15 = type_nit__TKwisa.id;
 if(var_new_child == NULL) {
-var14 = 0;
+var13 = 0;
 } else {
-if(cltype15 >= var_new_child->type->table_size) {
-var14 = 0;
+if(cltype14 >= var_new_child->type->table_size) {
+var13 = 0;
 } else {
-var14 = var_new_child->type->type_table[cltype15] == idtype16;
+var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 }
-if (unlikely(!var14)) {
-var_class_name17 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwsuper", var_class_name17);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4431);
-show_backtrace(1);
+if (unlikely(!var13)) {
+var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwisa", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4258);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ASuperExpr___n_kwsuper_61d(self, var_new_child); /* Direct call parser_prod#ASuperExpr#n_kwsuper= on <self:ASuperExpr>*/
+nit__parser_prod___AIsaExpr___n_kwisa_61d(self, var_new_child); /* Direct call parser_prod#AIsaExpr#n_kwisa= on <self:AIsaExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var18 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val; /* _n_args on <self:ASuperExpr> */
-if (unlikely(var18 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4434);
-show_backtrace(1);
+var17 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val; /* _n_type on <self:AIsaExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4261);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var18,var_old_child) on <var18:AExprs> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AType> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var18,var_other) on <var18:AExprs> */
-var23 = var18 == var_other;
-var21 = var23;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AType> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
 }
-var19 = var21;
-goto RET_LABEL20;
-RET_LABEL20:(void)0;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
 }
-if (var19){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype25 = type_nit__AExprs.color;
-idtype26 = type_nit__AExprs.id;
+if (var18){
+/* <var_new_child:nullable ANode> isa AType */
+cltype24 = type_nit__AType.color;
+idtype25 = type_nit__AType.id;
 if(var_new_child == NULL) {
-var24 = 0;
+var23 = 0;
 } else {
-if(cltype25 >= var_new_child->type->table_size) {
-var24 = 0;
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
 } else {
-var24 = var_new_child->type->type_table[cltype25] == idtype26;
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 }
-if (unlikely(!var24)) {
-var_class_name27 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name27);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4435);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AType", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4262);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ASuperExpr___n_args_61d(self, var_new_child); /* Direct call parser_prod#ASuperExpr#n_args= on <self:ASuperExpr>*/
+nit__parser_prod___AIsaExpr___n_type_61d(self, var_new_child); /* Direct call parser_prod#AIsaExpr#n_type= on <self:AIsaExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASuperExpr#n_qualified= for (self: ASuperExpr, nullable AQualified) */
-void nit__parser_prod___ASuperExpr___n_qualified_61d(val* self, val* p0) {
-val* var_node /* var node: nullable AQualified */;
-val* var /* : null */;
-short int var1 /* : Bool */;
-short int var2 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
+/* method parser_prod#AIsaExpr#n_expr= for (self: AIsaExpr, AExpr) */
+void nit__parser_prod___AIsaExpr___n_expr_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_qualified].val = var_node; /* _n_qualified on <self:ASuperExpr> */
-var = NULL;
-if (var_node == NULL) {
-var1 = 0; /* is null */
-} else {
-var1 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_node,var) on <var_node:nullable AQualified> */
-var_other = var;
-{
-var4 = ((short int (*)(val* self, val* p0))(var_node->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_node, var_other) /* == on <var_node:nullable AQualified(AQualified)>*/;
-}
-var5 = !var4;
-var2 = var5;
-goto RET_LABEL3;
-RET_LABEL3:(void)0;
-}
-var1 = var2;
-}
-if (var1){
+self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val = var_node; /* _n_expr on <self:AIsaExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:nullable AQualified(AQualified)> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:nullable AQualified(AQualified)> */
-RET_LABEL6:(void)0;
-}
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
+RET_LABEL1:(void)0;
 }
-} else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASuperExpr#n_kwsuper= for (self: ASuperExpr, TKwsuper) */
-void nit__parser_prod___ASuperExpr___n_kwsuper_61d(val* self, val* p0) {
-val* var_node /* var node: TKwsuper */;
+/* method parser_prod#AIsaExpr#n_kwisa= for (self: AIsaExpr, TKwisa) */
+void nit__parser_prod___AIsaExpr___n_kwisa_61d(val* self, val* p0) {
+val* var_node /* var node: TKwisa */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_kwsuper].val = var_node; /* _n_kwsuper on <self:ASuperExpr> */
+self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_kwisa].val = var_node; /* _n_kwisa on <self:AIsaExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwsuper> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwsuper> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwisa> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwisa> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASuperExpr#n_args= for (self: ASuperExpr, AExprs) */
-void nit__parser_prod___ASuperExpr___n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
+/* method parser_prod#AIsaExpr#n_type= for (self: AIsaExpr, AType) */
+void nit__parser_prod___AIsaExpr___n_type_61d(val* self, val* p0) {
+val* var_node /* var node: AType */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val = var_node; /* _n_args on <self:ASuperExpr> */
+self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val = var_node; /* _n_type on <self:AIsaExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AType> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AType> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ASuperExpr#visit_all for (self: ASuperExpr, Visitor) */
-void nit__parser_prod___ASuperExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AIsaExpr#visit_all for (self: AIsaExpr, Visitor) */
+void nit__parser_prod___AIsaExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : nullable AQualified */;
-val* var1 /* : TKwsuper */;
-val* var2 /* : AExprs */;
+val* var /* : AExpr */;
+val* var1 /* : TKwisa */;
+val* var2 /* : AType */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_qualified].val; /* _n_qualified on <self:ASuperExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
+if (unlikely(var == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4286);
+fatal_exit(1);
+}
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_kwsuper].val; /* _n_kwsuper on <self:ASuperExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_kwisa].val; /* _n_kwisa on <self:AIsaExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwsuper");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4460);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwisa");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4287);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val; /* _n_args on <self:ASuperExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val; /* _n_type on <self:AIsaExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4461);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4288);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#AInitExpr#init_ainitexpr for (self: AInitExpr, nullable AExpr, nullable TKwinit, nullable AExprs) */
-void nit__parser_prod___AInitExpr___init_ainitexpr(val* self, val* p0, val* p1, val* p2) {
+/* method parser_prod#APlusExpr#init_aplusexpr for (self: APlusExpr, nullable AExpr, nullable TPlus, nullable AExpr) */
+void nit__parser_prod___APlusExpr___init_aplusexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_kwinit /* var n_kwinit: nullable TKwinit */;
-val* var_n_args /* var n_args: nullable AExprs */;
+val* var_n_op /* var n_op: nullable TPlus */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:APlusExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_kwinit = p1;
-var_n_args = p2;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4471);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4298);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AInitExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:APlusExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4472);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4299);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_kwinit == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4473);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4300);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_kwinit].val = var_n_kwinit; /* _n_kwinit on <self:AInitExpr> */
-if (var_n_kwinit == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:APlusExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4474);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4301);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_kwinit,self) on <var_n_kwinit:nullable TKwinit> */
-if (unlikely(var_n_kwinit == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TPlus> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_kwinit->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_kwinit:nullable TKwinit> */
-RET_LABEL2:(void)0;
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TPlus> */
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4475);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4302);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_args].val = var_n_args; /* _n_args on <self:AInitExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:APlusExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4476);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4303);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
-RET_LABEL3:(void)0;
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AInitExpr#replace_child for (self: AInitExpr, ANode, nullable ANode) */
-void nit__parser_prod___AInitExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#APlusExpr#replace_child for (self: APlusExpr, ANode, nullable ANode) */
+void nit__parser_prod___APlusExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -7577,7 +7986,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TKwinit */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -7585,7 +7994,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : AExprs */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -7595,11 +8004,11 @@ int idtype25;
 const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AInitExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:APlusExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4481);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4308);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -7633,26 +8042,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4482);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4309);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AInitExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AInitExpr#n_expr= on <self:AInitExpr>*/
+nit__parser_prod___APlusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#APlusExpr#n_expr= on <self:APlusExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_kwinit].val; /* _n_kwinit on <self:AInitExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:APlusExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwinit");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4485);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4312);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TKwinit> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TKwinit> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -7665,9 +8074,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TKwinit */
-cltype14 = type_nit__TKwinit.color;
-idtype15 = type_nit__TKwinit.id;
+/* <var_new_child:nullable ANode> isa TPlus */
+cltype14 = type_nit__TPlus.color;
+idtype15 = type_nit__TPlus.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -7679,27 +8088,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TKwinit", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4486);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TPlus", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4313);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AInitExpr___n_kwinit_61d(self, var_new_child); /* Direct call parser_prod#AInitExpr#n_kwinit= on <self:AInitExpr>*/
+nit__parser_prod___APlusExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#APlusExpr#n_op= on <self:APlusExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_args].val; /* _n_args on <self:AInitExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:APlusExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4489);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4316);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExprs> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -7712,9 +8121,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype24 = type_nit__AExprs.color;
-idtype25 = type_nit__AExprs.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -7726,23 +8135,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4490);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4317);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AInitExpr___n_args_61d(self, var_new_child); /* Direct call parser_prod#AInitExpr#n_args= on <self:AInitExpr>*/
+nit__parser_prod___APlusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#APlusExpr#n_expr2= on <self:APlusExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AInitExpr#n_expr= for (self: AInitExpr, AExpr) */
-void nit__parser_prod___AInitExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#APlusExpr#n_expr= for (self: APlusExpr, AExpr) */
+void nit__parser_prod___APlusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AInitExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:APlusExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -7751,120 +8160,148 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AInitExpr#n_kwinit= for (self: AInitExpr, TKwinit) */
-void nit__parser_prod___AInitExpr___n_kwinit_61d(val* self, val* p0) {
-val* var_node /* var node: TKwinit */;
+/* method parser_prod#APlusExpr#n_op= for (self: APlusExpr, Token) */
+void nit__parser_prod___APlusExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_kwinit].val = var_node; /* _n_kwinit on <self:AInitExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:APlusExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TKwinit> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TKwinit> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AInitExpr#n_args= for (self: AInitExpr, AExprs) */
-void nit__parser_prod___AInitExpr___n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
+/* method parser_prod#APlusExpr#n_expr2= for (self: APlusExpr, AExpr) */
+void nit__parser_prod___APlusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_args].val = var_node; /* _n_args on <self:AInitExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:APlusExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AInitExpr#visit_all for (self: AInitExpr, Visitor) */
-void nit__parser_prod___AInitExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#APlusExpr#visit_all for (self: APlusExpr, Visitor) */
+void nit__parser_prod___APlusExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : TKwinit */;
-val* var2 /* : AExprs */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AInitExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:APlusExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4514);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4341);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_kwinit].val; /* _n_kwinit on <self:AInitExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:APlusExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwinit");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4515);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4342);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_args].val; /* _n_args on <self:AInitExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:APlusExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4516);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4343);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraExpr#init_abraexpr for (self: ABraExpr, nullable AExpr, nullable AExprs) */
-void nit__parser_prod___ABraExpr___init_abraexpr(val* self, val* p0, val* p1) {
+/* method parser_prod#AMinusExpr#init_aminusexpr for (self: AMinusExpr, nullable AExpr, nullable TMinus, nullable AExpr) */
+void nit__parser_prod___AMinusExpr___init_aminusexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_args /* var n_args: nullable AExprs */;
+val* var_n_op /* var n_op: nullable TMinus */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AMinusExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_args = p1;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4525);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4353);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ABraExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AMinusExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4526);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4354);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_args == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4527);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4355);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val = var_n_args; /* _n_args on <self:ABraExpr> */
-if (var_n_args == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AMinusExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4528);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4356);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TMinus> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TMinus> */
+RET_LABEL3:(void)0;
 }
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
-RET_LABEL2:(void)0;
+}
+if (unlikely(var_n_expr2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4357);
+fatal_exit(1);
+}
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AMinusExpr> */
+if (var_n_expr2 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4358);
+fatal_exit(1);
+} else {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
+}
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraExpr#replace_child for (self: ABraExpr, ANode, nullable ANode) */
-void nit__parser_prod___ABraExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AMinusExpr#replace_child for (self: AMinusExpr, ANode, nullable ANode) */
+void nit__parser_prod___AMinusExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -7876,7 +8313,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExprs */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -7884,13 +8321,21 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
+val* var17 /* : AExpr */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+int cltype24;
+int idtype25;
+const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ABraExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AMinusExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4533);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4363);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -7924,69 +8369,116 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4534);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4364);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ABraExpr#n_expr= on <self:ABraExpr>*/
+nit__parser_prod___AMinusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AMinusExpr#n_expr= on <self:AMinusExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AMinusExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4537);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4367);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExprs> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
 RET_LABEL11:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+if (var8){
+/* <var_new_child:nullable ANode> isa TMinus */
+cltype14 = type_nit__TMinus.color;
+idtype15 = type_nit__TMinus.id;
+if(var_new_child == NULL) {
+var13 = 0;
+} else {
+if(cltype14 >= var_new_child->type->table_size) {
+var13 = 0;
+} else {
+var13 = var_new_child->type->type_table[cltype14] == idtype15;
+}
+}
+if (unlikely(!var13)) {
+var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TMinus", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4368);
+fatal_exit(1);
+}
+{
+nit__parser_prod___AMinusExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AMinusExpr#n_op= on <self:AMinusExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AMinusExpr> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4371);
+fatal_exit(1);
+}
+{
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
+var_other = var_old_child;
+{
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
+var22 = var17 == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+}
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
 }
-if (var8){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype14 = type_nit__AExprs.color;
-idtype15 = type_nit__AExprs.id;
+if (var18){
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
-var13 = 0;
+var23 = 0;
 } else {
-if(cltype14 >= var_new_child->type->table_size) {
-var13 = 0;
+if(cltype24 >= var_new_child->type->table_size) {
+var23 = 0;
 } else {
-var13 = var_new_child->type->type_table[cltype14] == idtype15;
+var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 }
-if (unlikely(!var13)) {
-var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4538);
-show_backtrace(1);
+if (unlikely(!var23)) {
+var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4372);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraExpr___nit__parser_nodes__ABraFormExpr__n_args_61d(self, var_new_child); /* Direct call parser_prod#ABraExpr#n_args= on <self:ABraExpr>*/
+nit__parser_prod___AMinusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AMinusExpr#n_expr2= on <self:AMinusExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraExpr#n_expr= for (self: ABraExpr, AExpr) */
-void nit__parser_prod___ABraExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AMinusExpr#n_expr= for (self: AMinusExpr, AExpr) */
+void nit__parser_prod___AMinusExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ABraExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AMinusExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -7995,143 +8487,148 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraExpr#n_args= for (self: ABraExpr, AExprs) */
-void nit__parser_prod___ABraExpr___nit__parser_nodes__ABraFormExpr__n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
+/* method parser_prod#AMinusExpr#n_op= for (self: AMinusExpr, Token) */
+void nit__parser_prod___AMinusExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
+var_node = p0;
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AMinusExpr> */
+{
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
+RET_LABEL1:(void)0;
+}
+}
+RET_LABEL:;
+}
+/* method parser_prod#AMinusExpr#n_expr2= for (self: AMinusExpr, AExpr) */
+void nit__parser_prod___AMinusExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val = var_node; /* _n_args on <self:ABraExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AMinusExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraExpr#visit_all for (self: ABraExpr, Visitor) */
-void nit__parser_prod___ABraExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AMinusExpr#visit_all for (self: AMinusExpr, Visitor) */
+void nit__parser_prod___AMinusExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExprs */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ABraExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AMinusExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4557);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4396);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AMinusExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4558);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4397);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AMinusExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4398);
+fatal_exit(1);
+}
+{
+nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+}
 RET_LABEL:;
 }
-/* method parser_prod#ABraAssignExpr#init_abraassignexpr for (self: ABraAssignExpr, nullable AExpr, nullable AExprs, nullable TAssign, nullable AExpr) */
-void nit__parser_prod___ABraAssignExpr___init_abraassignexpr(val* self, val* p0, val* p1, val* p2, val* p3) {
+/* method parser_prod#AStarshipExpr#init_astarshipexpr for (self: AStarshipExpr, nullable AExpr, nullable TStarship, nullable AExpr) */
+void nit__parser_prod___AStarshipExpr___init_astarshipexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_args /* var n_args: nullable AExprs */;
-val* var_n_assign /* var n_assign: nullable TAssign */;
-val* var_n_value /* var n_value: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TStarship */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:AStarshipExpr> */
+RET_LABEL1:(void)0;
+}
+}
 var_n_expr = p0;
-var_n_args = p1;
-var_n_assign = p2;
-var_n_value = p3;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4569);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4408);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ABraAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AStarshipExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4570);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4409);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_args == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4571);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val = var_n_args; /* _n_args on <self:ABraAssignExpr> */
-if (var_n_args == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4572);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_assign == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4573);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4410);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_n_assign; /* _n_assign on <self:ABraAssignExpr> */
-if (var_n_assign == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AStarshipExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4574);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4411);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign,self) on <var_n_assign:nullable TAssign> */
-if (unlikely(var_n_assign == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TStarship> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign:nullable TAssign> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TStarship> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4575);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4412);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_n_value; /* _n_value on <self:ABraAssignExpr> */
-if (var_n_value == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AStarshipExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4576);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4413);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraAssignExpr#replace_child for (self: ABraAssignExpr, ANode, nullable ANode) */
-void nit__parser_prod___ABraAssignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AStarshipExpr#replace_child for (self: AStarshipExpr, ANode, nullable ANode) */
+void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -8143,7 +8640,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExprs */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -8151,7 +8648,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : TAssign */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -8159,21 +8656,13 @@ short int var23 /* : Bool */;
 int cltype24;
 int idtype25;
 const char* var_class_name26;
-val* var27 /* : AExpr */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-int cltype34;
-int idtype35;
-const char* var_class_name36;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ABraAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarshipExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4581);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4418);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -8207,26 +8696,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4582);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4419);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraAssignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ABraAssignExpr#n_expr= on <self:ABraAssignExpr>*/
+nit__parser_prod___AStarshipExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AStarshipExpr#n_expr= on <self:AStarshipExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraAssignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AStarshipExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4585);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4422);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExprs> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -8239,9 +8728,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype14 = type_nit__AExprs.color;
-idtype15 = type_nit__AExprs.id;
+/* <var_new_child:nullable ANode> isa TStarship */
+cltype14 = type_nit__TStarship.color;
+idtype15 = type_nit__TStarship.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -8253,27 +8742,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4586);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TStarship", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4423);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraAssignExpr___nit__parser_nodes__ABraFormExpr__n_args_61d(self, var_new_child); /* Direct call parser_prod#ABraAssignExpr#n_args= on <self:ABraAssignExpr>*/
+nit__parser_prod___AStarshipExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AStarshipExpr#n_op= on <self:AStarshipExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:ABraAssignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarshipExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4589);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4426);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:TAssign> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:TAssign> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -8286,9 +8775,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa TAssign */
-cltype24 = type_nit__TAssign.color;
-idtype25 = type_nit__TAssign.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -8300,70 +8789,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAssign", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4590);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ABraAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(self, var_new_child); /* Direct call parser_prod#ABraAssignExpr#n_assign= on <self:ABraAssignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var27 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ABraAssignExpr> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4593);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:AExpr> */
-var32 = var27 == var_other;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-}
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-}
-if (var28){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype34 = type_nit__AExpr.color;
-idtype35 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var33 = 0;
-} else {
-if(cltype34 >= var_new_child->type->table_size) {
-var33 = 0;
-} else {
-var33 = var_new_child->type->type_table[cltype34] == idtype35;
-}
-}
-if (unlikely(!var33)) {
-var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name36);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4594);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4427);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#ABraAssignExpr#n_value= on <self:ABraAssignExpr>*/
+nit__parser_prod___AStarshipExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AStarshipExpr#n_expr2= on <self:AStarshipExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraAssignExpr#n_expr= for (self: ABraAssignExpr, AExpr) */
-void nit__parser_prod___ABraAssignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AStarshipExpr#n_expr= for (self: AStarshipExpr, AExpr) */
+void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ABraAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AStarshipExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -8372,37 +8814,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraAssignExpr#n_args= for (self: ABraAssignExpr, AExprs) */
-void nit__parser_prod___ABraAssignExpr___nit__parser_nodes__ABraFormExpr__n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val = var_node; /* _n_args on <self:ABraAssignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ABraAssignExpr#n_assign= for (self: ABraAssignExpr, TAssign) */
-void nit__parser_prod___ABraAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(val* self, val* p0) {
-val* var_node /* var node: TAssign */;
+/* method parser_prod#AStarshipExpr#n_op= for (self: AStarshipExpr, Token) */
+void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_node; /* _n_assign on <self:ABraAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AStarshipExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAssign> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAssign> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraAssignExpr#n_value= for (self: ABraAssignExpr, AExpr) */
-void nit__parser_prod___ABraAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#AStarshipExpr#n_expr2= for (self: AStarshipExpr, AExpr) */
+void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_node; /* _n_value on <self:ABraAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AStarshipExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -8411,150 +8840,122 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraAssignExpr#visit_all for (self: ABraAssignExpr, Visitor) */
-void nit__parser_prod___ABraAssignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AStarshipExpr#visit_all for (self: AStarshipExpr, Visitor) */
+void nit__parser_prod___AStarshipExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExprs */;
-val* var2 /* : TAssign */;
-val* var3 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ABraAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarshipExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4623);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4451);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraAssignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AStarshipExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4624);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4452);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:ABraAssignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarshipExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4625);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4453);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ABraAssignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4626);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method parser_prod#AStarExpr#init_astarexpr for (self: AStarExpr, nullable AExpr, nullable TStar, nullable AExpr) */
+void nit__parser_prod___AStarExpr___init_astarexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TStar */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
 {
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
+{ /* Inline kernel#Object#init (self) on <self:AStarExpr> */
+RET_LABEL1:(void)0;
 }
-RET_LABEL:;
 }
-/* method parser_prod#ABraReassignExpr#init_abrareassignexpr for (self: ABraReassignExpr, nullable AExpr, nullable AExprs, nullable AAssignOp, nullable AExpr) */
-void nit__parser_prod___ABraReassignExpr___init_abrareassignexpr(val* self, val* p0, val* p1, val* p2, val* p3) {
-val* var_n_expr /* var n_expr: nullable AExpr */;
-val* var_n_args /* var n_args: nullable AExprs */;
-val* var_n_assign_op /* var n_assign_op: nullable AAssignOp */;
-val* var_n_value /* var n_value: nullable AExpr */;
 var_n_expr = p0;
-var_n_args = p1;
-var_n_assign_op = p2;
-var_n_value = p3;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4637);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4463);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ABraReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AStarExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4638);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4464);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
-RET_LABEL1:(void)0;
-}
-}
-if (unlikely(var_n_args == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4639);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val = var_n_args; /* _n_args on <self:ABraReassignExpr> */
-if (var_n_args == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4640);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_args,self) on <var_n_args:nullable AExprs> */
-if (unlikely(var_n_args == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_args->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_args:nullable AExprs> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_assign_op == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4641);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4465);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_n_assign_op; /* _n_assign_op on <self:ABraReassignExpr> */
-if (var_n_assign_op == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AStarExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4642);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4466);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign_op,self) on <var_n_assign_op:nullable AAssignOp> */
-if (unlikely(var_n_assign_op == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TStar> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign_op:nullable AAssignOp> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TStar> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4643);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4467);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_n_value; /* _n_value on <self:ABraReassignExpr> */
-if (var_n_value == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AStarExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4644);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4468);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraReassignExpr#replace_child for (self: ABraReassignExpr, ANode, nullable ANode) */
-void nit__parser_prod___ABraReassignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AStarExpr#replace_child for (self: AStarExpr, ANode, nullable ANode) */
+void nit__parser_prod___AStarExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
 val* var /* : AExpr */;
@@ -8566,7 +8967,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AExprs */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -8574,7 +8975,7 @@ short int var13 /* : Bool */;
 int cltype14;
 int idtype15;
 const char* var_class_name16;
-val* var17 /* : AAssignOp */;
+val* var17 /* : AExpr */;
 short int var18 /* : Bool */;
 short int var20 /* : Bool */;
 short int var22 /* : Bool */;
@@ -8582,21 +8983,13 @@ short int var23 /* : Bool */;
 int cltype24;
 int idtype25;
 const char* var_class_name26;
-val* var27 /* : AExpr */;
-short int var28 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-int cltype34;
-int idtype35;
-const char* var_class_name36;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ABraReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4649);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4473);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
@@ -8630,26 +9023,26 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4650);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4474);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraReassignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ABraReassignExpr#n_expr= on <self:ABraReassignExpr>*/
+nit__parser_prod___AStarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AStarExpr#n_expr= on <self:AStarExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraReassignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AStarExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4653);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4477);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AExprs> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AExprs> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -8662,9 +9055,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AExprs */
-cltype14 = type_nit__AExprs.color;
-idtype15 = type_nit__AExprs.id;
+/* <var_new_child:nullable ANode> isa TStar */
+cltype14 = type_nit__TStar.color;
+idtype15 = type_nit__TStar.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -8676,27 +9069,27 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExprs", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4654);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TStar", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4478);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraReassignExpr___nit__parser_nodes__ABraFormExpr__n_args_61d(self, var_new_child); /* Direct call parser_prod#ABraReassignExpr#n_args= on <self:ABraReassignExpr>*/
+nit__parser_prod___AStarExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AStarExpr#n_op= on <self:AStarExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:ABraReassignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4657);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4481);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AAssignOp> */
+{ /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AAssignOp> */
+{ /* Inline kernel#Object#is_same_instance (var17,var_other) on <var17:AExpr> */
 var22 = var17 == var_other;
 var20 = var22;
 goto RET_LABEL21;
@@ -8709,9 +9102,9 @@ RET_LABEL19:(void)0;
 }
 }
 if (var18){
-/* <var_new_child:nullable ANode> isa AAssignOp */
-cltype24 = type_nit__AAssignOp.color;
-idtype25 = type_nit__AAssignOp.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype24 = type_nit__AExpr.color;
+idtype25 = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var23 = 0;
 } else {
@@ -8723,70 +9116,23 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 }
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AAssignOp", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4658);
-show_backtrace(1);
-}
-{
-nit__parser_prod___ABraReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(self, var_new_child); /* Direct call parser_prod#ABraReassignExpr#n_assign_op= on <self:ABraReassignExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
-var27 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:ABraReassignExpr> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4661);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var27,var_old_child) on <var27:AExpr> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var27,var_other) on <var27:AExpr> */
-var32 = var27 == var_other;
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
-}
-}
-var28 = var30;
-goto RET_LABEL29;
-RET_LABEL29:(void)0;
-}
-}
-if (var28){
-/* <var_new_child:nullable ANode> isa AExpr */
-cltype34 = type_nit__AExpr.color;
-idtype35 = type_nit__AExpr.id;
-if(var_new_child == NULL) {
-var33 = 0;
-} else {
-if(cltype34 >= var_new_child->type->table_size) {
-var33 = 0;
-} else {
-var33 = var_new_child->type->type_table[cltype34] == idtype35;
-}
-}
-if (unlikely(!var33)) {
-var_class_name36 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name36);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4662);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4482);
+fatal_exit(1);
 }
 {
-nit__parser_prod___ABraReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#ABraReassignExpr#n_value= on <self:ABraReassignExpr>*/
+nit__parser_prod___AStarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AStarExpr#n_expr2= on <self:AStarExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraReassignExpr#n_expr= for (self: ABraReassignExpr, AExpr) */
-void nit__parser_prod___ABraReassignExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+/* method parser_prod#AStarExpr#n_expr= for (self: AStarExpr, AExpr) */
+void nit__parser_prod___AStarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ABraReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AStarExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -8795,37 +9141,24 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraReassignExpr#n_args= for (self: ABraReassignExpr, AExprs) */
-void nit__parser_prod___ABraReassignExpr___nit__parser_nodes__ABraFormExpr__n_args_61d(val* self, val* p0) {
-val* var_node /* var node: AExprs */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val = var_node; /* _n_args on <self:ABraReassignExpr> */
-{
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExprs> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExprs> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#ABraReassignExpr#n_assign_op= for (self: ABraReassignExpr, AAssignOp) */
-void nit__parser_prod___ABraReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(val* self, val* p0) {
-val* var_node /* var node: AAssignOp */;
+/* method parser_prod#AStarExpr#n_op= for (self: AStarExpr, Token) */
+void nit__parser_prod___AStarExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_node; /* _n_assign_op on <self:ABraReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AStarExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AAssignOp> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AAssignOp> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraReassignExpr#n_value= for (self: ABraReassignExpr, AExpr) */
-void nit__parser_prod___ABraReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#AStarExpr#n_expr2= for (self: AStarExpr, AExpr) */
+void nit__parser_prod___AStarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_node; /* _n_value on <self:ABraReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AStarExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -8834,250 +9167,125 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#ABraReassignExpr#visit_all for (self: ABraReassignExpr, Visitor) */
-void nit__parser_prod___ABraReassignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AStarExpr#visit_all for (self: AStarExpr, Visitor) */
+void nit__parser_prod___AStarExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
 val* var /* : AExpr */;
-val* var1 /* : AExprs */;
-val* var2 /* : AAssignOp */;
-val* var3 /* : AExpr */;
+val* var1 /* : Token */;
+val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ABraReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarExpr> */
 if (unlikely(var == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4691);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4506);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraReassignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AStarExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4692);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4507);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:ABraReassignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4693);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4508);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var3 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:ABraReassignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4694);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var3); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-RET_LABEL:;
-}
-/* method parser_prod#AVarExpr#init_avarexpr for (self: AVarExpr, nullable TId) */
-void nit__parser_prod___AVarExpr___init_avarexpr(val* self, val* p0) {
-val* var_n_id /* var n_id: nullable TId */;
-var_n_id = p0;
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4702);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val = var_n_id; /* _n_id on <self:AVarExpr> */
-if (var_n_id == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4703);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId> */
-if (unlikely(var_n_id == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId> */
-RET_LABEL1:(void)0;
-}
-}
-RET_LABEL:;
-}
-/* method parser_prod#AVarExpr#replace_child for (self: AVarExpr, ANode, nullable ANode) */
-void nit__parser_prod___AVarExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
-val* var_old_child /* var old_child: ANode */;
-val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : TId */;
-short int var1 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var3 /* : Bool */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-var_old_child = p0;
-var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val; /* _n_id on <self:AVarExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4708);
-show_backtrace(1);
-}
-{
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:TId> */
-var_other = var_old_child;
-{
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TId> */
-var5 = var == var_other;
-var3 = var5;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
-}
-}
-var1 = var3;
-goto RET_LABEL2;
-RET_LABEL2:(void)0;
-}
-}
-if (var1){
-/* <var_new_child:nullable ANode> isa TId */
-cltype = type_nit__TId.color;
-idtype = type_nit__TId.id;
-if(var_new_child == NULL) {
-var6 = 0;
-} else {
-if(cltype >= var_new_child->type->table_size) {
-var6 = 0;
-} else {
-var6 = var_new_child->type->type_table[cltype] == idtype;
-}
-}
-if (unlikely(!var6)) {
-var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TId", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4709);
-show_backtrace(1);
-}
-{
-nit__parser_prod___AVarExpr___nit__parser_nodes__AVarFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#AVarExpr#n_id= on <self:AVarExpr>*/
-}
-goto RET_LABEL;
-} else {
-}
 RET_LABEL:;
 }
-/* method parser_prod#AVarExpr#n_id= for (self: AVarExpr, TId) */
-void nit__parser_prod___AVarExpr___nit__parser_nodes__AVarFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TId */;
-var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val = var_node; /* _n_id on <self:AVarExpr> */
+/* method parser_prod#AStarstarExpr#init_astarstarexpr for (self: AStarstarExpr, nullable AExpr, nullable TStarstar, nullable AExpr) */
+void nit__parser_prod___AStarstarExpr___init_astarstarexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TStarstar */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TId> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TId> */
+{ /* Inline kernel#Object#init (self) on <self:AStarstarExpr> */
 RET_LABEL1:(void)0;
 }
 }
-RET_LABEL:;
-}
-/* method parser_prod#AVarExpr#visit_all for (self: AVarExpr, Visitor) */
-void nit__parser_prod___AVarExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
-val* var_v /* var v: Visitor */;
-val* var /* : TId */;
-var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val; /* _n_id on <self:AVarExpr> */
-if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4723);
-show_backtrace(1);
-}
-{
-nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
-}
-RET_LABEL:;
-}
-/* method parser_prod#AVarAssignExpr#init_avarassignexpr for (self: AVarAssignExpr, nullable TId, nullable TAssign, nullable AExpr) */
-void nit__parser_prod___AVarAssignExpr___init_avarassignexpr(val* self, val* p0, val* p1, val* p2) {
-val* var_n_id /* var n_id: nullable TId */;
-val* var_n_assign /* var n_assign: nullable TAssign */;
-val* var_n_value /* var n_value: nullable AExpr */;
-var_n_id = p0;
-var_n_assign = p1;
-var_n_value = p2;
-if (unlikely(var_n_id == NULL)) {
+var_n_expr = p0;
+var_n_op = p1;
+var_n_expr2 = p2;
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4733);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4518);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val = var_n_id; /* _n_id on <self:AVarAssignExpr> */
-if (var_n_id == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:AStarstarExpr> */
+if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4734);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4519);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId> */
-if (unlikely(var_n_id == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId> */
-RET_LABEL1:(void)0;
+var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_assign == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4735);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4520);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_n_assign; /* _n_assign on <self:AVarAssignExpr> */
-if (var_n_assign == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:AStarstarExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4521);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign,self) on <var_n_assign:nullable TAssign> */
-if (unlikely(var_n_assign == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TStarstar> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign:nullable TAssign> */
-RET_LABEL2:(void)0;
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TStarstar> */
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4737);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4522);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_n_value; /* _n_value on <self:AVarAssignExpr> */
-if (var_n_value == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:AStarstarExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4738);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4523);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
-RET_LABEL3:(void)0;
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarAssignExpr#replace_child for (self: AVarAssignExpr, ANode, nullable ANode) */
-void nit__parser_prod___AVarAssignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#AStarstarExpr#replace_child for (self: AStarstarExpr, ANode, nullable ANode) */
+void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : TId */;
+val* var /* : AExpr */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -9086,7 +9294,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : TAssign */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -9104,17 +9312,17 @@ int idtype25;
 const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val; /* _n_id on <self:AVarAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarstarExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4743);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4528);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:TId> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TId> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -9127,9 +9335,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa TId */
-cltype = type_nit__TId.color;
-idtype = type_nit__TId.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype = type_nit__AExpr.color;
+idtype = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -9141,27 +9349,27 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TId", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4744);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4529);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AVarAssignExpr___nit__parser_nodes__AVarFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#AVarAssignExpr#n_id= on <self:AVarAssignExpr>*/
+nit__parser_prod___AStarstarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#AStarstarExpr#n_expr= on <self:AStarstarExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:AVarAssignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AStarstarExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4747);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4532);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:TAssign> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:TAssign> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -9174,9 +9382,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa TAssign */
-cltype14 = type_nit__TAssign.color;
-idtype15 = type_nit__TAssign.id;
+/* <var_new_child:nullable ANode> isa TStarstar */
+cltype14 = type_nit__TStarstar.color;
+idtype15 = type_nit__TStarstar.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -9188,21 +9396,21 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TAssign", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4748);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TStarstar", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4533);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AVarAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(self, var_new_child); /* Direct call parser_prod#AVarAssignExpr#n_assign= on <self:AVarAssignExpr>*/
+nit__parser_prod___AStarstarExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#AStarstarExpr#n_op= on <self:AStarstarExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:AVarAssignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarstarExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4751);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4536);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
@@ -9236,48 +9444,48 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4752);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4537);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AVarAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#AVarAssignExpr#n_value= on <self:AVarAssignExpr>*/
+nit__parser_prod___AStarstarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#AStarstarExpr#n_expr2= on <self:AStarstarExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarAssignExpr#n_id= for (self: AVarAssignExpr, TId) */
-void nit__parser_prod___AVarAssignExpr___nit__parser_nodes__AVarFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TId */;
+/* method parser_prod#AStarstarExpr#n_expr= for (self: AStarstarExpr, AExpr) */
+void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val = var_node; /* _n_id on <self:AVarAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:AStarstarExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TId> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TId> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarAssignExpr#n_assign= for (self: AVarAssignExpr, TAssign) */
-void nit__parser_prod___AVarAssignExpr___nit__parser_nodes__AAssignFormExpr__n_assign_61d(val* self, val* p0) {
-val* var_node /* var node: TAssign */;
+/* method parser_prod#AStarstarExpr#n_op= for (self: AStarstarExpr, Token) */
+void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val = var_node; /* _n_assign on <self:AVarAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:AStarstarExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TAssign> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TAssign> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarAssignExpr#n_value= for (self: AVarAssignExpr, AExpr) */
-void nit__parser_prod___AVarAssignExpr___nit__parser_nodes__AAssignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#AStarstarExpr#n_expr2= for (self: AStarstarExpr, AExpr) */
+void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val = var_node; /* _n_value on <self:AVarAssignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:AStarstarExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -9286,120 +9494,125 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarAssignExpr#visit_all for (self: AVarAssignExpr, Visitor) */
-void nit__parser_prod___AVarAssignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#AStarstarExpr#visit_all for (self: AStarstarExpr, Visitor) */
+void nit__parser_prod___AStarstarExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : TId */;
-val* var1 /* : TAssign */;
+val* var /* : AExpr */;
+val* var1 /* : Token */;
 val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val; /* _n_id on <self:AVarAssignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:AStarstarExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4776);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4561);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_assign].val; /* _n_assign on <self:AVarAssignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:AStarstarExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4777);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4562);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:AVarAssignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:AStarstarExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4778);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4563);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarReassignExpr#init_avarreassignexpr for (self: AVarReassignExpr, nullable TId, nullable AAssignOp, nullable AExpr) */
-void nit__parser_prod___AVarReassignExpr___init_avarreassignexpr(val* self, val* p0, val* p1, val* p2) {
-val* var_n_id /* var n_id: nullable TId */;
-val* var_n_assign_op /* var n_assign_op: nullable AAssignOp */;
-val* var_n_value /* var n_value: nullable AExpr */;
-var_n_id = p0;
-var_n_assign_op = p1;
-var_n_value = p2;
-if (unlikely(var_n_id == NULL)) {
+/* method parser_prod#ASlashExpr#init_aslashexpr for (self: ASlashExpr, nullable AExpr, nullable TSlash, nullable AExpr) */
+void nit__parser_prod___ASlashExpr___init_aslashexpr(val* self, val* p0, val* p1, val* p2) {
+val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TSlash */;
+val* var_n_expr2 /* var n_expr2: nullable AExpr */;
+{
+{ /* Inline kernel#Object#init (self) on <self:ASlashExpr> */
+RET_LABEL1:(void)0;
+}
+}
+var_n_expr = p0;
+var_n_op = p1;
+var_n_expr2 = p2;
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4788);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4573);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val = var_n_id; /* _n_id on <self:AVarReassignExpr> */
-if (var_n_id == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ASlashExpr> */
+if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4789);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4574);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_id,self) on <var_n_id:nullable TId> */
-if (unlikely(var_n_id == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
+if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_id->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_id:nullable TId> */
-RET_LABEL1:(void)0;
+var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
+RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_assign_op == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4790);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4575);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_n_assign_op; /* _n_assign_op on <self:AVarReassignExpr> */
-if (var_n_assign_op == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:ASlashExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4791);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4576);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_assign_op,self) on <var_n_assign_op:nullable AAssignOp> */
-if (unlikely(var_n_assign_op == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TSlash> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_assign_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_assign_op:nullable AAssignOp> */
-RET_LABEL2:(void)0;
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TSlash> */
+RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_value == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4792);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4577);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_n_value; /* _n_value on <self:AVarReassignExpr> */
-if (var_n_value == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ASlashExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4793);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4578);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_value,self) on <var_n_value:nullable AExpr> */
-if (unlikely(var_n_value == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_value->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_value:nullable AExpr> */
-RET_LABEL3:(void)0;
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+RET_LABEL4:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarReassignExpr#replace_child for (self: AVarReassignExpr, ANode, nullable ANode) */
-void nit__parser_prod___AVarReassignExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
+/* method parser_prod#ASlashExpr#replace_child for (self: ASlashExpr, ANode, nullable ANode) */
+void nit__parser_prod___ASlashExpr___nit__parser_nodes__ANode__replace_child(val* self, val* p0, val* p1) {
 val* var_old_child /* var old_child: ANode */;
 val* var_new_child /* var new_child: nullable ANode */;
-val* var /* : TId */;
+val* var /* : AExpr */;
 short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
@@ -9408,7 +9621,7 @@ short int var6 /* : Bool */;
 int cltype;
 int idtype;
 const char* var_class_name;
-val* var7 /* : AAssignOp */;
+val* var7 /* : Token */;
 short int var8 /* : Bool */;
 short int var10 /* : Bool */;
 short int var12 /* : Bool */;
@@ -9426,17 +9639,17 @@ int idtype25;
 const char* var_class_name26;
 var_old_child = p0;
 var_new_child = p1;
-var = self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val; /* _n_id on <self:AVarReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASlashExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4798);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4583);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var,var_old_child) on <var:TId> */
+{ /* Inline kernel#Object#== (var,var_old_child) on <var:AExpr> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:TId> */
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:AExpr> */
 var5 = var == var_other;
 var3 = var5;
 goto RET_LABEL4;
@@ -9449,9 +9662,9 @@ RET_LABEL2:(void)0;
 }
 }
 if (var1){
-/* <var_new_child:nullable ANode> isa TId */
-cltype = type_nit__TId.color;
-idtype = type_nit__TId.id;
+/* <var_new_child:nullable ANode> isa AExpr */
+cltype = type_nit__AExpr.color;
+idtype = type_nit__AExpr.id;
 if(var_new_child == NULL) {
 var6 = 0;
 } else {
@@ -9463,27 +9676,27 @@ var6 = var_new_child->type->type_table[cltype] == idtype;
 }
 if (unlikely(!var6)) {
 var_class_name = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TId", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4799);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4584);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AVarReassignExpr___nit__parser_nodes__AVarFormExpr__n_id_61d(self, var_new_child); /* Direct call parser_prod#AVarReassignExpr#n_id= on <self:AVarReassignExpr>*/
+nit__parser_prod___ASlashExpr___nit__parser_nodes__ASendExpr__n_expr_61d(self, var_new_child); /* Direct call parser_prod#ASlashExpr#n_expr= on <self:ASlashExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var7 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:AVarReassignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ASlashExpr> */
 if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4802);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4587);
+fatal_exit(1);
 }
 {
-{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:AAssignOp> */
+{ /* Inline kernel#Object#== (var7,var_old_child) on <var7:Token> */
 var_other = var_old_child;
 {
-{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:AAssignOp> */
+{ /* Inline kernel#Object#is_same_instance (var7,var_other) on <var7:Token> */
 var12 = var7 == var_other;
 var10 = var12;
 goto RET_LABEL11;
@@ -9496,9 +9709,9 @@ RET_LABEL9:(void)0;
 }
 }
 if (var8){
-/* <var_new_child:nullable ANode> isa AAssignOp */
-cltype14 = type_nit__AAssignOp.color;
-idtype15 = type_nit__AAssignOp.id;
+/* <var_new_child:nullable ANode> isa TSlash */
+cltype14 = type_nit__TSlash.color;
+idtype15 = type_nit__TSlash.id;
 if(var_new_child == NULL) {
 var13 = 0;
 } else {
@@ -9510,21 +9723,21 @@ var13 = var_new_child->type->type_table[cltype14] == idtype15;
 }
 if (unlikely(!var13)) {
 var_class_name16 = var_new_child == NULL ? "null" : var_new_child->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AAssignOp", var_class_name16);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4803);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "TSlash", var_class_name16);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4588);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AVarReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(self, var_new_child); /* Direct call parser_prod#AVarReassignExpr#n_assign_op= on <self:AVarReassignExpr>*/
+nit__parser_prod___ASlashExpr___nit__parser_nodes__ABinopExpr__n_op_61d(self, var_new_child); /* Direct call parser_prod#ASlashExpr#n_op= on <self:ASlashExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
-var17 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:AVarReassignExpr> */
+var17 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ASlashExpr> */
 if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4806);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4591);
+fatal_exit(1);
 }
 {
 { /* Inline kernel#Object#== (var17,var_old_child) on <var17:AExpr> */
@@ -9558,48 +9771,48 @@ var23 = var_new_child->type->type_table[cltype24] == idtype25;
 if (unlikely(!var23)) {
 var_class_name26 = var_new_child == NULL ? "null" : var_new_child->type->name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "AExpr", var_class_name26);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4807);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4592);
+fatal_exit(1);
 }
 {
-nit__parser_prod___AVarReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(self, var_new_child); /* Direct call parser_prod#AVarReassignExpr#n_value= on <self:AVarReassignExpr>*/
+nit__parser_prod___ASlashExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(self, var_new_child); /* Direct call parser_prod#ASlashExpr#n_expr2= on <self:ASlashExpr>*/
 }
 goto RET_LABEL;
 } else {
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarReassignExpr#n_id= for (self: AVarReassignExpr, TId) */
-void nit__parser_prod___AVarReassignExpr___nit__parser_nodes__AVarFormExpr__n_id_61d(val* self, val* p0) {
-val* var_node /* var node: TId */;
+/* method parser_prod#ASlashExpr#n_expr= for (self: ASlashExpr, AExpr) */
+void nit__parser_prod___ASlashExpr___nit__parser_nodes__ASendExpr__n_expr_61d(val* self, val* p0) {
+val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val = var_node; /* _n_id on <self:AVarReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_node; /* _n_expr on <self:ASlashExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:TId> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:TId> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarReassignExpr#n_assign_op= for (self: AVarReassignExpr, AAssignOp) */
-void nit__parser_prod___AVarReassignExpr___nit__parser_nodes__AReassignFormExpr__n_assign_op_61d(val* self, val* p0) {
-val* var_node /* var node: AAssignOp */;
+/* method parser_prod#ASlashExpr#n_op= for (self: ASlashExpr, Token) */
+void nit__parser_prod___ASlashExpr___nit__parser_nodes__ABinopExpr__n_op_61d(val* self, val* p0) {
+val* var_node /* var node: Token */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val = var_node; /* _n_assign_op on <self:AVarReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_node; /* _n_op on <self:ASlashExpr> */
 {
-{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AAssignOp> */
-var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AAssignOp> */
+{ /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:Token> */
+var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:Token> */
 RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarReassignExpr#n_value= for (self: AVarReassignExpr, AExpr) */
-void nit__parser_prod___AVarReassignExpr___nit__parser_nodes__AReassignFormExpr__n_value_61d(val* self, val* p0) {
+/* method parser_prod#ASlashExpr#n_expr2= for (self: ASlashExpr, AExpr) */
+void nit__parser_prod___ASlashExpr___nit__parser_nodes__ABinopExpr__n_expr2_61d(val* self, val* p0) {
 val* var_node /* var node: AExpr */;
 var_node = p0;
-self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val = var_node; /* _n_value on <self:AVarReassignExpr> */
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_node; /* _n_expr2 on <self:ASlashExpr> */
 {
 { /* Inline parser_nodes#ANode#parent= (var_node,self) on <var_node:AExpr> */
 var_node->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_node:AExpr> */
@@ -9608,172 +9821,117 @@ RET_LABEL1:(void)0;
 }
 RET_LABEL:;
 }
-/* method parser_prod#AVarReassignExpr#visit_all for (self: AVarReassignExpr, Visitor) */
-void nit__parser_prod___AVarReassignExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
+/* method parser_prod#ASlashExpr#visit_all for (self: ASlashExpr, Visitor) */
+void nit__parser_prod___ASlashExpr___nit__parser_nodes__ANode__visit_all(val* self, val* p0) {
 val* var_v /* var v: Visitor */;
-val* var /* : TId */;
-val* var1 /* : AAssignOp */;
+val* var /* : AExpr */;
+val* var1 /* : Token */;
 val* var2 /* : AExpr */;
 var_v = p0;
-var = self->attrs[COLOR_nit__parser_nodes__AVarFormExpr___n_id].val; /* _n_id on <self:AVarReassignExpr> */
+var = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASlashExpr> */
 if (unlikely(var == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4831);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4616);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var1 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_assign_op].val; /* _n_assign_op on <self:AVarReassignExpr> */
+var1 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ASlashExpr> */
 if (unlikely(var1 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_assign_op");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4832);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4617);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var1); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
-var2 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:AVarReassignExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ASlashExpr> */
 if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4833);
-show_backtrace(1);
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4618);
+fatal_exit(1);
 }
 {
 nit___nit__Visitor___enter_visit(var_v, var2); /* Direct call parser_nodes#Visitor#enter_visit on <var_v:Visitor>*/
 }
 RET_LABEL:;
 }
-/* method parser_prod#ACrangeExpr#init_acrangeexpr for (self: ACrangeExpr, nullable TObra, nullable AExpr, nullable AExpr, nullable TCbra, nullable AAnnotations) */
-void nit__parser_prod___ACrangeExpr___init_acrangeexpr(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
-val* var_n_obra /* var n_obra: nullable TObra */;
+/* method parser_prod#APercentExpr#init_apercentexpr for (self: APercentExpr, nullable AExpr, nullable TPercent, nullable AExpr) */
+void nit__parser_prod___APercentExpr___init_apercentexpr(val* self, val* p0, val* p1, val* p2) {
 val* var_n_expr /* var n_expr: nullable AExpr */;
+val* var_n_op /* var n_op: nullable TPercent */;
 val* var_n_expr2 /* var n_expr2: nullable AExpr */;
-val* var_n_cbra /* var n_cbra: nullable TCbra */;
-val* var_n_annotations /* var n_annotations: nullable AAnnotations */;
-val* var /* : null */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var8 /* : Bool */;
-short int var9 /* : Bool */;
-var_n_obra = p0;
-var_n_expr = p1;
-var_n_expr2 = p2;
-var_n_cbra = p3;
-var_n_annotations = p4;
-if (unlikely(var_n_obra == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4900);
-show_backtrace(1);
-}
-self->attrs[COLOR_nit__parser_nodes__ACrangeExpr___n_obra].val = var_n_obra; /* _n_obra on <self:ACrangeExpr> */
-if (var_n_obra == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4901);
-show_backtrace(1);
-} else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_obra,self) on <var_n_obra:nullable TObra> */
-if (unlikely(var_n_obra == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
-}
-var_n_obra->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_obra:nullable TObra> */
+{
+{ /* Inline kernel#Object#init (self) on <self:APercentExpr> */
 RET_LABEL1:(void)0;
 }
 }
+var_n_expr = p0;
+var_n_op = p1;
+var_n_expr2 = p2;
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4902);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4628);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ARangeExpr___n_expr].val = var_n_expr; /* _n_expr on <self:ACrangeExpr> */
+self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val = var_n_expr; /* _n_expr on <self:APercentExpr> */
 if (var_n_expr == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4903);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4629);
+fatal_exit(1);
 } else {
 { /* Inline parser_nodes#ANode#parent= (var_n_expr,self) on <var_n_expr:nullable AExpr> */
 if (unlikely(var_n_expr == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
 var_n_expr->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr:nullable AExpr> */
 RET_LABEL2:(void)0;
 }
 }
-if (unlikely(var_n_expr2 == NULL)) {
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4904);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4630);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ARangeExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:ACrangeExpr> */
-if (var_n_expr2 == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val = var_n_op; /* _n_op on <self:APercentExpr> */
+if (var_n_op == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4905);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4631);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
-if (unlikely(var_n_expr2 == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_op,self) on <var_n_op:nullable TPercent> */
+if (unlikely(var_n_op == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
+var_n_op->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_op:nullable TPercent> */
 RET_LABEL3:(void)0;
 }
 }
-if (unlikely(var_n_cbra == NULL)) {
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4906);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4632);
+fatal_exit(1);
 }
-self->attrs[COLOR_nit__parser_nodes__ACrangeExpr___n_cbra].val = var_n_cbra; /* _n_cbra on <self:ACrangeExpr> */
-if (var_n_cbra == NULL) {
+self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val = var_n_expr2; /* _n_expr2 on <self:APercentExpr> */
+if (var_n_expr2 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4907);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_prod, 4633);
+fatal_exit(1);
 } else {
-{ /* Inline parser_nodes#ANode#parent= (var_n_cbra,self) on <var_n_cbra:nullable TCbra> */
-if (unlikely(var_n_cbra == NULL)) {
+{ /* Inline parser_nodes#ANode#parent= (var_n_expr2,self) on <var_n_expr2:nullable AExpr> */
+if (unlikely(var_n_expr2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 36);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 46);
+fatal_exit(1);
 }
-var_n_cbra->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_cbra:nullable TCbra> */
+var_n_expr2->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_expr2:nullable AExpr> */
 RET_LABEL4:(void)0;
 }
 }
-self->attrs[COLOR_nit__parser_nodes__Prod___n_annotations].val = var_n_annotations; /* _n_annotations on <self:ACrangeExpr> */
-var = NULL;
-if (var_n_annotations == NULL) {
-var5 = 0; /* is null */
-} else {
-var5 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_n_annotations,var) on <var_n_annotations:nullable AAnnotations> */
-var_other = var;
-{
-var8 = ((short int (*)(val* self, val* p0))(var_n_annotations->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n_annotations, var_other) /* == on <var_n_annotations:nullable AAnnotations(AAnnotations)>*/;
-}
-var9 = !var8;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
-}
-var5 = var6;
-}
-if (var5){
-{
-{ /* Inline parser_nodes#ANode#parent= (var_n_annotations,self) on <var_n_annotations:nullable AAnnotations(AAnnotations)> */
-var_n_annotations->attrs[COLOR_nit__parser_nodes__ANode___parent].val = self; /* _parent on <var_n_annotations:nullable AAnnotations(AAnnotations)> */
-RET_LABEL10:(void)0;
-}
-}
-} else {
-}
 RET_LABEL:;
 }