Merge remote branch 'pu/new-style_attributes' into wip
[nit.git] / c_src / parser_prod._sep.c
index d86274c..09231b2 100644 (file)
 /* This C file is generated by NIT to compile module parser_prod. */
 #include "parser_prod._sep.h"
-val_t parser_prod___PNode___parent(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 9, LOCATE_parser_prod___PNode___parent};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  tracehead = trace.prev;
-  return ATTR_parser_prod___PNode____parent( self) /*PNode::_parent*/;
-}
-void parser_prod___PNode___parent__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9, LOCATE_parser_prod___PNode___parent__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  ATTR_parser_prod___PNode____parent( self) /*PNode::_parent*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___PNode___remove_child(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 12, LOCATE_parser_prod___PNode___remove_child};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ((parser_prod___PNode___replace_child_t)CALL(variable[3],COLOR_parser_prod___PNode___replace_child))(variable[3],  variable[1] /*child*/,  NIT_NULL /*null*/) /*PNode::replace_child*/;
-  return_label0: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___PNode___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 18, LOCATE_parser_prod___PNode___replace_child};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
+val_t parser_prod___ANode___parent(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9;
+  fra.me.meth = LOCATE_parser_prod___ANode___parent;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[0] = ATTR_parser_prod___ANode____parent(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:9 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+void parser_prod___ANode___parent__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9;
+  fra.me.meth = LOCATE_parser_prod___ANode___parent__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9 */
+  ATTR_parser_prod___ANode____parent(fra.me.REG[0]) = fra.me.REG[1];
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANode___remove_child(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 12;
+  fra.me.meth = LOCATE_parser_prod___ANode___remove_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:15 */
+  CALL_parser_prod___ANode___replace_child(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], NIT_NULL);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANode___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 18;
+  fra.me.meth = LOCATE_parser_prod___ANode___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./parser//parser_prod.nit:18 */
   fprintf(stderr, "Deferred method called");
   fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 18);
   nit_exit(1);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___PNode___replace_with(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 21, LOCATE_parser_prod___PNode___replace_with};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_prod___PNode____parent(variable[3]) /*PNode::_parent*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_prod___PNode____parent(variable[3]) /*PNode::_parent*/;
-    variable[4] = variable[0];
-    ((parser_prod___PNode___replace_child_t)CALL(variable[3],COLOR_parser_prod___PNode___replace_child))(variable[3], variable[4],  variable[1] /*node*/) /*PNode::replace_child*/;
-  }
-  return_label1: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___PNode___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 29, LOCATE_parser_prod___PNode___visit_all};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANode___replace_with(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 21;
+  fra.me.meth = LOCATE_parser_prod___ANode___replace_with;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_prod___ANode____parent(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:24 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_prod___ANode____parent(fra.me.REG[0]);
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:25 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 25);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___replace_child(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANode___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 29;
+  fra.me.meth = LOCATE_parser_prod___ANode___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./parser//parser_prod.nit:29 */
   fprintf(stderr, "Deferred method called");
   fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 29);
   nit_exit(1);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___PNode___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 33, LOCATE_parser_prod___PNode___visit_all_reverse};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANode___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 33;
+  fra.me.meth = LOCATE_parser_prod___ANode___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./parser//parser_prod.nit:33 */
   fprintf(stderr, "Deferred method called");
   fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 33);
   nit_exit(1);
-  tracehead = trace.prev;
-  return;
-}
-val_t parser_prod___PNode___locate(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 37, LOCATE_parser_prod___PNode___locate};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 37);
-  nit_exit(1);
-  tracehead = trace.prev;
-  return NIT_NULL;
-}
-val_t parser_prod___PNode___line_number(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 40, LOCATE_parser_prod___PNode___line_number};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 40);
-  nit_exit(1);
-  tracehead = trace.prev;
-  return NIT_NULL;
-}
-void parser_prod___PNode___printl(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 43, LOCATE_parser_prod___PNode___printl};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[4] = NEW_String_string___String___init(); /*new String*/
-  variable[5] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[6] = variable[5];
-  ((string___String___append_t)CALL(variable[4],COLOR_abstract_collection___IndexedCollection___append))(variable[4], variable[6]) /*String::append*/;
-  variable[7] = variable[0];
-  variable[7] = ((parser_prod___PNode___locate_t)CALL(variable[7],COLOR_parser_prod___PNode___locate))(variable[7]) /*PNode::locate*/;
-  variable[8] = variable[7];
-  ((string___String___append_t)CALL(variable[4],COLOR_abstract_collection___IndexedCollection___append))(variable[4], variable[8]) /*String::append*/;
-  variable[9] = NEW_String_string___String___with_native(BOX_NativeString(": "), TAG_Int(2)); /*new String*/
-  variable[10] = variable[9];
-  ((string___String___append_t)CALL(variable[4],COLOR_abstract_collection___IndexedCollection___append))(variable[4], variable[10]) /*String::append*/;
-  variable[11] =  variable[1] /*str*/;
-  ((string___String___append_t)CALL(variable[4],COLOR_abstract_collection___IndexedCollection___append))(variable[4], variable[11]) /*String::append*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString("\n"), TAG_Int(1)); /*new String*/
-  variable[13] = variable[12];
-  ((string___String___append_t)CALL(variable[4],COLOR_abstract_collection___IndexedCollection___append))(variable[4], variable[13]) /*String::append*/;
-  ((file___Object___print_t)CALL(variable[3],COLOR_file___Object___print))(variable[3], variable[4]) /*Object::print*/;
-  return_label2: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Token___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 53, LOCATE_parser_prod___Token___replace_child};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  return_label3: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Token___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 51, LOCATE_parser_prod___Token___visit_all};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  return_label4: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Token___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 52, LOCATE_parser_prod___Token___visit_all_reverse};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  return_label5: while(false);
-  tracehead = trace.prev;
-  return;
-}
-val_t parser_prod___Token___locate(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 55, LOCATE_parser_prod___Token___locate};
-  val_t variable[17];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[2] = NEW_String_string___String___init(); /*new String*/
-  variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[4] = variable[3];
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[4]) /*String::append*/;
-  variable[5] = variable[0];
-  variable[5] = ((lexer___Token___filename_t)CALL(variable[5],COLOR_lexer___Token___filename))(variable[5]) /*Token::filename*/;
-  variable[6] = variable[5];
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[6]) /*String::append*/;
-  variable[7] = NEW_String_string___String___with_native(BOX_NativeString(":"), TAG_Int(1)); /*new String*/
-  variable[8] = variable[7];
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[8]) /*String::append*/;
-  variable[9] = variable[0];
-  variable[9] = ((lexer___Token___line_t)CALL(variable[9],COLOR_lexer___Token___line))(variable[9]) /*Token::line*/;
-  variable[10] = variable[9];
-  variable[10] = ((string___String___to_s_t)CALL(variable[10],COLOR_string___Object___to_s))(variable[10]) /*String::to_s*/;
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[10]) /*String::append*/;
-  variable[11] = NEW_String_string___String___with_native(BOX_NativeString(","), TAG_Int(1)); /*new String*/
-  variable[12] = variable[11];
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[12]) /*String::append*/;
-  variable[13] = variable[0];
-  variable[13] = ((lexer___Token___pos_t)CALL(variable[13],COLOR_lexer___Token___pos))(variable[13]) /*Token::pos*/;
-  variable[14] = variable[13];
-  variable[14] = ((string___String___to_s_t)CALL(variable[14],COLOR_string___Object___to_s))(variable[14]) /*String::to_s*/;
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[14]) /*String::append*/;
-  variable[15] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[16] = variable[15];
-  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[16]) /*String::append*/;
-  variable[1] = variable[2];
-  goto return_label6;
-  return_label6: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t parser_prod___Token___line_number(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 60, LOCATE_parser_prod___Token___line_number};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ((lexer___Token___line_t)CALL(variable[2],COLOR_lexer___Token___line))(variable[2]) /*Token::line*/;
-  variable[1] = variable[2];
-  goto return_label7;
-  return_label7: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-void parser_prod___Prod___replace_with(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 83, LOCATE_parser_prod___Prod___replace_with};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  ((parser_prod___Prod___replace_with_t)CALL(variable[0],COLOR_SUPER_parser_prod___Prod___replace_with))(variable[0], variable[1]) /*super Prod::replace_with*/;
-  variable[3] = TAG_Bool(( variable[1] /*n*/==NIT_NULL) || VAL_ISA( variable[1] /*n*/, COLOR_Prod, ID_Prod)) /*cast Prod*/;
-  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___Prod___replace_with, LOCATE_parser_prod, 86); nit_exit(1);}
-  variable[3] = variable[0];
-  variable[3] = ((parser_prod___Prod___first_token_t)CALL(variable[3],COLOR_parser_prod___Prod___first_token))(variable[3]) /*Prod::first_token*/;
-  ((parser_prod___Prod___first_token__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___Prod___first_token__eq))( variable[1] /*n*/, variable[3]) /*Prod::first_token=*/;
-  variable[3] = variable[0];
-  variable[3] = ((parser_prod___Prod___last_token_t)CALL(variable[3],COLOR_parser_prod___Prod___last_token))(variable[3]) /*Prod::last_token*/;
-  ((parser_prod___Prod___last_token__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___Prod___last_token__eq))( variable[1] /*n*/, variable[3]) /*Prod::last_token=*/;
-  return_label8: while(false);
-  tracehead = trace.prev;
-  return;
-}
-val_t parser_prod___Prod___locate(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 70, LOCATE_parser_prod___Prod___locate};
-  val_t variable[17];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ((parser_prod___Prod___first_token_t)CALL(variable[2],COLOR_parser_prod___Prod___first_token))(variable[2]) /*Prod::first_token*/;
-  variable[2] = TAG_Bool((variable[2] ==  NIT_NULL /*null*/) || ((variable[2] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[2],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[2],COLOR_kernel___Object_____eqeq))(variable[2],  NIT_NULL /*null*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[2])) { /*if*/
-    variable[2] = NEW_String_string___String___with_native(BOX_NativeString("????"), TAG_Int(4)); /*new String*/
-    variable[1] = variable[2];
-    goto return_label9;
-  }
-  variable[3] = variable[0];
-  variable[3] = ((parser_prod___Prod___last_token_t)CALL(variable[3],COLOR_parser_prod___Prod___last_token))(variable[3]) /*Prod::last_token*/;
-  variable[3] = ((lexer___Token___pos_t)CALL(variable[3],COLOR_lexer___Token___pos))(variable[3]) /*Token::pos*/;
-  variable[4] = variable[0];
-  variable[4] = ((parser_prod___Prod___last_token_t)CALL(variable[4],COLOR_parser_prod___Prod___last_token))(variable[4]) /*Prod::last_token*/;
-  variable[4] = ((lexer___Token___text_t)CALL(variable[4],COLOR_lexer___Token___text))(variable[4]) /*Token::text*/;
-  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
-  variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int(variable[4]));
-  variable[3] = TAG_Int(UNTAG_Int(variable[3])-UNTAG_Int( TAG_Int(1)));
-  variable[2] = variable[3];
-  variable[3] = variable[0];
-  variable[3] = ((parser_prod___Prod___first_token_t)CALL(variable[3],COLOR_parser_prod___Prod___first_token))(variable[3]) /*Prod::first_token*/;
-  variable[3] = ((lexer___Token___line_t)CALL(variable[3],COLOR_lexer___Token___line))(variable[3]) /*Token::line*/;
-  variable[4] = variable[0];
-  variable[4] = ((parser_prod___Prod___last_token_t)CALL(variable[4],COLOR_parser_prod___Prod___last_token))(variable[4]) /*Prod::last_token*/;
-  variable[4] = ((lexer___Token___line_t)CALL(variable[4],COLOR_lexer___Token___line))(variable[4]) /*Token::line*/;
-  variable[3] = TAG_Bool((variable[3])==(variable[4]));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = NEW_String_string___String___init(); /*new String*/
-    variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable[5] = variable[4];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[5]) /*String::append*/;
-    variable[6] = variable[0];
-    variable[6] = ((parser_prod___Prod___first_token_t)CALL(variable[6],COLOR_parser_prod___Prod___first_token))(variable[6]) /*Prod::first_token*/;
-    variable[6] = ((parser_prod___Token___locate_t)CALL(variable[6],COLOR_parser_prod___PNode___locate))(variable[6]) /*Token::locate*/;
-    variable[7] = variable[6];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[7]) /*String::append*/;
-    variable[8] = NEW_String_string___String___with_native(BOX_NativeString("--"), TAG_Int(2)); /*new String*/
-    variable[9] = variable[8];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[9]) /*String::append*/;
-    variable[10] =  variable[2] /*lastpos*/;
-    variable[10] = ((string___String___to_s_t)CALL(variable[10],COLOR_string___Object___to_s))(variable[10]) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[10]) /*String::append*/;
-    variable[11] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable[12] = variable[11];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[12]) /*String::append*/;
-    variable[1] = variable[3];
-    goto return_label9;
-  } else { /*if*/
-    variable[3] = NEW_String_string___String___init(); /*new String*/
-    variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable[5] = variable[4];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[5]) /*String::append*/;
-    variable[6] = variable[0];
-    variable[6] = ((parser_prod___Prod___first_token_t)CALL(variable[6],COLOR_parser_prod___Prod___first_token))(variable[6]) /*Prod::first_token*/;
-    variable[6] = ((parser_prod___Token___locate_t)CALL(variable[6],COLOR_parser_prod___PNode___locate))(variable[6]) /*Token::locate*/;
-    variable[7] = variable[6];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[7]) /*String::append*/;
-    variable[8] = NEW_String_string___String___with_native(BOX_NativeString("--"), TAG_Int(2)); /*new String*/
-    variable[9] = variable[8];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[9]) /*String::append*/;
-    variable[10] = variable[0];
-    variable[10] = ((parser_prod___Prod___last_token_t)CALL(variable[10],COLOR_parser_prod___Prod___last_token))(variable[10]) /*Prod::last_token*/;
-    variable[10] = ((lexer___Token___line_t)CALL(variable[10],COLOR_lexer___Token___line))(variable[10]) /*Token::line*/;
-    variable[11] = variable[10];
-    variable[11] = ((string___String___to_s_t)CALL(variable[11],COLOR_string___Object___to_s))(variable[11]) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[11]) /*String::append*/;
-    variable[12] = NEW_String_string___String___with_native(BOX_NativeString(":"), TAG_Int(1)); /*new String*/
-    variable[13] = variable[12];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[13]) /*String::append*/;
-    variable[14] =  variable[2] /*lastpos*/;
-    variable[14] = ((string___String___to_s_t)CALL(variable[14],COLOR_string___Object___to_s))(variable[14]) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[14]) /*String::append*/;
-    variable[15] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable[16] = variable[15];
-    ((string___String___append_t)CALL(variable[3],COLOR_abstract_collection___IndexedCollection___append))(variable[3], variable[16]) /*String::append*/;
-    variable[1] = variable[3];
-    goto return_label9;
-  }
-  return_label9: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t parser_prod___Prod___line_number(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 91, LOCATE_parser_prod___Prod___line_number};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ((parser_prod___Prod___first_token_t)CALL(variable[2],COLOR_parser_prod___Prod___first_token))(variable[2]) /*Prod::first_token*/;
-  variable[2] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[2] ==  NIT_NULL /*null*/) || ((variable[2] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[2],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[2],COLOR_kernel___Object_____eqeq))(variable[2],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[2])) { /*if*/
-    variable[2] = variable[0];
-    variable[2] = ((parser_prod___Prod___first_token_t)CALL(variable[2],COLOR_parser_prod___Prod___first_token))(variable[2]) /*Prod::first_token*/;
-    variable[2] = ((lexer___Token___line_t)CALL(variable[2],COLOR_lexer___Token___line))(variable[2]) /*Token::line*/;
-    variable[1] = variable[2];
-    goto return_label10;
-  } else { /*if*/
-    variable[1] =  TAG_Int(0);
-    goto return_label10;
-  }
-  return_label10: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t parser_prod___Prod___first_token(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 64, LOCATE_parser_prod___Prod___first_token};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  tracehead = trace.prev;
-  return ATTR_parser_prod___Prod____first_token( self) /*Prod::_first_token*/;
-}
-void parser_prod___Prod___first_token__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 64, LOCATE_parser_prod___Prod___first_token__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  ATTR_parser_prod___Prod____first_token( self) /*Prod::_first_token*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-val_t parser_prod___Prod___last_token(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 67, LOCATE_parser_prod___Prod___last_token};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  tracehead = trace.prev;
-  return ATTR_parser_prod___Prod____last_token( self) /*Prod::_last_token*/;
-}
-void parser_prod___Prod___last_token__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 67, LOCATE_parser_prod___Prod___last_token__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  ATTR_parser_prod___Prod____last_token( self) /*Prod::_last_token*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Visitor___visit(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 103, LOCATE_parser_prod___Visitor___visit};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Token___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 41;
+  fra.me.meth = LOCATE_parser_prod___Token___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:41 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Token___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 39;
+  fra.me.meth = LOCATE_parser_prod___Token___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:39 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Token___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 40;
+  fra.me.meth = LOCATE_parser_prod___Token___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:40 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Prod___replace_with(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 45;
+  fra.me.meth = LOCATE_parser_prod___Prod___replace_with;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = fra.me.REG[0];
+  fra.me.REG[3] = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:47 */
+  CALL_SUPER_parser_prod___Prod___replace_with(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_Prod, ID_Prod)) /*cast Prod*/;
+  /* ./parser//parser_prod.nit:48 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Assert failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 48);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:49 */
+  CALL_parser_nodes___Prod___location__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Visitor___visit(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 55;
+  fra.me.meth = LOCATE_parser_prod___Visitor___visit;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./parser//parser_prod.nit:55 */
   fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 103);
+  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 55);
   nit_exit(1);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Visitor___init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 0, LOCATE_parser_prod___Visitor___init};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AModule___n_packagedecl__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 110, LOCATE_parser_prod___AModule___n_packagedecl__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AModule____n_packagedecl(variable[3]) /*AModule::_n_packagedecl*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label11: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AModule___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 145, LOCATE_parser_prod___AModule___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AModule___replace_child, LOCATE_parser_prod, 147); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AModule____n_packagedecl(variable[4]) /*AModule::_n_packagedecl*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PPackagedecl, ID_PPackagedecl)) /*cast PPackagedecl*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AModule___replace_child, LOCATE_parser_prod, 151); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AModule____n_packagedecl(variable[4]) /*AModule::_n_packagedecl*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AModule____n_packagedecl(variable[4]) /*AModule::_n_packagedecl*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label12;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AModule____n_imports(variable[4]) /*AModule::_n_imports*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AModule____n_imports(variable[7]) /*AModule::_n_imports*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PImport, ID_PImport)) /*cast PImport*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AModule___replace_child, LOCATE_parser_prod, 161); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AModule____n_imports(variable[7]) /*AModule::_n_imports*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AModule____n_imports(variable[7]) /*AModule::_n_imports*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label12;
-    }
-    continue_13: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_13: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AModule____n_classdefs(variable[4]) /*AModule::_n_classdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AModule____n_classdefs(variable[7]) /*AModule::_n_classdefs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PClassdef, ID_PClassdef)) /*cast PClassdef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AModule___replace_child, LOCATE_parser_prod, 173); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AModule____n_classdefs(variable[7]) /*AModule::_n_classdefs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AModule____n_classdefs(variable[7]) /*AModule::_n_classdefs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label12;
-    }
-    continue_14: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_14: while(0);
-  return_label12: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AModule___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 184, LOCATE_parser_prod___AModule___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AModule____n_packagedecl(variable[3]) /*AModule::_n_packagedecl*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AModule____n_packagedecl(variable[3]) /*AModule::_n_packagedecl*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AModule____n_imports(variable[3]) /*AModule::_n_imports*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_16: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_16: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AModule____n_classdefs(variable[3]) /*AModule::_n_classdefs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_17: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_17: while(0);
-  return_label15: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AModule___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 197, LOCATE_parser_prod___AModule___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AModule____n_packagedecl(variable[3]) /*AModule::_n_packagedecl*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AModule____n_packagedecl(variable[3]) /*AModule::_n_packagedecl*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AModule____n_imports(variable[4]) /*AModule::_n_imports*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AModule____n_imports(variable[4]) /*AModule::_n_imports*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_19: while(0);
-  }
-  break_19: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AModule____n_classdefs(variable[4]) /*AModule::_n_classdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AModule____n_classdefs(variable[4]) /*AModule::_n_classdefs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_20: while(0);
-  }
-  break_20: while(0);
-  return_label18: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AModule___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 118, LOCATE_parser_prod___AModule___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AModule].i]) return;
-  return_label21: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AModule].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AModule___init_amodule(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 120, LOCATE_parser_prod___AModule___init_amodule};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AModule].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AModule___empty_init_t)CALL(variable[5],COLOR_parser_prod___AModule___empty_init))(variable[5], init_table /*YYY*/) /*AModule::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AModule____n_packagedecl(variable[5]) /*AModule::_n_packagedecl*/ =  variable[1] /*n_packagedecl*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_packagedecl*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_packagedecl*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_packagedecl*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_packagedecl*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_packagedecl*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_packagedecl*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_packagedecl*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_packagedecl*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PImport]*/
-  ATTR_parser_nodes___AModule____n_imports(variable[5]) /*AModule::_n_imports*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[2] /*n_imports*/,COLOR_abstract_collection___Collection___iterator))( variable[2] /*n_imports*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PImport, ID_PImport)) /*cast PImport*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AModule___init_amodule, LOCATE_parser_prod, 133); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___AModule____n_imports(variable[8]) /*AModule::_n_imports*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_23: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_23: while(0);
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PClassdef]*/
-  ATTR_parser_nodes___AModule____n_classdefs(variable[5]) /*AModule::_n_classdefs*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_classdefs*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_classdefs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PClassdef, ID_PClassdef)) /*cast PClassdef*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AModule___init_amodule, LOCATE_parser_prod, 139); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___AModule____n_classdefs(variable[8]) /*AModule::_n_classdefs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_24: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_24: while(0);
-  return_label22: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AModule].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 219, LOCATE_parser_prod___APackagedecl___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APackagedecl____n_doc(variable[3]) /*APackagedecl::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label25: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___n_kwpackage__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 226, LOCATE_parser_prod___APackagedecl___n_kwpackage__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[3]) /*APackagedecl::_n_kwpackage*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label26: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 233, LOCATE_parser_prod___APackagedecl___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APackagedecl____n_id(variable[3]) /*APackagedecl::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label27: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 264, LOCATE_parser_prod___APackagedecl___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APackagedecl___replace_child, LOCATE_parser_prod, 266); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APackagedecl____n_doc(variable[4]) /*APackagedecl::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APackagedecl___replace_child, LOCATE_parser_prod, 270); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APackagedecl____n_doc(variable[4]) /*APackagedecl::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APackagedecl____n_doc(variable[4]) /*APackagedecl::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label28;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[4]) /*APackagedecl::_n_kwpackage*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwpackage, ID_TKwpackage)) /*cast TKwpackage*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APackagedecl___replace_child, LOCATE_parser_prod, 280); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[4]) /*APackagedecl::_n_kwpackage*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[4]) /*APackagedecl::_n_kwpackage*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label28;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APackagedecl____n_id(variable[4]) /*APackagedecl::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APackagedecl___replace_child, LOCATE_parser_prod, 290); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APackagedecl____n_id(variable[4]) /*APackagedecl::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APackagedecl____n_id(variable[4]) /*APackagedecl::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label28;
-  }
-  return_label28: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 299, LOCATE_parser_prod___APackagedecl___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APackagedecl____n_doc(variable[3]) /*APackagedecl::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APackagedecl____n_doc(variable[3]) /*APackagedecl::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[3]) /*APackagedecl::_n_kwpackage*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[3]) /*APackagedecl::_n_kwpackage*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APackagedecl____n_id(variable[3]) /*APackagedecl::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APackagedecl____n_id(variable[3]) /*APackagedecl::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label29: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 312, LOCATE_parser_prod___APackagedecl___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APackagedecl____n_doc(variable[3]) /*APackagedecl::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APackagedecl____n_doc(variable[3]) /*APackagedecl::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[3]) /*APackagedecl::_n_kwpackage*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[3]) /*APackagedecl::_n_kwpackage*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APackagedecl____n_id(variable[3]) /*APackagedecl::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APackagedecl____n_id(variable[3]) /*APackagedecl::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label30: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 241, LOCATE_parser_prod___APackagedecl___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APackagedecl].i]) return;
-  return_label31: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APackagedecl].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APackagedecl___init_apackagedecl(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 243, LOCATE_parser_prod___APackagedecl___init_apackagedecl};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APackagedecl].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___APackagedecl___empty_init_t)CALL(variable[5],COLOR_parser_prod___APackagedecl___empty_init))(variable[5], init_table /*YYY*/) /*APackagedecl::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___APackagedecl____n_doc(variable[5]) /*APackagedecl::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___APackagedecl____n_kwpackage(variable[5]) /*APackagedecl::_n_kwpackage*/ =  variable[2] /*n_kwpackage*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwpackage*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwpackage*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwpackage*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwpackage*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwpackage*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwpackage*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwpackage*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwpackage*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___APackagedecl____n_id(variable[5]) /*APackagedecl::_n_id*/ =  variable[3] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label32: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APackagedecl].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 326, LOCATE_parser_prod___AImport___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AImport____n_visibility(variable[3]) /*AImport::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label33: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___n_kwimport__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 333, LOCATE_parser_prod___AImport___n_kwimport__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AImport____n_kwimport(variable[3]) /*AImport::_n_kwimport*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label34: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 340, LOCATE_parser_prod___AImport___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AImport____n_id(variable[3]) /*AImport::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label35: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 371, LOCATE_parser_prod___AImport___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AImport___replace_child, LOCATE_parser_prod, 373); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AImport____n_visibility(variable[4]) /*AImport::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AImport___replace_child, LOCATE_parser_prod, 377); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AImport____n_visibility(variable[4]) /*AImport::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AImport____n_visibility(variable[4]) /*AImport::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label36;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AImport____n_kwimport(variable[4]) /*AImport::_n_kwimport*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AImport___replace_child, LOCATE_parser_prod, 387); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AImport____n_kwimport(variable[4]) /*AImport::_n_kwimport*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AImport____n_kwimport(variable[4]) /*AImport::_n_kwimport*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label36;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AImport____n_id(variable[4]) /*AImport::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AImport___replace_child, LOCATE_parser_prod, 397); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AImport____n_id(variable[4]) /*AImport::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AImport____n_id(variable[4]) /*AImport::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label36;
-  }
-  return_label36: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 406, LOCATE_parser_prod___AImport___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AImport____n_visibility(variable[3]) /*AImport::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AImport____n_visibility(variable[3]) /*AImport::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AImport____n_kwimport(variable[3]) /*AImport::_n_kwimport*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AImport____n_kwimport(variable[3]) /*AImport::_n_kwimport*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AImport____n_id(variable[3]) /*AImport::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AImport____n_id(variable[3]) /*AImport::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label37: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 419, LOCATE_parser_prod___AImport___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AImport____n_visibility(variable[3]) /*AImport::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AImport____n_visibility(variable[3]) /*AImport::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AImport____n_kwimport(variable[3]) /*AImport::_n_kwimport*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AImport____n_kwimport(variable[3]) /*AImport::_n_kwimport*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AImport____n_id(variable[3]) /*AImport::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AImport____n_id(variable[3]) /*AImport::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label38: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 348, LOCATE_parser_prod___AImport___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImport].i]) return;
-  return_label39: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImport].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImport___init_aimport(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 350, LOCATE_parser_prod___AImport___init_aimport};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImport].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AImport___empty_init_t)CALL(variable[5],COLOR_parser_prod___AImport___empty_init))(variable[5], init_table /*YYY*/) /*AImport::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AImport____n_visibility(variable[5]) /*AImport::_n_visibility*/ =  variable[1] /*n_visibility*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_visibility*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AImport____n_kwimport(variable[5]) /*AImport::_n_kwimport*/ =  variable[2] /*n_kwimport*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwimport*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwimport*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwimport*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwimport*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwimport*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwimport*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwimport*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwimport*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AImport____n_id(variable[5]) /*AImport::_n_id*/ =  variable[3] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label40: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImport].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 433, LOCATE_parser_prod___ANoImport___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANoImport____n_visibility(variable[3]) /*ANoImport::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label41: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___n_kwimport__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 440, LOCATE_parser_prod___ANoImport___n_kwimport__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANoImport____n_kwimport(variable[3]) /*ANoImport::_n_kwimport*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label42: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___n_kwend__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 447, LOCATE_parser_prod___ANoImport___n_kwend__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANoImport____n_kwend(variable[3]) /*ANoImport::_n_kwend*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label43: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 478, LOCATE_parser_prod___ANoImport___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANoImport___replace_child, LOCATE_parser_prod, 480); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANoImport____n_visibility(variable[4]) /*ANoImport::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANoImport___replace_child, LOCATE_parser_prod, 484); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANoImport____n_visibility(variable[4]) /*ANoImport::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANoImport____n_visibility(variable[4]) /*ANoImport::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label44;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANoImport____n_kwimport(variable[4]) /*ANoImport::_n_kwimport*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANoImport___replace_child, LOCATE_parser_prod, 494); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANoImport____n_kwimport(variable[4]) /*ANoImport::_n_kwimport*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANoImport____n_kwimport(variable[4]) /*ANoImport::_n_kwimport*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label44;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANoImport____n_kwend(variable[4]) /*ANoImport::_n_kwend*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwend, ID_TKwend)) /*cast TKwend*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANoImport___replace_child, LOCATE_parser_prod, 504); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANoImport____n_kwend(variable[4]) /*ANoImport::_n_kwend*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANoImport____n_kwend(variable[4]) /*ANoImport::_n_kwend*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label44;
-  }
-  return_label44: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 513, LOCATE_parser_prod___ANoImport___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANoImport____n_visibility(variable[3]) /*ANoImport::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANoImport____n_visibility(variable[3]) /*ANoImport::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANoImport____n_kwimport(variable[3]) /*ANoImport::_n_kwimport*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANoImport____n_kwimport(variable[3]) /*ANoImport::_n_kwimport*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANoImport____n_kwend(variable[3]) /*ANoImport::_n_kwend*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANoImport____n_kwend(variable[3]) /*ANoImport::_n_kwend*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label45: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 526, LOCATE_parser_prod___ANoImport___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANoImport____n_visibility(variable[3]) /*ANoImport::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANoImport____n_visibility(variable[3]) /*ANoImport::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANoImport____n_kwimport(variable[3]) /*ANoImport::_n_kwimport*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANoImport____n_kwimport(variable[3]) /*ANoImport::_n_kwimport*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANoImport____n_kwend(variable[3]) /*ANoImport::_n_kwend*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANoImport____n_kwend(variable[3]) /*ANoImport::_n_kwend*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label46: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 455, LOCATE_parser_prod___ANoImport___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANoImport].i]) return;
-  return_label47: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANoImport].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANoImport___init_anoimport(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 457, LOCATE_parser_prod___ANoImport___init_anoimport};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANoImport].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___ANoImport___empty_init_t)CALL(variable[5],COLOR_parser_prod___ANoImport___empty_init))(variable[5], init_table /*YYY*/) /*ANoImport::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ANoImport____n_visibility(variable[5]) /*ANoImport::_n_visibility*/ =  variable[1] /*n_visibility*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_visibility*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ANoImport____n_kwimport(variable[5]) /*ANoImport::_n_kwimport*/ =  variable[2] /*n_kwimport*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwimport*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwimport*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwimport*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwimport*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwimport*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwimport*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwimport*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwimport*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ANoImport____n_kwend(variable[5]) /*ANoImport::_n_kwend*/ =  variable[3] /*n_kwend*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_kwend*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_kwend*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwend*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_kwend*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwend*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_kwend*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_kwend*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_kwend*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label48: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANoImport].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APublicVisibility___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 548, LOCATE_parser_prod___APublicVisibility___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APublicVisibility___replace_child, LOCATE_parser_prod, 550); nit_exit(1);}
-  return_label49: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APublicVisibility___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 553, LOCATE_parser_prod___APublicVisibility___visit_all};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  return_label50: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APublicVisibility___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 557, LOCATE_parser_prod___APublicVisibility___visit_all_reverse};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  return_label51: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APublicVisibility___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 541, LOCATE_parser_prod___APublicVisibility___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APublicVisibility].i]) return;
-  return_label52: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APublicVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APublicVisibility___init_apublicvisibility(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 543, LOCATE_parser_prod___APublicVisibility___init_apublicvisibility};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APublicVisibility].i]) return;
-  variable[2] = variable[0];
-  ((parser_prod___APublicVisibility___empty_init_t)CALL(variable[2],COLOR_parser_prod___APublicVisibility___empty_init))(variable[2], init_table /*YYY*/) /*APublicVisibility::empty_init*/;
-  return_label53: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APublicVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APrivateVisibility___n_kwprivate__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 562, LOCATE_parser_prod___APrivateVisibility___n_kwprivate__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[3]) /*APrivateVisibility::_n_kwprivate*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label54: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APrivateVisibility___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 583, LOCATE_parser_prod___APrivateVisibility___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APrivateVisibility___replace_child, LOCATE_parser_prod, 585); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[4]) /*APrivateVisibility::_n_kwprivate*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwprivate, ID_TKwprivate)) /*cast TKwprivate*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APrivateVisibility___replace_child, LOCATE_parser_prod, 589); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[4]) /*APrivateVisibility::_n_kwprivate*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[4]) /*APrivateVisibility::_n_kwprivate*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label55;
-  }
-  return_label55: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APrivateVisibility___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 598, LOCATE_parser_prod___APrivateVisibility___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[3]) /*APrivateVisibility::_n_kwprivate*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[3]) /*APrivateVisibility::_n_kwprivate*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label56: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APrivateVisibility___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 605, LOCATE_parser_prod___APrivateVisibility___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[3]) /*APrivateVisibility::_n_kwprivate*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[3]) /*APrivateVisibility::_n_kwprivate*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label57: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APrivateVisibility___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 570, LOCATE_parser_prod___APrivateVisibility___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APrivateVisibility].i]) return;
-  return_label58: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APrivateVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APrivateVisibility___init_aprivatevisibility(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 572, LOCATE_parser_prod___APrivateVisibility___init_aprivatevisibility};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APrivateVisibility].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___APrivateVisibility___empty_init_t)CALL(variable[3],COLOR_parser_prod___APrivateVisibility___empty_init))(variable[3], init_table /*YYY*/) /*APrivateVisibility::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APrivateVisibility____n_kwprivate(variable[3]) /*APrivateVisibility::_n_kwprivate*/ =  variable[1] /*n_kwprivate*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwprivate*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwprivate*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwprivate*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwprivate*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwprivate*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwprivate*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwprivate*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwprivate*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label59: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APrivateVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AProtectedVisibility___n_kwprotected__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 613, LOCATE_parser_prod___AProtectedVisibility___n_kwprotected__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[3]) /*AProtectedVisibility::_n_kwprotected*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label60: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AProtectedVisibility___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 634, LOCATE_parser_prod___AProtectedVisibility___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AProtectedVisibility___replace_child, LOCATE_parser_prod, 636); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[4]) /*AProtectedVisibility::_n_kwprotected*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwprotected, ID_TKwprotected)) /*cast TKwprotected*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AProtectedVisibility___replace_child, LOCATE_parser_prod, 640); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[4]) /*AProtectedVisibility::_n_kwprotected*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[4]) /*AProtectedVisibility::_n_kwprotected*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label61;
-  }
-  return_label61: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AProtectedVisibility___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 649, LOCATE_parser_prod___AProtectedVisibility___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[3]) /*AProtectedVisibility::_n_kwprotected*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[3]) /*AProtectedVisibility::_n_kwprotected*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label62: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AProtectedVisibility___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 656, LOCATE_parser_prod___AProtectedVisibility___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[3]) /*AProtectedVisibility::_n_kwprotected*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[3]) /*AProtectedVisibility::_n_kwprotected*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label63: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AProtectedVisibility___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 621, LOCATE_parser_prod___AProtectedVisibility___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AProtectedVisibility].i]) return;
-  return_label64: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AProtectedVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AProtectedVisibility___init_aprotectedvisibility(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 623, LOCATE_parser_prod___AProtectedVisibility___init_aprotectedvisibility};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AProtectedVisibility].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AProtectedVisibility___empty_init_t)CALL(variable[3],COLOR_parser_prod___AProtectedVisibility___empty_init))(variable[3], init_table /*YYY*/) /*AProtectedVisibility::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(variable[3]) /*AProtectedVisibility::_n_kwprotected*/ =  variable[1] /*n_kwprotected*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwprotected*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwprotected*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwprotected*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwprotected*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwprotected*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwprotected*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwprotected*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwprotected*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label65: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AProtectedVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntrudeVisibility___n_kwintrude__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 664, LOCATE_parser_prod___AIntrudeVisibility___n_kwintrude__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[3]) /*AIntrudeVisibility::_n_kwintrude*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label66: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntrudeVisibility___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 685, LOCATE_parser_prod___AIntrudeVisibility___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIntrudeVisibility___replace_child, LOCATE_parser_prod, 687); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[4]) /*AIntrudeVisibility::_n_kwintrude*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwintrude, ID_TKwintrude)) /*cast TKwintrude*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIntrudeVisibility___replace_child, LOCATE_parser_prod, 691); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[4]) /*AIntrudeVisibility::_n_kwintrude*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[4]) /*AIntrudeVisibility::_n_kwintrude*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label67;
-  }
-  return_label67: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntrudeVisibility___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 700, LOCATE_parser_prod___AIntrudeVisibility___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[3]) /*AIntrudeVisibility::_n_kwintrude*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[3]) /*AIntrudeVisibility::_n_kwintrude*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label68: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntrudeVisibility___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 707, LOCATE_parser_prod___AIntrudeVisibility___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[3]) /*AIntrudeVisibility::_n_kwintrude*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[3]) /*AIntrudeVisibility::_n_kwintrude*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label69: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntrudeVisibility___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 672, LOCATE_parser_prod___AIntrudeVisibility___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntrudeVisibility].i]) return;
-  return_label70: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntrudeVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 674, LOCATE_parser_prod___AIntrudeVisibility___init_aintrudevisibility};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntrudeVisibility].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AIntrudeVisibility___empty_init_t)CALL(variable[3],COLOR_parser_prod___AIntrudeVisibility___empty_init))(variable[3], init_table /*YYY*/) /*AIntrudeVisibility::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(variable[3]) /*AIntrudeVisibility::_n_kwintrude*/ =  variable[1] /*n_kwintrude*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwintrude*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwintrude*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwintrude*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwintrude*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwintrude*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwintrude*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwintrude*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwintrude*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label71: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntrudeVisibility].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 715, LOCATE_parser_prod___AClassdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_doc(variable[3]) /*AClassdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label72: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 722, LOCATE_parser_prod___AClassdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_kwredef(variable[3]) /*AClassdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label73: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 729, LOCATE_parser_prod___AClassdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_visibility(variable[3]) /*AClassdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label74: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___n_classkind__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 736, LOCATE_parser_prod___AClassdef___n_classkind__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_classkind(variable[3]) /*AClassdef::_n_classkind*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label75: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 743, LOCATE_parser_prod___AClassdef___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_id(variable[3]) /*AClassdef::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label76: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 805, LOCATE_parser_prod___AClassdef___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 807); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_doc(variable[4]) /*AClassdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 811); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_doc(variable[4]) /*AClassdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_doc(variable[4]) /*AClassdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label77;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_kwredef(variable[4]) /*AClassdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 821); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_kwredef(variable[4]) /*AClassdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_kwredef(variable[4]) /*AClassdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label77;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_visibility(variable[4]) /*AClassdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 831); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_visibility(variable[4]) /*AClassdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_visibility(variable[4]) /*AClassdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label77;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_classkind(variable[4]) /*AClassdef::_n_classkind*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PClasskind, ID_PClasskind)) /*cast PClasskind*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 841); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_classkind(variable[4]) /*AClassdef::_n_classkind*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_classkind(variable[4]) /*AClassdef::_n_classkind*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label77;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_id(variable[4]) /*AClassdef::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 851); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_id(variable[4]) /*AClassdef::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClassdef____n_id(variable[4]) /*AClassdef::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label77;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[4]) /*AClassdef::_n_formaldefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[7]) /*AClassdef::_n_formaldefs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PFormaldef, ID_PFormaldef)) /*cast PFormaldef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 861); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[7]) /*AClassdef::_n_formaldefs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[7]) /*AClassdef::_n_formaldefs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label77;
-    }
-    continue_78: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_78: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[4]) /*AClassdef::_n_superclasses*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[7]) /*AClassdef::_n_superclasses*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSuperclass, ID_PSuperclass)) /*cast PSuperclass*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 873); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[7]) /*AClassdef::_n_superclasses*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[7]) /*AClassdef::_n_superclasses*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label77;
-    }
-    continue_79: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_79: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[4]) /*AClassdef::_n_propdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[7]) /*AClassdef::_n_propdefs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PPropdef, ID_PPropdef)) /*cast PPropdef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___replace_child, LOCATE_parser_prod, 885); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[7]) /*AClassdef::_n_propdefs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[7]) /*AClassdef::_n_propdefs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label77;
-    }
-    continue_80: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_80: while(0);
-  return_label77: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 896, LOCATE_parser_prod___AClassdef___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_doc(variable[3]) /*AClassdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_doc(variable[3]) /*AClassdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_kwredef(variable[3]) /*AClassdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_kwredef(variable[3]) /*AClassdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_visibility(variable[3]) /*AClassdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_visibility(variable[3]) /*AClassdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_classkind(variable[3]) /*AClassdef::_n_classkind*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_classkind(variable[3]) /*AClassdef::_n_classkind*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_id(variable[3]) /*AClassdef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_id(variable[3]) /*AClassdef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[3]) /*AClassdef::_n_formaldefs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_82: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_82: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[3]) /*AClassdef::_n_superclasses*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_83: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_83: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[3]) /*AClassdef::_n_propdefs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_84: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_84: while(0);
-  return_label81: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 924, LOCATE_parser_prod___AClassdef___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_doc(variable[3]) /*AClassdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_doc(variable[3]) /*AClassdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_kwredef(variable[3]) /*AClassdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_kwredef(variable[3]) /*AClassdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_visibility(variable[3]) /*AClassdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_visibility(variable[3]) /*AClassdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_classkind(variable[3]) /*AClassdef::_n_classkind*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_classkind(variable[3]) /*AClassdef::_n_classkind*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClassdef____n_id(variable[3]) /*AClassdef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClassdef____n_id(variable[3]) /*AClassdef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[4]) /*AClassdef::_n_formaldefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[4]) /*AClassdef::_n_formaldefs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_86: while(0);
-  }
-  break_86: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[4]) /*AClassdef::_n_superclasses*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[4]) /*AClassdef::_n_superclasses*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_87: while(0);
-  }
-  break_87: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[4]) /*AClassdef::_n_propdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[4]) /*AClassdef::_n_propdefs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_88: while(0);
-  }
-  break_88: while(0);
-  return_label85: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 751, LOCATE_parser_prod___AClassdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClassdef].i]) return;
-  return_label89: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClassdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClassdef___init_aclassdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, val_t  param6, val_t  param7, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 753, LOCATE_parser_prod___AClassdef___init_aclassdef};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  variable[7] =  param6;
-  variable[8] =  param7;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClassdef].i]) return;
-  variable[10] = variable[0];
-  ((parser_prod___AClassdef___empty_init_t)CALL(variable[10],COLOR_parser_prod___AClassdef___empty_init))(variable[10], init_table /*YYY*/) /*AClassdef::empty_init*/;
-  variable[10] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_doc(variable[10]) /*AClassdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[10] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[10])) { /*if*/
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[10]) /*PNode::parent=*/;
-  }
-  variable[10] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_kwredef(variable[10]) /*AClassdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[10] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[10])) { /*if*/
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[10]) /*PNode::parent=*/;
-  }
-  variable[10] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_visibility(variable[10]) /*AClassdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[10] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[10])) { /*if*/
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[10]) /*PNode::parent=*/;
-  }
-  variable[10] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_classkind(variable[10]) /*AClassdef::_n_classkind*/ =  variable[4] /*n_classkind*/;
-  variable[10] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_classkind*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_classkind*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_classkind*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_classkind*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_classkind*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_classkind*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[10])) { /*if*/
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_classkind*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_classkind*/, variable[10]) /*PNode::parent=*/;
-  }
-  variable[10] = variable[0];
-  ATTR_parser_nodes___AClassdef____n_id(variable[10]) /*AClassdef::_n_id*/ =  variable[5] /*n_id*/;
-  variable[10] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[10])) { /*if*/
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_id*/, variable[10]) /*PNode::parent=*/;
-  }
-  variable[10] = variable[0];
-  variable[11] = NEW_List_list___List___init(); /*new List[PFormaldef]*/
-  ATTR_parser_nodes___AClassdef____n_formaldefs(variable[10]) /*AClassdef::_n_formaldefs*/ = variable[11];
-  variable[10] = ((array___AbstractArray___iterator_t)CALL( variable[6] /*n_formaldefs*/,COLOR_abstract_collection___Collection___iterator))( variable[6] /*n_formaldefs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[11] = ((array___ArrayIterator___is_ok_t)CALL(variable[10],COLOR_abstract_collection___Iterator___is_ok))(variable[10]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[11])) break; /*for*/
-    variable[11] = ((array___ArrayIterator___item_t)CALL(variable[10],COLOR_abstract_collection___Iterator___item))(variable[10]) /*ArrayIterator::item*/;
-    variable[12] = variable[11];
-    variable[13] = TAG_Bool(( variable[12] /*n*/==NIT_NULL) || VAL_ISA( variable[12] /*n*/, COLOR_PFormaldef, ID_PFormaldef)) /*cast PFormaldef*/;
-    if (!UNTAG_Bool(variable[13])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___init_aclassdef, LOCATE_parser_prod, 787); nit_exit(1);}
-    variable[13] = variable[0];
-    variable[13] = ATTR_parser_nodes___AClassdef____n_formaldefs(variable[13]) /*AClassdef::_n_formaldefs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[13],COLOR_abstract_collection___SimpleCollection___add))(variable[13],  variable[12] /*n*/) /*IndexedCollection::add*/;
-    variable[13] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[12] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[12] /*n*/, variable[13]) /*PNode::parent=*/;
-    continue_91: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[10],COLOR_abstract_collection___Iterator___next))(variable[10]) /*ArrayIterator::next*/;
-  }
-  break_91: while(0);
-  variable[10] = variable[0];
-  variable[11] = NEW_List_list___List___init(); /*new List[PSuperclass]*/
-  ATTR_parser_nodes___AClassdef____n_superclasses(variable[10]) /*AClassdef::_n_superclasses*/ = variable[11];
-  variable[10] = ((array___AbstractArray___iterator_t)CALL( variable[7] /*n_superclasses*/,COLOR_abstract_collection___Collection___iterator))( variable[7] /*n_superclasses*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[11] = ((array___ArrayIterator___is_ok_t)CALL(variable[10],COLOR_abstract_collection___Iterator___is_ok))(variable[10]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[11])) break; /*for*/
-    variable[11] = ((array___ArrayIterator___item_t)CALL(variable[10],COLOR_abstract_collection___Iterator___item))(variable[10]) /*ArrayIterator::item*/;
-    variable[12] = variable[11];
-    variable[13] = TAG_Bool(( variable[12] /*n*/==NIT_NULL) || VAL_ISA( variable[12] /*n*/, COLOR_PSuperclass, ID_PSuperclass)) /*cast PSuperclass*/;
-    if (!UNTAG_Bool(variable[13])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___init_aclassdef, LOCATE_parser_prod, 793); nit_exit(1);}
-    variable[13] = variable[0];
-    variable[13] = ATTR_parser_nodes___AClassdef____n_superclasses(variable[13]) /*AClassdef::_n_superclasses*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[13],COLOR_abstract_collection___SimpleCollection___add))(variable[13],  variable[12] /*n*/) /*IndexedCollection::add*/;
-    variable[13] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[12] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[12] /*n*/, variable[13]) /*PNode::parent=*/;
-    continue_92: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[10],COLOR_abstract_collection___Iterator___next))(variable[10]) /*ArrayIterator::next*/;
-  }
-  break_92: while(0);
-  variable[10] = variable[0];
-  variable[11] = NEW_List_list___List___init(); /*new List[PPropdef]*/
-  ATTR_parser_nodes___AClassdef____n_propdefs(variable[10]) /*AClassdef::_n_propdefs*/ = variable[11];
-  variable[10] = ((array___AbstractArray___iterator_t)CALL( variable[8] /*n_propdefs*/,COLOR_abstract_collection___Collection___iterator))( variable[8] /*n_propdefs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[11] = ((array___ArrayIterator___is_ok_t)CALL(variable[10],COLOR_abstract_collection___Iterator___is_ok))(variable[10]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[11])) break; /*for*/
-    variable[11] = ((array___ArrayIterator___item_t)CALL(variable[10],COLOR_abstract_collection___Iterator___item))(variable[10]) /*ArrayIterator::item*/;
-    variable[12] = variable[11];
-    variable[13] = TAG_Bool(( variable[12] /*n*/==NIT_NULL) || VAL_ISA( variable[12] /*n*/, COLOR_PPropdef, ID_PPropdef)) /*cast PPropdef*/;
-    if (!UNTAG_Bool(variable[13])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClassdef___init_aclassdef, LOCATE_parser_prod, 799); nit_exit(1);}
-    variable[13] = variable[0];
-    variable[13] = ATTR_parser_nodes___AClassdef____n_propdefs(variable[13]) /*AClassdef::_n_propdefs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[13],COLOR_abstract_collection___SimpleCollection___add))(variable[13],  variable[12] /*n*/) /*IndexedCollection::add*/;
-    variable[13] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[12] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[12] /*n*/, variable[13]) /*PNode::parent=*/;
-    continue_93: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[10],COLOR_abstract_collection___Iterator___next))(variable[10]) /*ArrayIterator::next*/;
-  }
-  break_93: while(0);
-  return_label90: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClassdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATopClassdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 981, LOCATE_parser_prod___ATopClassdef___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATopClassdef___replace_child, LOCATE_parser_prod, 983); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[4]) /*ATopClassdef::_n_propdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[7]) /*ATopClassdef::_n_propdefs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PPropdef, ID_PPropdef)) /*cast PPropdef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATopClassdef___replace_child, LOCATE_parser_prod, 987); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[7]) /*ATopClassdef::_n_propdefs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[7]) /*ATopClassdef::_n_propdefs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label94;
-    }
-    continue_95: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_95: while(0);
-  return_label94: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATopClassdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 998, LOCATE_parser_prod___ATopClassdef___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[3]) /*ATopClassdef::_n_propdefs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_97: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_97: while(0);
-  return_label96: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATopClassdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1005, LOCATE_parser_prod___ATopClassdef___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[4]) /*ATopClassdef::_n_propdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[4]) /*ATopClassdef::_n_propdefs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_99: while(0);
-  }
-  break_99: while(0);
-  return_label98: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATopClassdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 966, LOCATE_parser_prod___ATopClassdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATopClassdef].i]) return;
-  return_label100: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATopClassdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATopClassdef___init_atopclassdef(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 968, LOCATE_parser_prod___ATopClassdef___init_atopclassdef};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATopClassdef].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ATopClassdef___empty_init_t)CALL(variable[3],COLOR_parser_prod___ATopClassdef___empty_init))(variable[3], init_table /*YYY*/) /*ATopClassdef::empty_init*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_List_list___List___init(); /*new List[PPropdef]*/
-  ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[3]) /*ATopClassdef::_n_propdefs*/ = variable[4];
-  variable[3] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_propdefs*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_propdefs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*n*/==NIT_NULL) || VAL_ISA( variable[5] /*n*/, COLOR_PPropdef, ID_PPropdef)) /*cast PPropdef*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATopClassdef___init_atopclassdef, LOCATE_parser_prod, 975); nit_exit(1);}
-    variable[6] = variable[0];
-    variable[6] = ATTR_parser_nodes___ATopClassdef____n_propdefs(variable[6]) /*ATopClassdef::_n_propdefs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[6],COLOR_abstract_collection___SimpleCollection___add))(variable[6],  variable[5] /*n*/) /*IndexedCollection::add*/;
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n*/, variable[6]) /*PNode::parent=*/;
-    continue_102: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_102: while(0);
-  return_label101: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATopClassdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainClassdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1033, LOCATE_parser_prod___AMainClassdef___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMainClassdef___replace_child, LOCATE_parser_prod, 1035); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[4]) /*AMainClassdef::_n_propdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[7]) /*AMainClassdef::_n_propdefs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PPropdef, ID_PPropdef)) /*cast PPropdef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMainClassdef___replace_child, LOCATE_parser_prod, 1039); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[7]) /*AMainClassdef::_n_propdefs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[7]) /*AMainClassdef::_n_propdefs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label103;
-    }
-    continue_104: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_104: while(0);
-  return_label103: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainClassdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1050, LOCATE_parser_prod___AMainClassdef___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[3]) /*AMainClassdef::_n_propdefs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_106: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_106: while(0);
-  return_label105: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainClassdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1057, LOCATE_parser_prod___AMainClassdef___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[4]) /*AMainClassdef::_n_propdefs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[4]) /*AMainClassdef::_n_propdefs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_108: while(0);
-  }
-  break_108: while(0);
-  return_label107: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainClassdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1018, LOCATE_parser_prod___AMainClassdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainClassdef].i]) return;
-  return_label109: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainClassdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainClassdef___init_amainclassdef(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1020, LOCATE_parser_prod___AMainClassdef___init_amainclassdef};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainClassdef].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AMainClassdef___empty_init_t)CALL(variable[3],COLOR_parser_prod___AMainClassdef___empty_init))(variable[3], init_table /*YYY*/) /*AMainClassdef::empty_init*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_List_list___List___init(); /*new List[PPropdef]*/
-  ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[3]) /*AMainClassdef::_n_propdefs*/ = variable[4];
-  variable[3] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_propdefs*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_propdefs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*n*/==NIT_NULL) || VAL_ISA( variable[5] /*n*/, COLOR_PPropdef, ID_PPropdef)) /*cast PPropdef*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMainClassdef___init_amainclassdef, LOCATE_parser_prod, 1027); nit_exit(1);}
-    variable[6] = variable[0];
-    variable[6] = ATTR_parser_nodes___AMainClassdef____n_propdefs(variable[6]) /*AMainClassdef::_n_propdefs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[6],COLOR_abstract_collection___SimpleCollection___add))(variable[6],  variable[5] /*n*/) /*IndexedCollection::add*/;
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n*/, variable[6]) /*PNode::parent=*/;
-    continue_111: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_111: while(0);
-  return_label110: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainClassdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteClasskind___n_kwclass__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1069, LOCATE_parser_prod___AConcreteClasskind___n_kwclass__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[3]) /*AConcreteClasskind::_n_kwclass*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label112: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteClasskind___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1090, LOCATE_parser_prod___AConcreteClasskind___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteClasskind___replace_child, LOCATE_parser_prod, 1092); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[4]) /*AConcreteClasskind::_n_kwclass*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwclass, ID_TKwclass)) /*cast TKwclass*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteClasskind___replace_child, LOCATE_parser_prod, 1096); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[4]) /*AConcreteClasskind::_n_kwclass*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[4]) /*AConcreteClasskind::_n_kwclass*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label113;
-  }
-  return_label113: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteClasskind___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1105, LOCATE_parser_prod___AConcreteClasskind___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[3]) /*AConcreteClasskind::_n_kwclass*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[3]) /*AConcreteClasskind::_n_kwclass*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label114: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteClasskind___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1112, LOCATE_parser_prod___AConcreteClasskind___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[3]) /*AConcreteClasskind::_n_kwclass*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[3]) /*AConcreteClasskind::_n_kwclass*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label115: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteClasskind___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1077, LOCATE_parser_prod___AConcreteClasskind___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteClasskind].i]) return;
-  return_label116: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1079, LOCATE_parser_prod___AConcreteClasskind___init_aconcreteclasskind};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteClasskind].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AConcreteClasskind___empty_init_t)CALL(variable[3],COLOR_parser_prod___AConcreteClasskind___empty_init))(variable[3], init_table /*YYY*/) /*AConcreteClasskind::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteClasskind____n_kwclass(variable[3]) /*AConcreteClasskind::_n_kwclass*/ =  variable[1] /*n_kwclass*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwclass*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwclass*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwclass*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwclass*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwclass*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwclass*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwclass*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwclass*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label117: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___n_kwabstract__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1120, LOCATE_parser_prod___AAbstractClasskind___n_kwabstract__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[3]) /*AAbstractClasskind::_n_kwabstract*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label118: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___n_kwclass__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1127, LOCATE_parser_prod___AAbstractClasskind___n_kwclass__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[3]) /*AAbstractClasskind::_n_kwclass*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label119: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1153, LOCATE_parser_prod___AAbstractClasskind___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAbstractClasskind___replace_child, LOCATE_parser_prod, 1155); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[4]) /*AAbstractClasskind::_n_kwabstract*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwabstract, ID_TKwabstract)) /*cast TKwabstract*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAbstractClasskind___replace_child, LOCATE_parser_prod, 1159); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[4]) /*AAbstractClasskind::_n_kwabstract*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[4]) /*AAbstractClasskind::_n_kwabstract*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label120;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[4]) /*AAbstractClasskind::_n_kwclass*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwclass, ID_TKwclass)) /*cast TKwclass*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAbstractClasskind___replace_child, LOCATE_parser_prod, 1169); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[4]) /*AAbstractClasskind::_n_kwclass*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[4]) /*AAbstractClasskind::_n_kwclass*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label120;
-  }
-  return_label120: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1178, LOCATE_parser_prod___AAbstractClasskind___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[3]) /*AAbstractClasskind::_n_kwabstract*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[3]) /*AAbstractClasskind::_n_kwabstract*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[3]) /*AAbstractClasskind::_n_kwclass*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[3]) /*AAbstractClasskind::_n_kwclass*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label121: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1188, LOCATE_parser_prod___AAbstractClasskind___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[3]) /*AAbstractClasskind::_n_kwabstract*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[3]) /*AAbstractClasskind::_n_kwabstract*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[3]) /*AAbstractClasskind::_n_kwclass*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[3]) /*AAbstractClasskind::_n_kwclass*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label122: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1135, LOCATE_parser_prod___AAbstractClasskind___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbstractClasskind].i]) return;
-  return_label123: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbstractClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1137, LOCATE_parser_prod___AAbstractClasskind___init_aabstractclasskind};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbstractClasskind].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AAbstractClasskind___empty_init_t)CALL(variable[4],COLOR_parser_prod___AAbstractClasskind___empty_init))(variable[4], init_table /*YYY*/) /*AAbstractClasskind::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(variable[4]) /*AAbstractClasskind::_n_kwabstract*/ =  variable[1] /*n_kwabstract*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwabstract*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwabstract*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwabstract*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwabstract*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwabstract*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwabstract*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwabstract*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwabstract*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(variable[4]) /*AAbstractClasskind::_n_kwclass*/ =  variable[2] /*n_kwclass*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwclass*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwclass*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwclass*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwclass*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwclass*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwclass*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwclass*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwclass*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label124: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbstractClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInterfaceClasskind___n_kwinterface__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1199, LOCATE_parser_prod___AInterfaceClasskind___n_kwinterface__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[3]) /*AInterfaceClasskind::_n_kwinterface*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label125: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInterfaceClasskind___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1220, LOCATE_parser_prod___AInterfaceClasskind___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInterfaceClasskind___replace_child, LOCATE_parser_prod, 1222); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[4]) /*AInterfaceClasskind::_n_kwinterface*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwinterface, ID_TKwinterface)) /*cast TKwinterface*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInterfaceClasskind___replace_child, LOCATE_parser_prod, 1226); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[4]) /*AInterfaceClasskind::_n_kwinterface*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[4]) /*AInterfaceClasskind::_n_kwinterface*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label126;
-  }
-  return_label126: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInterfaceClasskind___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1235, LOCATE_parser_prod___AInterfaceClasskind___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[3]) /*AInterfaceClasskind::_n_kwinterface*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[3]) /*AInterfaceClasskind::_n_kwinterface*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label127: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInterfaceClasskind___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1242, LOCATE_parser_prod___AInterfaceClasskind___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[3]) /*AInterfaceClasskind::_n_kwinterface*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[3]) /*AInterfaceClasskind::_n_kwinterface*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label128: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInterfaceClasskind___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1207, LOCATE_parser_prod___AInterfaceClasskind___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInterfaceClasskind].i]) return;
-  return_label129: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInterfaceClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1209, LOCATE_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInterfaceClasskind].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AInterfaceClasskind___empty_init_t)CALL(variable[3],COLOR_parser_prod___AInterfaceClasskind___empty_init))(variable[3], init_table /*YYY*/) /*AInterfaceClasskind::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(variable[3]) /*AInterfaceClasskind::_n_kwinterface*/ =  variable[1] /*n_kwinterface*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwinterface*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwinterface*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwinterface*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwinterface*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwinterface*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwinterface*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwinterface*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwinterface*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label130: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInterfaceClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUniversalClasskind___n_kwuniversal__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1250, LOCATE_parser_prod___AUniversalClasskind___n_kwuniversal__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[3]) /*AUniversalClasskind::_n_kwuniversal*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label131: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUniversalClasskind___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1271, LOCATE_parser_prod___AUniversalClasskind___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AUniversalClasskind___replace_child, LOCATE_parser_prod, 1273); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[4]) /*AUniversalClasskind::_n_kwuniversal*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwuniversal, ID_TKwuniversal)) /*cast TKwuniversal*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AUniversalClasskind___replace_child, LOCATE_parser_prod, 1277); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[4]) /*AUniversalClasskind::_n_kwuniversal*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[4]) /*AUniversalClasskind::_n_kwuniversal*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label132;
-  }
-  return_label132: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUniversalClasskind___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1286, LOCATE_parser_prod___AUniversalClasskind___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[3]) /*AUniversalClasskind::_n_kwuniversal*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[3]) /*AUniversalClasskind::_n_kwuniversal*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label133: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUniversalClasskind___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1293, LOCATE_parser_prod___AUniversalClasskind___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[3]) /*AUniversalClasskind::_n_kwuniversal*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[3]) /*AUniversalClasskind::_n_kwuniversal*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label134: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUniversalClasskind___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1258, LOCATE_parser_prod___AUniversalClasskind___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUniversalClasskind].i]) return;
-  return_label135: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUniversalClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUniversalClasskind___init_auniversalclasskind(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1260, LOCATE_parser_prod___AUniversalClasskind___init_auniversalclasskind};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUniversalClasskind].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AUniversalClasskind___empty_init_t)CALL(variable[3],COLOR_parser_prod___AUniversalClasskind___empty_init))(variable[3], init_table /*YYY*/) /*AUniversalClasskind::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(variable[3]) /*AUniversalClasskind::_n_kwuniversal*/ =  variable[1] /*n_kwuniversal*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwuniversal*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwuniversal*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwuniversal*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwuniversal*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwuniversal*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwuniversal*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwuniversal*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwuniversal*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label136: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUniversalClasskind].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1301, LOCATE_parser_prod___AFormaldef___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AFormaldef____n_id(variable[3]) /*AFormaldef::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label137: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1308, LOCATE_parser_prod___AFormaldef___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AFormaldef____n_type(variable[3]) /*AFormaldef::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label138: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1334, LOCATE_parser_prod___AFormaldef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFormaldef___replace_child, LOCATE_parser_prod, 1336); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AFormaldef____n_id(variable[4]) /*AFormaldef::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFormaldef___replace_child, LOCATE_parser_prod, 1340); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFormaldef____n_id(variable[4]) /*AFormaldef::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFormaldef____n_id(variable[4]) /*AFormaldef::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label139;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AFormaldef____n_type(variable[4]) /*AFormaldef::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFormaldef___replace_child, LOCATE_parser_prod, 1350); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFormaldef____n_type(variable[4]) /*AFormaldef::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFormaldef____n_type(variable[4]) /*AFormaldef::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label139;
-  }
-  return_label139: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1359, LOCATE_parser_prod___AFormaldef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFormaldef____n_id(variable[3]) /*AFormaldef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFormaldef____n_id(variable[3]) /*AFormaldef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFormaldef____n_type(variable[3]) /*AFormaldef::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFormaldef____n_type(variable[3]) /*AFormaldef::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label140: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1369, LOCATE_parser_prod___AFormaldef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFormaldef____n_id(variable[3]) /*AFormaldef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFormaldef____n_id(variable[3]) /*AFormaldef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFormaldef____n_type(variable[3]) /*AFormaldef::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFormaldef____n_type(variable[3]) /*AFormaldef::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label141: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1316, LOCATE_parser_prod___AFormaldef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFormaldef].i]) return;
-  return_label142: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFormaldef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFormaldef___init_aformaldef(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1318, LOCATE_parser_prod___AFormaldef___init_aformaldef};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFormaldef].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AFormaldef___empty_init_t)CALL(variable[4],COLOR_parser_prod___AFormaldef___empty_init))(variable[4], init_table /*YYY*/) /*AFormaldef::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AFormaldef____n_id(variable[4]) /*AFormaldef::_n_id*/ =  variable[1] /*n_id*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AFormaldef____n_type(variable[4]) /*AFormaldef::_n_type*/ =  variable[2] /*n_type*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_type*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label143: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFormaldef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___n_kwspecial__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1380, LOCATE_parser_prod___ASuperclass___n_kwspecial__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[3]) /*ASuperclass::_n_kwspecial*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label144: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1387, LOCATE_parser_prod___ASuperclass___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASuperclass____n_type(variable[3]) /*ASuperclass::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label145: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1413, LOCATE_parser_prod___ASuperclass___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperclass___replace_child, LOCATE_parser_prod, 1415); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[4]) /*ASuperclass::_n_kwspecial*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwspecial, ID_TKwspecial)) /*cast TKwspecial*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperclass___replace_child, LOCATE_parser_prod, 1419); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[4]) /*ASuperclass::_n_kwspecial*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[4]) /*ASuperclass::_n_kwspecial*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label146;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperclass____n_type(variable[4]) /*ASuperclass::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperclass___replace_child, LOCATE_parser_prod, 1429); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperclass____n_type(variable[4]) /*ASuperclass::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperclass____n_type(variable[4]) /*ASuperclass::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label146;
-  }
-  return_label146: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1438, LOCATE_parser_prod___ASuperclass___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[3]) /*ASuperclass::_n_kwspecial*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[3]) /*ASuperclass::_n_kwspecial*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperclass____n_type(variable[3]) /*ASuperclass::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperclass____n_type(variable[3]) /*ASuperclass::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label147: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1448, LOCATE_parser_prod___ASuperclass___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[3]) /*ASuperclass::_n_kwspecial*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[3]) /*ASuperclass::_n_kwspecial*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperclass____n_type(variable[3]) /*ASuperclass::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperclass____n_type(variable[3]) /*ASuperclass::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label148: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1395, LOCATE_parser_prod___ASuperclass___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperclass].i]) return;
-  return_label149: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperclass].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperclass___init_asuperclass(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1397, LOCATE_parser_prod___ASuperclass___init_asuperclass};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperclass].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ASuperclass___empty_init_t)CALL(variable[4],COLOR_parser_prod___ASuperclass___empty_init))(variable[4], init_table /*YYY*/) /*ASuperclass::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASuperclass____n_kwspecial(variable[4]) /*ASuperclass::_n_kwspecial*/ =  variable[1] /*n_kwspecial*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwspecial*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwspecial*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwspecial*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwspecial*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwspecial*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwspecial*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwspecial*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwspecial*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASuperclass____n_type(variable[4]) /*ASuperclass::_n_type*/ =  variable[2] /*n_type*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_type*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label150: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperclass].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1459, LOCATE_parser_prod___AAttrPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label151: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1480, LOCATE_parser_prod___AAttrPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[3]) /*AAttrPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label152: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1487, LOCATE_parser_prod___AAttrPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[3]) /*AAttrPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label153: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_kwattr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1494, LOCATE_parser_prod___AAttrPropdef___n_kwattr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[3]) /*AAttrPropdef::_n_kwattr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label154: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1501, LOCATE_parser_prod___AAttrPropdef___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_id(variable[3]) /*AAttrPropdef::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label155: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1508, LOCATE_parser_prod___AAttrPropdef___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_type(variable[3]) /*AAttrPropdef::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label156: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_readable__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1466, LOCATE_parser_prod___AAttrPropdef___n_readable__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_readable(variable[3]) /*AAttrPropdef::_n_readable*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label157: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_writable__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1473, LOCATE_parser_prod___AAttrPropdef___n_writable__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_writable(variable[3]) /*AAttrPropdef::_n_writable*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label158: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1515, LOCATE_parser_prod___AAttrPropdef___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_expr(variable[3]) /*AAttrPropdef::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label159: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1576, LOCATE_parser_prod___AAttrPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1578); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1582); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_readable(variable[4]) /*AAttrPropdef::_n_readable*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PAble, ID_PAble)) /*cast PAble*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1592); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_readable(variable[4]) /*AAttrPropdef::_n_readable*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_readable(variable[4]) /*AAttrPropdef::_n_readable*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_writable(variable[4]) /*AAttrPropdef::_n_writable*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PAble, ID_PAble)) /*cast PAble*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1602); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_writable(variable[4]) /*AAttrPropdef::_n_writable*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_writable(variable[4]) /*AAttrPropdef::_n_writable*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[4]) /*AAttrPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1612); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[4]) /*AAttrPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[4]) /*AAttrPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[4]) /*AAttrPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1622); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[4]) /*AAttrPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[4]) /*AAttrPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[4]) /*AAttrPropdef::_n_kwattr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwattr, ID_TKwattr)) /*cast TKwattr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1632); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[4]) /*AAttrPropdef::_n_kwattr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[4]) /*AAttrPropdef::_n_kwattr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_id(variable[4]) /*AAttrPropdef::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1642); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_id(variable[4]) /*AAttrPropdef::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_id(variable[4]) /*AAttrPropdef::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_type(variable[4]) /*AAttrPropdef::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1652); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_type(variable[4]) /*AAttrPropdef::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_type(variable[4]) /*AAttrPropdef::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrPropdef____n_expr(variable[4]) /*AAttrPropdef::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrPropdef___replace_child, LOCATE_parser_prod, 1662); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_expr(variable[4]) /*AAttrPropdef::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrPropdef____n_expr(variable[4]) /*AAttrPropdef::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label160;
-  }
-  return_label160: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1671, LOCATE_parser_prod___AAttrPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_readable(variable[3]) /*AAttrPropdef::_n_readable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_readable(variable[3]) /*AAttrPropdef::_n_readable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_writable(variable[3]) /*AAttrPropdef::_n_writable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_writable(variable[3]) /*AAttrPropdef::_n_writable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[3]) /*AAttrPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[3]) /*AAttrPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[3]) /*AAttrPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[3]) /*AAttrPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[3]) /*AAttrPropdef::_n_kwattr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[3]) /*AAttrPropdef::_n_kwattr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_id(variable[3]) /*AAttrPropdef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_id(variable[3]) /*AAttrPropdef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_type(variable[3]) /*AAttrPropdef::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_type(variable[3]) /*AAttrPropdef::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_expr(variable[3]) /*AAttrPropdef::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_expr(variable[3]) /*AAttrPropdef::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label161: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1702, LOCATE_parser_prod___AAttrPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_readable(variable[3]) /*AAttrPropdef::_n_readable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_readable(variable[3]) /*AAttrPropdef::_n_readable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_writable(variable[3]) /*AAttrPropdef::_n_writable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_writable(variable[3]) /*AAttrPropdef::_n_writable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[3]) /*AAttrPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[3]) /*AAttrPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[3]) /*AAttrPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[3]) /*AAttrPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[3]) /*AAttrPropdef::_n_kwattr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[3]) /*AAttrPropdef::_n_kwattr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_id(variable[3]) /*AAttrPropdef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_id(variable[3]) /*AAttrPropdef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_type(variable[3]) /*AAttrPropdef::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_type(variable[3]) /*AAttrPropdef::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrPropdef____n_expr(variable[3]) /*AAttrPropdef::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrPropdef____n_expr(variable[3]) /*AAttrPropdef::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label162: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1523, LOCATE_parser_prod___AAttrPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrPropdef].i]) return;
-  return_label163: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___init_aattrpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, val_t  param6, val_t  param7, val_t  param8, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1525, LOCATE_parser_prod___AAttrPropdef___init_aattrpropdef};
-  val_t variable[12];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  variable[7] =  param6;
-  variable[8] =  param7;
-  variable[9] =  param8;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrPropdef].i]) return;
-  variable[11] = variable[0];
-  ((parser_prod___AAttrPropdef___empty_init_t)CALL(variable[11],COLOR_parser_prod___AAttrPropdef___empty_init))(variable[11], init_table /*YYY*/) /*AAttrPropdef::empty_init*/;
-  variable[11] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[11]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_readable(variable[11]) /*AAttrPropdef::_n_readable*/ =  variable[2] /*n_readable*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_readable*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_readable*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_readable*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_readable*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_readable*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_readable*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_readable*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_readable*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_writable(variable[11]) /*AAttrPropdef::_n_writable*/ =  variable[3] /*n_writable*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_writable*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_writable*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_writable*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_writable*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_writable*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_writable*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_writable*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_writable*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_kwredef(variable[11]) /*AAttrPropdef::_n_kwredef*/ =  variable[4] /*n_kwredef*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwredef*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_visibility(variable[11]) /*AAttrPropdef::_n_visibility*/ =  variable[5] /*n_visibility*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_visibility*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_kwattr(variable[11]) /*AAttrPropdef::_n_kwattr*/ =  variable[6] /*n_kwattr*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_kwattr*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_kwattr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_kwattr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_kwattr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_kwattr*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_kwattr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_kwattr*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_kwattr*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_id(variable[11]) /*AAttrPropdef::_n_id*/ =  variable[7] /*n_id*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[7] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[7] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[7] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[7] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[7] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n_id*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_type(variable[11]) /*AAttrPropdef::_n_type*/ =  variable[8] /*n_type*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[8] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[8] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[8] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[8] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[8] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[8] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n_type*/, variable[11]) /*PNode::parent=*/;
-  }
-  variable[11] = variable[0];
-  ATTR_parser_nodes___AAttrPropdef____n_expr(variable[11]) /*AAttrPropdef::_n_expr*/ =  variable[9] /*n_expr*/;
-  variable[11] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[9] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[9] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[9] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[9] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[9] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[9] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[11])) { /*if*/
-    variable[11] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[9] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[9] /*n_expr*/, variable[11]) /*PNode::parent=*/;
-  }
-  return_label164: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1734, LOCATE_parser_prod___AMethPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label165: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1741, LOCATE_parser_prod___AMethPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label166: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1748, LOCATE_parser_prod___AMethPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label167: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_methid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1755, LOCATE_parser_prod___AMethPropdef___n_methid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label168: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1762, LOCATE_parser_prod___AMethPropdef___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label169: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1803, LOCATE_parser_prod___AMethPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMethPropdef___replace_child, LOCATE_parser_prod, 1805); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMethPropdef___replace_child, LOCATE_parser_prod, 1809); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label170;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMethPropdef___replace_child, LOCATE_parser_prod, 1819); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label170;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMethPropdef___replace_child, LOCATE_parser_prod, 1829); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label170;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PMethid, ID_PMethid)) /*cast PMethid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMethPropdef___replace_child, LOCATE_parser_prod, 1839); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label170;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMethPropdef___replace_child, LOCATE_parser_prod, 1849); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label170;
-  }
-  return_label170: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1858, LOCATE_parser_prod___AMethPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label171: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1877, LOCATE_parser_prod___AMethPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label172: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1770, LOCATE_parser_prod___AMethPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMethPropdef].i]) return;
-  return_label173: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMethPropdef___init_amethpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1772, LOCATE_parser_prod___AMethPropdef___init_amethpropdef};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMethPropdef].i]) return;
-  variable[7] = variable[0];
-  ((parser_prod___AMethPropdef___empty_init_t)CALL(variable[7],COLOR_parser_prod___AMethPropdef___empty_init))(variable[7], init_table /*YYY*/) /*AMethPropdef::empty_init*/;
-  variable[7] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[7]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[7]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[7]) /*AMethPropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[7]) /*AMethPropdef::_n_methid*/ =  variable[4] /*n_methid*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_methid*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_methid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_methid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_methid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_methid*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_methid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_methid*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_methid*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[7]) /*AMethPropdef::_n_signature*/ =  variable[5] /*n_signature*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_signature*/, variable[7]) /*PNode::parent=*/;
-  }
-  return_label174: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1897, LOCATE_parser_prod___ADeferredMethPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label175: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1904, LOCATE_parser_prod___ADeferredMethPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label176: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1911, LOCATE_parser_prod___ADeferredMethPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label177: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_methid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1925, LOCATE_parser_prod___ADeferredMethPropdef___n_methid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label178: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1932, LOCATE_parser_prod___ADeferredMethPropdef___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label179: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_kwmeth__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 1918, LOCATE_parser_prod___ADeferredMethPropdef___n_kwmeth__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[3]) /*ADeferredMethPropdef::_n_kwmeth*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label180: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 1978, LOCATE_parser_prod___ADeferredMethPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 1980); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 1984); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label181;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 1994); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label181;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 2004); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label181;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[4]) /*ADeferredMethPropdef::_n_kwmeth*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 2014); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[4]) /*ADeferredMethPropdef::_n_kwmeth*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[4]) /*ADeferredMethPropdef::_n_kwmeth*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label181;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PMethid, ID_PMethid)) /*cast PMethid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 2024); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label181;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADeferredMethPropdef___replace_child, LOCATE_parser_prod, 2034); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label181;
-  }
-  return_label181: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2043, LOCATE_parser_prod___ADeferredMethPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[3]) /*ADeferredMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[3]) /*ADeferredMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label182: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2065, LOCATE_parser_prod___ADeferredMethPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[3]) /*ADeferredMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[3]) /*ADeferredMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label183: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1940, LOCATE_parser_prod___ADeferredMethPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i]) return;
-  return_label184: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 1942, LOCATE_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i]) return;
-  variable[8] = variable[0];
-  ((parser_prod___ADeferredMethPropdef___empty_init_t)CALL(variable[8],COLOR_parser_prod___ADeferredMethPropdef___empty_init))(variable[8], init_table /*YYY*/) /*ADeferredMethPropdef::empty_init*/;
-  variable[8] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[8]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[8]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[8]) /*AMethPropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(variable[8]) /*ADeferredMethPropdef::_n_kwmeth*/ =  variable[4] /*n_kwmeth*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwmeth*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwmeth*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwmeth*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwmeth*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwmeth*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[8]) /*AMethPropdef::_n_methid*/ =  variable[5] /*n_methid*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_methid*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_methid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_methid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_methid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_methid*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_methid*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[8]) /*AMethPropdef::_n_signature*/ =  variable[6] /*n_signature*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_signature*/, variable[8]) /*PNode::parent=*/;
-  }
-  return_label185: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2088, LOCATE_parser_prod___AInternMethPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label186: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2095, LOCATE_parser_prod___AInternMethPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label187: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2102, LOCATE_parser_prod___AInternMethPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label188: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_methid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2116, LOCATE_parser_prod___AInternMethPropdef___n_methid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label189: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2123, LOCATE_parser_prod___AInternMethPropdef___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label190: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_kwmeth__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2109, LOCATE_parser_prod___AInternMethPropdef___n_kwmeth__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[3]) /*AInternMethPropdef::_n_kwmeth*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label191: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 2169, LOCATE_parser_prod___AInternMethPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2171); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2175); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label192;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2185); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label192;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2195); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label192;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[4]) /*AInternMethPropdef::_n_kwmeth*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2205); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[4]) /*AInternMethPropdef::_n_kwmeth*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[4]) /*AInternMethPropdef::_n_kwmeth*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label192;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PMethid, ID_PMethid)) /*cast PMethid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2215); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label192;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInternMethPropdef___replace_child, LOCATE_parser_prod, 2225); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label192;
-  }
-  return_label192: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2234, LOCATE_parser_prod___AInternMethPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[3]) /*AInternMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[3]) /*AInternMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label193: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2256, LOCATE_parser_prod___AInternMethPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[3]) /*AInternMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[3]) /*AInternMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label194: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2131, LOCATE_parser_prod___AInternMethPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInternMethPropdef].i]) return;
-  return_label195: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInternMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2133, LOCATE_parser_prod___AInternMethPropdef___init_ainternmethpropdef};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInternMethPropdef].i]) return;
-  variable[8] = variable[0];
-  ((parser_prod___AInternMethPropdef___empty_init_t)CALL(variable[8],COLOR_parser_prod___AInternMethPropdef___empty_init))(variable[8], init_table /*YYY*/) /*AInternMethPropdef::empty_init*/;
-  variable[8] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[8]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[8]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[8]) /*AMethPropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(variable[8]) /*AInternMethPropdef::_n_kwmeth*/ =  variable[4] /*n_kwmeth*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwmeth*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwmeth*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwmeth*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwmeth*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwmeth*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[8]) /*AMethPropdef::_n_methid*/ =  variable[5] /*n_methid*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_methid*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_methid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_methid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_methid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_methid*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_methid*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[8]) /*AMethPropdef::_n_signature*/ =  variable[6] /*n_signature*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_signature*/, variable[8]) /*PNode::parent=*/;
-  }
-  return_label196: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInternMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2279, LOCATE_parser_prod___AExternMethPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label197: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2286, LOCATE_parser_prod___AExternMethPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label198: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2293, LOCATE_parser_prod___AExternMethPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label199: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_methid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2307, LOCATE_parser_prod___AExternMethPropdef___n_methid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label200: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2314, LOCATE_parser_prod___AExternMethPropdef___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label201: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_kwmeth__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2300, LOCATE_parser_prod___AExternMethPropdef___n_kwmeth__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[3]) /*AExternMethPropdef::_n_kwmeth*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label202: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_extern__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2321, LOCATE_parser_prod___AExternMethPropdef___n_extern__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[3]) /*AExternMethPropdef::_n_extern*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label203: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 2372, LOCATE_parser_prod___AExternMethPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2374); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2378); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2388); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2398); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[4]) /*AExternMethPropdef::_n_kwmeth*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2408); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[4]) /*AExternMethPropdef::_n_kwmeth*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[4]) /*AExternMethPropdef::_n_kwmeth*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PMethid, ID_PMethid)) /*cast PMethid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2418); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2428); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[4]) /*AExternMethPropdef::_n_extern*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TString, ID_TString)) /*cast TString*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AExternMethPropdef___replace_child, LOCATE_parser_prod, 2438); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[4]) /*AExternMethPropdef::_n_extern*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[4]) /*AExternMethPropdef::_n_extern*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label204;
-  }
-  return_label204: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2447, LOCATE_parser_prod___AExternMethPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[3]) /*AExternMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[3]) /*AExternMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[3]) /*AExternMethPropdef::_n_extern*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[3]) /*AExternMethPropdef::_n_extern*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label205: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2472, LOCATE_parser_prod___AExternMethPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[3]) /*AExternMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[3]) /*AExternMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[3]) /*AExternMethPropdef::_n_extern*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[3]) /*AExternMethPropdef::_n_extern*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label206: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2329, LOCATE_parser_prod___AExternMethPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AExternMethPropdef].i]) return;
-  return_label207: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AExternMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, val_t  param6, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2331, LOCATE_parser_prod___AExternMethPropdef___init_aexternmethpropdef};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  variable[7] =  param6;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AExternMethPropdef].i]) return;
-  variable[9] = variable[0];
-  ((parser_prod___AExternMethPropdef___empty_init_t)CALL(variable[9],COLOR_parser_prod___AExternMethPropdef___empty_init))(variable[9], init_table /*YYY*/) /*AExternMethPropdef::empty_init*/;
-  variable[9] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[9]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[9]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[9]) /*AMethPropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(variable[9]) /*AExternMethPropdef::_n_kwmeth*/ =  variable[4] /*n_kwmeth*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwmeth*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwmeth*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwmeth*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwmeth*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwmeth*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[9]) /*AMethPropdef::_n_methid*/ =  variable[5] /*n_methid*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_methid*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_methid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_methid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_methid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_methid*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_methid*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[9]) /*AMethPropdef::_n_signature*/ =  variable[6] /*n_signature*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_signature*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AExternMethPropdef____n_extern(variable[9]) /*AExternMethPropdef::_n_extern*/ =  variable[7] /*n_extern*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[7] /*n_extern*/ ==  NIT_NULL /*null*/) || (( variable[7] /*n_extern*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[7] /*n_extern*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*n_extern*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[7] /*n_extern*/,COLOR_kernel___Object_____eqeq))( variable[7] /*n_extern*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n_extern*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n_extern*/, variable[9]) /*PNode::parent=*/;
-  }
-  return_label208: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AExternMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2498, LOCATE_parser_prod___AConcreteMethPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label209: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2505, LOCATE_parser_prod___AConcreteMethPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label210: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2512, LOCATE_parser_prod___AConcreteMethPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label211: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_methid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2526, LOCATE_parser_prod___AConcreteMethPropdef___n_methid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label212: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2533, LOCATE_parser_prod___AConcreteMethPropdef___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label213: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_kwmeth__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2519, LOCATE_parser_prod___AConcreteMethPropdef___n_kwmeth__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[3]) /*AConcreteMethPropdef::_n_kwmeth*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label214: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_block__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2540, LOCATE_parser_prod___AConcreteMethPropdef___n_block__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label215: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 2591, LOCATE_parser_prod___AConcreteMethPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2593); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2597); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2607); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2617); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[4]) /*AConcreteMethPropdef::_n_kwmeth*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2627); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[4]) /*AConcreteMethPropdef::_n_kwmeth*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[4]) /*AConcreteMethPropdef::_n_kwmeth*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PMethid, ID_PMethid)) /*cast PMethid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2637); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2647); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteMethPropdef___replace_child, LOCATE_parser_prod, 2657); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label216;
-  }
-  return_label216: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2666, LOCATE_parser_prod___AConcreteMethPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[3]) /*AConcreteMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[3]) /*AConcreteMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label217: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2691, LOCATE_parser_prod___AConcreteMethPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[3]) /*AConcreteMethPropdef::_n_kwmeth*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[3]) /*AConcreteMethPropdef::_n_kwmeth*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label218: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2548, LOCATE_parser_prod___AConcreteMethPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i]) return;
-  return_label219: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, val_t  param6, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2550, LOCATE_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  variable[7] =  param6;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i]) return;
-  variable[9] = variable[0];
-  ((parser_prod___AConcreteMethPropdef___empty_init_t)CALL(variable[9],COLOR_parser_prod___AConcreteMethPropdef___empty_init))(variable[9], init_table /*YYY*/) /*AConcreteMethPropdef::empty_init*/;
-  variable[9] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[9]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[9]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[9]) /*AMethPropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(variable[9]) /*AConcreteMethPropdef::_n_kwmeth*/ =  variable[4] /*n_kwmeth*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwmeth*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwmeth*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwmeth*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwmeth*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwmeth*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwmeth*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[9]) /*AMethPropdef::_n_methid*/ =  variable[5] /*n_methid*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_methid*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_methid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_methid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_methid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_methid*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_methid*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[9]) /*AMethPropdef::_n_signature*/ =  variable[6] /*n_signature*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_signature*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[9]) /*AConcreteMethPropdef::_n_block*/ =  variable[7] /*n_block*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[7] /*n_block*/ ==  NIT_NULL /*null*/) || (( variable[7] /*n_block*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[7] /*n_block*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*n_block*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[7] /*n_block*/,COLOR_kernel___Object_____eqeq))( variable[7] /*n_block*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n_block*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n_block*/, variable[9]) /*PNode::parent=*/;
-  }
-  return_label220: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2717, LOCATE_parser_prod___AConcreteInitPropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label221: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2724, LOCATE_parser_prod___AConcreteInitPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label222: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2731, LOCATE_parser_prod___AConcreteInitPropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label223: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_methid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2745, LOCATE_parser_prod___AConcreteInitPropdef___n_methid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label224: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2752, LOCATE_parser_prod___AConcreteInitPropdef___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label225: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_block__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2759, LOCATE_parser_prod___AConcreteInitPropdef___n_block__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label226: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_kwinit__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2738, LOCATE_parser_prod___AConcreteInitPropdef___n_kwinit__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[3]) /*AConcreteInitPropdef::_n_kwinit*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label227: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 2810, LOCATE_parser_prod___AConcreteInitPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2812); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2816); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2826); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2836); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_visibility(variable[4]) /*AMethPropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[4]) /*AConcreteInitPropdef::_n_kwinit*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2846); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[4]) /*AConcreteInitPropdef::_n_kwinit*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[4]) /*AConcreteInitPropdef::_n_kwinit*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PMethid, ID_PMethid)) /*cast PMethid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2856); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_methid(variable[4]) /*AMethPropdef::_n_methid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2866); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_signature(variable[4]) /*AMethPropdef::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AConcreteInitPropdef___replace_child, LOCATE_parser_prod, 2876); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label228;
-  }
-  return_label228: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2885, LOCATE_parser_prod___AConcreteInitPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[3]) /*AConcreteInitPropdef::_n_kwinit*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[3]) /*AConcreteInitPropdef::_n_kwinit*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label229: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2910, LOCATE_parser_prod___AConcreteInitPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(variable[3]) /*AMethPropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[3]) /*AConcreteInitPropdef::_n_kwinit*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[3]) /*AConcreteInitPropdef::_n_kwinit*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_methid(variable[3]) /*AMethPropdef::_n_methid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_signature(variable[3]) /*AMethPropdef::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label230: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2767, LOCATE_parser_prod___AConcreteInitPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i]) return;
-  return_label231: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, val_t  param6, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2769, LOCATE_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  variable[7] =  param6;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i]) return;
-  variable[9] = variable[0];
-  ((parser_prod___AConcreteInitPropdef___empty_init_t)CALL(variable[9],COLOR_parser_prod___AConcreteInitPropdef___empty_init))(variable[9], init_table /*YYY*/) /*AConcreteInitPropdef::empty_init*/;
-  variable[9] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[9]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[9]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_visibility(variable[9]) /*AMethPropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(variable[9]) /*AConcreteInitPropdef::_n_kwinit*/ =  variable[4] /*n_kwinit*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwinit*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwinit*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwinit*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwinit*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwinit*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwinit*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwinit*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwinit*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_methid(variable[9]) /*AMethPropdef::_n_methid*/ =  variable[5] /*n_methid*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_methid*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_methid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_methid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_methid*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_methid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_methid*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_methid*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_signature(variable[9]) /*AMethPropdef::_n_signature*/ =  variable[6] /*n_signature*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_signature*/, variable[9]) /*PNode::parent=*/;
-  }
-  variable[9] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[9]) /*AConcreteMethPropdef::_n_block*/ =  variable[7] /*n_block*/;
-  variable[9] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[7] /*n_block*/ ==  NIT_NULL /*null*/) || (( variable[7] /*n_block*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[7] /*n_block*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*n_block*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[7] /*n_block*/,COLOR_kernel___Object_____eqeq))( variable[7] /*n_block*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[9])) { /*if*/
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n_block*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n_block*/, variable[9]) /*PNode::parent=*/;
-  }
-  return_label232: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2936, LOCATE_parser_prod___AMainMethPropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label233: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___n_block__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2943, LOCATE_parser_prod___AMainMethPropdef___n_block__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label234: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 2969, LOCATE_parser_prod___AMainMethPropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMainMethPropdef___replace_child, LOCATE_parser_prod, 2971); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMainMethPropdef___replace_child, LOCATE_parser_prod, 2975); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label235;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMainMethPropdef___replace_child, LOCATE_parser_prod, 2985); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label235;
-  }
-  return_label235: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 2994, LOCATE_parser_prod___AMainMethPropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label236: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3004, LOCATE_parser_prod___AMainMethPropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[3]) /*AMethPropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[3]) /*AConcreteMethPropdef::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label237: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2951, LOCATE_parser_prod___AMainMethPropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainMethPropdef].i]) return;
-  return_label238: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 2953, LOCATE_parser_prod___AMainMethPropdef___init_amainmethpropdef};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainMethPropdef].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AMainMethPropdef___empty_init_t)CALL(variable[4],COLOR_parser_prod___AMainMethPropdef___empty_init))(variable[4], init_table /*YYY*/) /*AMainMethPropdef::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(variable[4]) /*AMethPropdef::_n_kwredef*/ =  variable[1] /*n_kwredef*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwredef*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(variable[4]) /*AConcreteMethPropdef::_n_block*/ =  variable[2] /*n_block*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_block*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_block*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_block*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_block*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_block*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_block*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_block*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_block*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label239: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMainMethPropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_doc__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3015, LOCATE_parser_prod___ATypePropdef___n_doc__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label240: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3022, LOCATE_parser_prod___ATypePropdef___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[3]) /*ATypePropdef::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label241: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_visibility__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3029, LOCATE_parser_prod___ATypePropdef___n_visibility__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_visibility(variable[3]) /*ATypePropdef::_n_visibility*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label242: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_kwtype__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3036, LOCATE_parser_prod___ATypePropdef___n_kwtype__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[3]) /*ATypePropdef::_n_kwtype*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label243: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3043, LOCATE_parser_prod___ATypePropdef___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_id(variable[3]) /*ATypePropdef::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label244: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3050, LOCATE_parser_prod___ATypePropdef___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_type(variable[3]) /*ATypePropdef::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label245: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3096, LOCATE_parser_prod___ATypePropdef___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3098); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PDoc, ID_PDoc)) /*cast PDoc*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3102); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PPropdef____n_doc(variable[4]) /*PPropdef::_n_doc*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label246;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[4]) /*ATypePropdef::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3112); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[4]) /*ATypePropdef::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[4]) /*ATypePropdef::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label246;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATypePropdef____n_visibility(variable[4]) /*ATypePropdef::_n_visibility*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PVisibility, ID_PVisibility)) /*cast PVisibility*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3122); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_visibility(variable[4]) /*ATypePropdef::_n_visibility*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_visibility(variable[4]) /*ATypePropdef::_n_visibility*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label246;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[4]) /*ATypePropdef::_n_kwtype*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwtype, ID_TKwtype)) /*cast TKwtype*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3132); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[4]) /*ATypePropdef::_n_kwtype*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[4]) /*ATypePropdef::_n_kwtype*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label246;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATypePropdef____n_id(variable[4]) /*ATypePropdef::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3142); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_id(variable[4]) /*ATypePropdef::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_id(variable[4]) /*ATypePropdef::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label246;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATypePropdef____n_type(variable[4]) /*ATypePropdef::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATypePropdef___replace_child, LOCATE_parser_prod, 3152); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_type(variable[4]) /*ATypePropdef::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATypePropdef____n_type(variable[4]) /*ATypePropdef::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label246;
-  }
-  return_label246: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3161, LOCATE_parser_prod___ATypePropdef___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[3]) /*ATypePropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[3]) /*ATypePropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_visibility(variable[3]) /*ATypePropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_visibility(variable[3]) /*ATypePropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[3]) /*ATypePropdef::_n_kwtype*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[3]) /*ATypePropdef::_n_kwtype*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_id(variable[3]) /*ATypePropdef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_id(variable[3]) /*ATypePropdef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_type(variable[3]) /*ATypePropdef::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_type(variable[3]) /*ATypePropdef::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label247: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3183, LOCATE_parser_prod___ATypePropdef___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PPropdef____n_doc(variable[3]) /*PPropdef::_n_doc*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[3]) /*ATypePropdef::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[3]) /*ATypePropdef::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_visibility(variable[3]) /*ATypePropdef::_n_visibility*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_visibility(variable[3]) /*ATypePropdef::_n_visibility*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[3]) /*ATypePropdef::_n_kwtype*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[3]) /*ATypePropdef::_n_kwtype*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_id(variable[3]) /*ATypePropdef::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_id(variable[3]) /*ATypePropdef::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATypePropdef____n_type(variable[3]) /*ATypePropdef::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATypePropdef____n_type(variable[3]) /*ATypePropdef::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label248: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3058, LOCATE_parser_prod___ATypePropdef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATypePropdef].i]) return;
-  return_label249: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATypePropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATypePropdef___init_atypepropdef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3060, LOCATE_parser_prod___ATypePropdef___init_atypepropdef};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATypePropdef].i]) return;
-  variable[8] = variable[0];
-  ((parser_prod___ATypePropdef___empty_init_t)CALL(variable[8],COLOR_parser_prod___ATypePropdef___empty_init))(variable[8], init_table /*YYY*/) /*ATypePropdef::empty_init*/;
-  variable[8] = variable[0];
-  ATTR_parser_nodes___PPropdef____n_doc(variable[8]) /*PPropdef::_n_doc*/ =  variable[1] /*n_doc*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_doc*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_doc*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_doc*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_doc*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_doc*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_doc*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_doc*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_kwredef(variable[8]) /*ATypePropdef::_n_kwredef*/ =  variable[2] /*n_kwredef*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwredef*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_visibility(variable[8]) /*ATypePropdef::_n_visibility*/ =  variable[3] /*n_visibility*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_visibility*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_visibility*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_visibility*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_visibility*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_visibility*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_visibility*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_visibility*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_kwtype(variable[8]) /*ATypePropdef::_n_kwtype*/ =  variable[4] /*n_kwtype*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_kwtype*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_kwtype*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwtype*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_kwtype*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_kwtype*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_kwtype*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_kwtype*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_kwtype*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_id(variable[8]) /*ATypePropdef::_n_id*/ =  variable[5] /*n_id*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_id*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___ATypePropdef____n_type(variable[8]) /*ATypePropdef::_n_type*/ =  variable[6] /*n_type*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_type*/, variable[8]) /*PNode::parent=*/;
-  }
-  return_label250: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATypePropdef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3206, LOCATE_parser_prod___AReadAble___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label251: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___n_kwreadable__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3213, LOCATE_parser_prod___AReadAble___n_kwreadable__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReadAble____n_kwreadable(variable[3]) /*AReadAble::_n_kwreadable*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label252: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3239, LOCATE_parser_prod___AReadAble___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AReadAble___replace_child, LOCATE_parser_prod, 3241); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AReadAble___replace_child, LOCATE_parser_prod, 3245); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label253;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReadAble____n_kwreadable(variable[4]) /*AReadAble::_n_kwreadable*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwreadable, ID_TKwreadable)) /*cast TKwreadable*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AReadAble___replace_child, LOCATE_parser_prod, 3255); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReadAble____n_kwreadable(variable[4]) /*AReadAble::_n_kwreadable*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReadAble____n_kwreadable(variable[4]) /*AReadAble::_n_kwreadable*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label253;
-  }
-  return_label253: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3264, LOCATE_parser_prod___AReadAble___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReadAble____n_kwreadable(variable[3]) /*AReadAble::_n_kwreadable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReadAble____n_kwreadable(variable[3]) /*AReadAble::_n_kwreadable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label254: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3274, LOCATE_parser_prod___AReadAble___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReadAble____n_kwreadable(variable[3]) /*AReadAble::_n_kwreadable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReadAble____n_kwreadable(variable[3]) /*AReadAble::_n_kwreadable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label255: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3221, LOCATE_parser_prod___AReadAble___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReadAble].i]) return;
-  return_label256: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReadAble].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReadAble___init_areadable(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3223, LOCATE_parser_prod___AReadAble___init_areadable};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReadAble].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AReadAble___empty_init_t)CALL(variable[4],COLOR_parser_prod___AReadAble___empty_init))(variable[4], init_table /*YYY*/) /*AReadAble::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/ =  variable[1] /*n_kwredef*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwredef*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AReadAble____n_kwreadable(variable[4]) /*AReadAble::_n_kwreadable*/ =  variable[2] /*n_kwreadable*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwreadable*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwreadable*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwreadable*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwreadable*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwreadable*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwreadable*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwreadable*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwreadable*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label257: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReadAble].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___n_kwredef__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3285, LOCATE_parser_prod___AWriteAble___n_kwredef__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label258: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___n_kwwritable__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3292, LOCATE_parser_prod___AWriteAble___n_kwwritable__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[3]) /*AWriteAble::_n_kwwritable*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label259: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3318, LOCATE_parser_prod___AWriteAble___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWriteAble___replace_child, LOCATE_parser_prod, 3320); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWriteAble___replace_child, LOCATE_parser_prod, 3324); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label260;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[4]) /*AWriteAble::_n_kwwritable*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwwritable, ID_TKwwritable)) /*cast TKwwritable*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWriteAble___replace_child, LOCATE_parser_prod, 3334); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[4]) /*AWriteAble::_n_kwwritable*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[4]) /*AWriteAble::_n_kwwritable*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label260;
-  }
-  return_label260: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3343, LOCATE_parser_prod___AWriteAble___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[3]) /*AWriteAble::_n_kwwritable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[3]) /*AWriteAble::_n_kwwritable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label261: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3353, LOCATE_parser_prod___AWriteAble___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PAble____n_kwredef(variable[3]) /*PAble::_n_kwredef*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[3]) /*AWriteAble::_n_kwwritable*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[3]) /*AWriteAble::_n_kwwritable*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label262: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3300, LOCATE_parser_prod___AWriteAble___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWriteAble].i]) return;
-  return_label263: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWriteAble].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWriteAble___init_awriteable(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3302, LOCATE_parser_prod___AWriteAble___init_awriteable};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWriteAble].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AWriteAble___empty_init_t)CALL(variable[4],COLOR_parser_prod___AWriteAble___empty_init))(variable[4], init_table /*YYY*/) /*AWriteAble::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___PAble____n_kwredef(variable[4]) /*PAble::_n_kwredef*/ =  variable[1] /*n_kwredef*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwredef*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwredef*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwredef*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwredef*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwredef*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwredef*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwredef*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AWriteAble____n_kwwritable(variable[4]) /*AWriteAble::_n_kwwritable*/ =  variable[2] /*n_kwwritable*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwwritable*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwwritable*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwwritable*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwwritable*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwwritable*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwwritable*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwwritable*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwwritable*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label264: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWriteAble].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIdMethid___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3364, LOCATE_parser_prod___AIdMethid___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIdMethid____n_id(variable[3]) /*AIdMethid::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label265: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIdMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3385, LOCATE_parser_prod___AIdMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIdMethid___replace_child, LOCATE_parser_prod, 3387); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIdMethid____n_id(variable[4]) /*AIdMethid::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIdMethid___replace_child, LOCATE_parser_prod, 3391); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIdMethid____n_id(variable[4]) /*AIdMethid::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIdMethid____n_id(variable[4]) /*AIdMethid::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label266;
-  }
-  return_label266: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIdMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3400, LOCATE_parser_prod___AIdMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIdMethid____n_id(variable[3]) /*AIdMethid::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIdMethid____n_id(variable[3]) /*AIdMethid::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label267: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIdMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3407, LOCATE_parser_prod___AIdMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIdMethid____n_id(variable[3]) /*AIdMethid::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIdMethid____n_id(variable[3]) /*AIdMethid::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label268: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIdMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3372, LOCATE_parser_prod___AIdMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIdMethid].i]) return;
-  return_label269: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIdMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIdMethid___init_aidmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3374, LOCATE_parser_prod___AIdMethid___init_aidmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIdMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AIdMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AIdMethid___empty_init))(variable[3], init_table /*YYY*/) /*AIdMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIdMethid____n_id(variable[3]) /*AIdMethid::_n_id*/ =  variable[1] /*n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label270: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIdMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusMethid___n_plus__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3415, LOCATE_parser_prod___APlusMethid___n_plus__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APlusMethid____n_plus(variable[3]) /*APlusMethid::_n_plus*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label271: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3436, LOCATE_parser_prod___APlusMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusMethid___replace_child, LOCATE_parser_prod, 3438); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APlusMethid____n_plus(variable[4]) /*APlusMethid::_n_plus*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TPlus, ID_TPlus)) /*cast TPlus*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusMethid___replace_child, LOCATE_parser_prod, 3442); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APlusMethid____n_plus(variable[4]) /*APlusMethid::_n_plus*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APlusMethid____n_plus(variable[4]) /*APlusMethid::_n_plus*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label272;
-  }
-  return_label272: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3451, LOCATE_parser_prod___APlusMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APlusMethid____n_plus(variable[3]) /*APlusMethid::_n_plus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APlusMethid____n_plus(variable[3]) /*APlusMethid::_n_plus*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label273: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3458, LOCATE_parser_prod___APlusMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APlusMethid____n_plus(variable[3]) /*APlusMethid::_n_plus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APlusMethid____n_plus(variable[3]) /*APlusMethid::_n_plus*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label274: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3423, LOCATE_parser_prod___APlusMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusMethid].i]) return;
-  return_label275: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusMethid___init_aplusmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3425, LOCATE_parser_prod___APlusMethid___init_aplusmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___APlusMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___APlusMethid___empty_init))(variable[3], init_table /*YYY*/) /*APlusMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APlusMethid____n_plus(variable[3]) /*APlusMethid::_n_plus*/ =  variable[1] /*n_plus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_plus*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_plus*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_plus*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_plus*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_plus*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_plus*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_plus*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_plus*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label276: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusMethid___n_minus__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3466, LOCATE_parser_prod___AMinusMethid___n_minus__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMinusMethid____n_minus(variable[3]) /*AMinusMethid::_n_minus*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label277: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3487, LOCATE_parser_prod___AMinusMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusMethid___replace_child, LOCATE_parser_prod, 3489); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMinusMethid____n_minus(variable[4]) /*AMinusMethid::_n_minus*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusMethid___replace_child, LOCATE_parser_prod, 3493); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMinusMethid____n_minus(variable[4]) /*AMinusMethid::_n_minus*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMinusMethid____n_minus(variable[4]) /*AMinusMethid::_n_minus*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label278;
-  }
-  return_label278: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3502, LOCATE_parser_prod___AMinusMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMinusMethid____n_minus(variable[3]) /*AMinusMethid::_n_minus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMinusMethid____n_minus(variable[3]) /*AMinusMethid::_n_minus*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label279: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3509, LOCATE_parser_prod___AMinusMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMinusMethid____n_minus(variable[3]) /*AMinusMethid::_n_minus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMinusMethid____n_minus(variable[3]) /*AMinusMethid::_n_minus*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label280: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3474, LOCATE_parser_prod___AMinusMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusMethid].i]) return;
-  return_label281: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusMethid___init_aminusmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3476, LOCATE_parser_prod___AMinusMethid___init_aminusmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AMinusMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AMinusMethid___empty_init))(variable[3], init_table /*YYY*/) /*AMinusMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMinusMethid____n_minus(variable[3]) /*AMinusMethid::_n_minus*/ =  variable[1] /*n_minus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_minus*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_minus*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_minus*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_minus*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_minus*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_minus*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_minus*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_minus*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label282: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarMethid___n_star__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3517, LOCATE_parser_prod___AStarMethid___n_star__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStarMethid____n_star(variable[3]) /*AStarMethid::_n_star*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label283: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3538, LOCATE_parser_prod___AStarMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarMethid___replace_child, LOCATE_parser_prod, 3540); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AStarMethid____n_star(variable[4]) /*AStarMethid::_n_star*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TStar, ID_TStar)) /*cast TStar*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarMethid___replace_child, LOCATE_parser_prod, 3544); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStarMethid____n_star(variable[4]) /*AStarMethid::_n_star*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStarMethid____n_star(variable[4]) /*AStarMethid::_n_star*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label284;
-  }
-  return_label284: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3553, LOCATE_parser_prod___AStarMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStarMethid____n_star(variable[3]) /*AStarMethid::_n_star*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStarMethid____n_star(variable[3]) /*AStarMethid::_n_star*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label285: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3560, LOCATE_parser_prod___AStarMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStarMethid____n_star(variable[3]) /*AStarMethid::_n_star*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStarMethid____n_star(variable[3]) /*AStarMethid::_n_star*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label286: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3525, LOCATE_parser_prod___AStarMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarMethid].i]) return;
-  return_label287: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarMethid___init_astarmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3527, LOCATE_parser_prod___AStarMethid___init_astarmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AStarMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AStarMethid___empty_init))(variable[3], init_table /*YYY*/) /*AStarMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStarMethid____n_star(variable[3]) /*AStarMethid::_n_star*/ =  variable[1] /*n_star*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_star*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_star*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_star*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_star*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_star*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_star*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_star*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_star*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label288: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashMethid___n_slash__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3568, LOCATE_parser_prod___ASlashMethid___n_slash__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASlashMethid____n_slash(variable[3]) /*ASlashMethid::_n_slash*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label289: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3589, LOCATE_parser_prod___ASlashMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASlashMethid___replace_child, LOCATE_parser_prod, 3591); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASlashMethid____n_slash(variable[4]) /*ASlashMethid::_n_slash*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TSlash, ID_TSlash)) /*cast TSlash*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASlashMethid___replace_child, LOCATE_parser_prod, 3595); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASlashMethid____n_slash(variable[4]) /*ASlashMethid::_n_slash*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASlashMethid____n_slash(variable[4]) /*ASlashMethid::_n_slash*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label290;
-  }
-  return_label290: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3604, LOCATE_parser_prod___ASlashMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASlashMethid____n_slash(variable[3]) /*ASlashMethid::_n_slash*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASlashMethid____n_slash(variable[3]) /*ASlashMethid::_n_slash*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label291: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3611, LOCATE_parser_prod___ASlashMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASlashMethid____n_slash(variable[3]) /*ASlashMethid::_n_slash*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASlashMethid____n_slash(variable[3]) /*ASlashMethid::_n_slash*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label292: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3576, LOCATE_parser_prod___ASlashMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashMethid].i]) return;
-  return_label293: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashMethid___init_aslashmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3578, LOCATE_parser_prod___ASlashMethid___init_aslashmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ASlashMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___ASlashMethid___empty_init))(variable[3], init_table /*YYY*/) /*ASlashMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASlashMethid____n_slash(variable[3]) /*ASlashMethid::_n_slash*/ =  variable[1] /*n_slash*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_slash*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_slash*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_slash*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_slash*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_slash*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_slash*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_slash*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_slash*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label294: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentMethid___n_percent__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3619, LOCATE_parser_prod___APercentMethid___n_percent__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APercentMethid____n_percent(variable[3]) /*APercentMethid::_n_percent*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label295: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3640, LOCATE_parser_prod___APercentMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APercentMethid___replace_child, LOCATE_parser_prod, 3642); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APercentMethid____n_percent(variable[4]) /*APercentMethid::_n_percent*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TPercent, ID_TPercent)) /*cast TPercent*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APercentMethid___replace_child, LOCATE_parser_prod, 3646); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APercentMethid____n_percent(variable[4]) /*APercentMethid::_n_percent*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APercentMethid____n_percent(variable[4]) /*APercentMethid::_n_percent*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label296;
-  }
-  return_label296: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3655, LOCATE_parser_prod___APercentMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APercentMethid____n_percent(variable[3]) /*APercentMethid::_n_percent*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APercentMethid____n_percent(variable[3]) /*APercentMethid::_n_percent*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label297: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3662, LOCATE_parser_prod___APercentMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APercentMethid____n_percent(variable[3]) /*APercentMethid::_n_percent*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APercentMethid____n_percent(variable[3]) /*APercentMethid::_n_percent*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label298: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3627, LOCATE_parser_prod___APercentMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentMethid].i]) return;
-  return_label299: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentMethid___init_apercentmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3629, LOCATE_parser_prod___APercentMethid___init_apercentmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___APercentMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___APercentMethid___empty_init))(variable[3], init_table /*YYY*/) /*APercentMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APercentMethid____n_percent(variable[3]) /*APercentMethid::_n_percent*/ =  variable[1] /*n_percent*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_percent*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_percent*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_percent*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_percent*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_percent*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_percent*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_percent*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_percent*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label300: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqMethid___n_eq__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3670, LOCATE_parser_prod___AEqMethid___n_eq__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AEqMethid____n_eq(variable[3]) /*AEqMethid::_n_eq*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label301: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3691, LOCATE_parser_prod___AEqMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEqMethid___replace_child, LOCATE_parser_prod, 3693); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AEqMethid____n_eq(variable[4]) /*AEqMethid::_n_eq*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TEq, ID_TEq)) /*cast TEq*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEqMethid___replace_child, LOCATE_parser_prod, 3697); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEqMethid____n_eq(variable[4]) /*AEqMethid::_n_eq*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEqMethid____n_eq(variable[4]) /*AEqMethid::_n_eq*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label302;
-  }
-  return_label302: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3706, LOCATE_parser_prod___AEqMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEqMethid____n_eq(variable[3]) /*AEqMethid::_n_eq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEqMethid____n_eq(variable[3]) /*AEqMethid::_n_eq*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label303: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3713, LOCATE_parser_prod___AEqMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEqMethid____n_eq(variable[3]) /*AEqMethid::_n_eq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEqMethid____n_eq(variable[3]) /*AEqMethid::_n_eq*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label304: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3678, LOCATE_parser_prod___AEqMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqMethid].i]) return;
-  return_label305: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqMethid___init_aeqmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3680, LOCATE_parser_prod___AEqMethid___init_aeqmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AEqMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AEqMethid___empty_init))(variable[3], init_table /*YYY*/) /*AEqMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AEqMethid____n_eq(variable[3]) /*AEqMethid::_n_eq*/ =  variable[1] /*n_eq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_eq*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_eq*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_eq*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_eq*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_eq*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_eq*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_eq*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_eq*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label306: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeMethid___n_ne__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3721, LOCATE_parser_prod___ANeMethid___n_ne__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANeMethid____n_ne(variable[3]) /*ANeMethid::_n_ne*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label307: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3742, LOCATE_parser_prod___ANeMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANeMethid___replace_child, LOCATE_parser_prod, 3744); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANeMethid____n_ne(variable[4]) /*ANeMethid::_n_ne*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TNe, ID_TNe)) /*cast TNe*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANeMethid___replace_child, LOCATE_parser_prod, 3748); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANeMethid____n_ne(variable[4]) /*ANeMethid::_n_ne*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANeMethid____n_ne(variable[4]) /*ANeMethid::_n_ne*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label308;
-  }
-  return_label308: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3757, LOCATE_parser_prod___ANeMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANeMethid____n_ne(variable[3]) /*ANeMethid::_n_ne*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANeMethid____n_ne(variable[3]) /*ANeMethid::_n_ne*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label309: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3764, LOCATE_parser_prod___ANeMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANeMethid____n_ne(variable[3]) /*ANeMethid::_n_ne*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANeMethid____n_ne(variable[3]) /*ANeMethid::_n_ne*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label310: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3729, LOCATE_parser_prod___ANeMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeMethid].i]) return;
-  return_label311: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeMethid___init_anemethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3731, LOCATE_parser_prod___ANeMethid___init_anemethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ANeMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___ANeMethid___empty_init))(variable[3], init_table /*YYY*/) /*ANeMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANeMethid____n_ne(variable[3]) /*ANeMethid::_n_ne*/ =  variable[1] /*n_ne*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_ne*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_ne*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_ne*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_ne*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_ne*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_ne*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_ne*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_ne*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label312: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeMethid___n_le__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3772, LOCATE_parser_prod___ALeMethid___n_le__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ALeMethid____n_le(variable[3]) /*ALeMethid::_n_le*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label313: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3793, LOCATE_parser_prod___ALeMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALeMethid___replace_child, LOCATE_parser_prod, 3795); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ALeMethid____n_le(variable[4]) /*ALeMethid::_n_le*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TLe, ID_TLe)) /*cast TLe*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALeMethid___replace_child, LOCATE_parser_prod, 3799); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ALeMethid____n_le(variable[4]) /*ALeMethid::_n_le*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ALeMethid____n_le(variable[4]) /*ALeMethid::_n_le*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label314;
-  }
-  return_label314: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3808, LOCATE_parser_prod___ALeMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ALeMethid____n_le(variable[3]) /*ALeMethid::_n_le*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ALeMethid____n_le(variable[3]) /*ALeMethid::_n_le*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label315: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3815, LOCATE_parser_prod___ALeMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ALeMethid____n_le(variable[3]) /*ALeMethid::_n_le*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ALeMethid____n_le(variable[3]) /*ALeMethid::_n_le*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label316: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3780, LOCATE_parser_prod___ALeMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeMethid].i]) return;
-  return_label317: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeMethid___init_alemethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3782, LOCATE_parser_prod___ALeMethid___init_alemethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ALeMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___ALeMethid___empty_init))(variable[3], init_table /*YYY*/) /*ALeMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ALeMethid____n_le(variable[3]) /*ALeMethid::_n_le*/ =  variable[1] /*n_le*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_le*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_le*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_le*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_le*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_le*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_le*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_le*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_le*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label318: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeMethid___n_ge__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3823, LOCATE_parser_prod___AGeMethid___n_ge__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AGeMethid____n_ge(variable[3]) /*AGeMethid::_n_ge*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label319: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3844, LOCATE_parser_prod___AGeMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGeMethid___replace_child, LOCATE_parser_prod, 3846); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AGeMethid____n_ge(variable[4]) /*AGeMethid::_n_ge*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TGe, ID_TGe)) /*cast TGe*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGeMethid___replace_child, LOCATE_parser_prod, 3850); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AGeMethid____n_ge(variable[4]) /*AGeMethid::_n_ge*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AGeMethid____n_ge(variable[4]) /*AGeMethid::_n_ge*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label320;
-  }
-  return_label320: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3859, LOCATE_parser_prod___AGeMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AGeMethid____n_ge(variable[3]) /*AGeMethid::_n_ge*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AGeMethid____n_ge(variable[3]) /*AGeMethid::_n_ge*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label321: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3866, LOCATE_parser_prod___AGeMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AGeMethid____n_ge(variable[3]) /*AGeMethid::_n_ge*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AGeMethid____n_ge(variable[3]) /*AGeMethid::_n_ge*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label322: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3831, LOCATE_parser_prod___AGeMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeMethid].i]) return;
-  return_label323: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeMethid___init_agemethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3833, LOCATE_parser_prod___AGeMethid___init_agemethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AGeMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AGeMethid___empty_init))(variable[3], init_table /*YYY*/) /*AGeMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AGeMethid____n_ge(variable[3]) /*AGeMethid::_n_ge*/ =  variable[1] /*n_ge*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_ge*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_ge*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_ge*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_ge*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_ge*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_ge*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_ge*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_ge*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label324: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtMethid___n_lt__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3874, LOCATE_parser_prod___ALtMethid___n_lt__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ALtMethid____n_lt(variable[3]) /*ALtMethid::_n_lt*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label325: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3895, LOCATE_parser_prod___ALtMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALtMethid___replace_child, LOCATE_parser_prod, 3897); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ALtMethid____n_lt(variable[4]) /*ALtMethid::_n_lt*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TLt, ID_TLt)) /*cast TLt*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALtMethid___replace_child, LOCATE_parser_prod, 3901); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ALtMethid____n_lt(variable[4]) /*ALtMethid::_n_lt*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ALtMethid____n_lt(variable[4]) /*ALtMethid::_n_lt*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label326;
-  }
-  return_label326: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3910, LOCATE_parser_prod___ALtMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ALtMethid____n_lt(variable[3]) /*ALtMethid::_n_lt*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ALtMethid____n_lt(variable[3]) /*ALtMethid::_n_lt*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label327: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3917, LOCATE_parser_prod___ALtMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ALtMethid____n_lt(variable[3]) /*ALtMethid::_n_lt*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ALtMethid____n_lt(variable[3]) /*ALtMethid::_n_lt*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label328: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3882, LOCATE_parser_prod___ALtMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtMethid].i]) return;
-  return_label329: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtMethid___init_altmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3884, LOCATE_parser_prod___ALtMethid___init_altmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ALtMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___ALtMethid___empty_init))(variable[3], init_table /*YYY*/) /*ALtMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ALtMethid____n_lt(variable[3]) /*ALtMethid::_n_lt*/ =  variable[1] /*n_lt*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_lt*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_lt*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_lt*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_lt*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_lt*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_lt*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_lt*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_lt*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label330: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtMethid___n_gt__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3925, LOCATE_parser_prod___AGtMethid___n_gt__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AGtMethid____n_gt(variable[3]) /*AGtMethid::_n_gt*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label331: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 3946, LOCATE_parser_prod___AGtMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGtMethid___replace_child, LOCATE_parser_prod, 3948); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AGtMethid____n_gt(variable[4]) /*AGtMethid::_n_gt*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TGt, ID_TGt)) /*cast TGt*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGtMethid___replace_child, LOCATE_parser_prod, 3952); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AGtMethid____n_gt(variable[4]) /*AGtMethid::_n_gt*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AGtMethid____n_gt(variable[4]) /*AGtMethid::_n_gt*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label332;
-  }
-  return_label332: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3961, LOCATE_parser_prod___AGtMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AGtMethid____n_gt(variable[3]) /*AGtMethid::_n_gt*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AGtMethid____n_gt(variable[3]) /*AGtMethid::_n_gt*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label333: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3968, LOCATE_parser_prod___AGtMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AGtMethid____n_gt(variable[3]) /*AGtMethid::_n_gt*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AGtMethid____n_gt(variable[3]) /*AGtMethid::_n_gt*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label334: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3933, LOCATE_parser_prod___AGtMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtMethid].i]) return;
-  return_label335: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtMethid___init_agtmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3935, LOCATE_parser_prod___AGtMethid___init_agtmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AGtMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AGtMethid___empty_init))(variable[3], init_table /*YYY*/) /*AGtMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AGtMethid____n_gt(variable[3]) /*AGtMethid::_n_gt*/ =  variable[1] /*n_gt*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_gt*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_gt*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_gt*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_gt*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_gt*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_gt*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_gt*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_gt*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label336: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___n_obra__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3976, LOCATE_parser_prod___ABraMethid___n_obra__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABraMethid____n_obra(variable[3]) /*ABraMethid::_n_obra*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label337: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___n_cbra__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 3983, LOCATE_parser_prod___ABraMethid___n_cbra__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABraMethid____n_cbra(variable[3]) /*ABraMethid::_n_cbra*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label338: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4009, LOCATE_parser_prod___ABraMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraMethid___replace_child, LOCATE_parser_prod, 4011); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraMethid____n_obra(variable[4]) /*ABraMethid::_n_obra*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TObra, ID_TObra)) /*cast TObra*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraMethid___replace_child, LOCATE_parser_prod, 4015); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraMethid____n_obra(variable[4]) /*ABraMethid::_n_obra*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraMethid____n_obra(variable[4]) /*ABraMethid::_n_obra*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label339;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraMethid____n_cbra(variable[4]) /*ABraMethid::_n_cbra*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraMethid___replace_child, LOCATE_parser_prod, 4025); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraMethid____n_cbra(variable[4]) /*ABraMethid::_n_cbra*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraMethid____n_cbra(variable[4]) /*ABraMethid::_n_cbra*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label339;
-  }
-  return_label339: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4034, LOCATE_parser_prod___ABraMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraMethid____n_obra(variable[3]) /*ABraMethid::_n_obra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraMethid____n_obra(variable[3]) /*ABraMethid::_n_obra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraMethid____n_cbra(variable[3]) /*ABraMethid::_n_cbra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraMethid____n_cbra(variable[3]) /*ABraMethid::_n_cbra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label340: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4044, LOCATE_parser_prod___ABraMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraMethid____n_obra(variable[3]) /*ABraMethid::_n_obra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraMethid____n_obra(variable[3]) /*ABraMethid::_n_obra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraMethid____n_cbra(variable[3]) /*ABraMethid::_n_cbra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraMethid____n_cbra(variable[3]) /*ABraMethid::_n_cbra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label341: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3991, LOCATE_parser_prod___ABraMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraMethid].i]) return;
-  return_label342: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraMethid___init_abramethid(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 3993, LOCATE_parser_prod___ABraMethid___init_abramethid};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraMethid].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ABraMethid___empty_init_t)CALL(variable[4],COLOR_parser_prod___ABraMethid___empty_init))(variable[4], init_table /*YYY*/) /*ABraMethid::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABraMethid____n_obra(variable[4]) /*ABraMethid::_n_obra*/ =  variable[1] /*n_obra*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_obra*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_obra*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_obra*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_obra*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_obra*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_obra*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_obra*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_obra*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABraMethid____n_cbra(variable[4]) /*ABraMethid::_n_cbra*/ =  variable[2] /*n_cbra*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_cbra*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_cbra*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_cbra*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_cbra*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_cbra*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_cbra*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_cbra*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_cbra*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label343: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___n_starship__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4055, LOCATE_parser_prod___AStarshipMethid___n_starship__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStarshipMethid____n_starship(variable[3]) /*AStarshipMethid::_n_starship*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label344: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4076, LOCATE_parser_prod___AStarshipMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarshipMethid___replace_child, LOCATE_parser_prod, 4078); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AStarshipMethid____n_starship(variable[4]) /*AStarshipMethid::_n_starship*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TStarship, ID_TStarship)) /*cast TStarship*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarshipMethid___replace_child, LOCATE_parser_prod, 4082); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStarshipMethid____n_starship(variable[4]) /*AStarshipMethid::_n_starship*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStarshipMethid____n_starship(variable[4]) /*AStarshipMethid::_n_starship*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label345;
-  }
-  return_label345: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4091, LOCATE_parser_prod___AStarshipMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStarshipMethid____n_starship(variable[3]) /*AStarshipMethid::_n_starship*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStarshipMethid____n_starship(variable[3]) /*AStarshipMethid::_n_starship*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label346: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4098, LOCATE_parser_prod___AStarshipMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStarshipMethid____n_starship(variable[3]) /*AStarshipMethid::_n_starship*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStarshipMethid____n_starship(variable[3]) /*AStarshipMethid::_n_starship*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label347: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4063, LOCATE_parser_prod___AStarshipMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipMethid].i]) return;
-  return_label348: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___init_astarshipmethid(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4065, LOCATE_parser_prod___AStarshipMethid___init_astarshipmethid};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipMethid].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AStarshipMethid___empty_init_t)CALL(variable[3],COLOR_parser_prod___AStarshipMethid___empty_init))(variable[3], init_table /*YYY*/) /*AStarshipMethid::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStarshipMethid____n_starship(variable[3]) /*AStarshipMethid::_n_starship*/ =  variable[1] /*n_starship*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_starship*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_starship*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_starship*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_starship*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_starship*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_starship*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_starship*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_starship*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label349: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4106, LOCATE_parser_prod___AAssignMethid___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignMethid____n_id(variable[3]) /*AAssignMethid::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label350: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4113, LOCATE_parser_prod___AAssignMethid___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignMethid____n_assign(variable[3]) /*AAssignMethid::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label351: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4139, LOCATE_parser_prod___AAssignMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssignMethid___replace_child, LOCATE_parser_prod, 4141); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignMethid____n_id(variable[4]) /*AAssignMethid::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssignMethid___replace_child, LOCATE_parser_prod, 4145); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignMethid____n_id(variable[4]) /*AAssignMethid::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignMethid____n_id(variable[4]) /*AAssignMethid::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label352;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignMethid____n_assign(variable[4]) /*AAssignMethid::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssignMethid___replace_child, LOCATE_parser_prod, 4155); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignMethid____n_assign(variable[4]) /*AAssignMethid::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignMethid____n_assign(variable[4]) /*AAssignMethid::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label352;
-  }
-  return_label352: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4164, LOCATE_parser_prod___AAssignMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignMethid____n_id(variable[3]) /*AAssignMethid::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignMethid____n_id(variable[3]) /*AAssignMethid::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignMethid____n_assign(variable[3]) /*AAssignMethid::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignMethid____n_assign(variable[3]) /*AAssignMethid::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label353: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4174, LOCATE_parser_prod___AAssignMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignMethid____n_id(variable[3]) /*AAssignMethid::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignMethid____n_id(variable[3]) /*AAssignMethid::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignMethid____n_assign(variable[3]) /*AAssignMethid::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignMethid____n_assign(variable[3]) /*AAssignMethid::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label354: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4121, LOCATE_parser_prod___AAssignMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssignMethid].i]) return;
-  return_label355: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssignMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssignMethid___init_aassignmethid(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4123, LOCATE_parser_prod___AAssignMethid___init_aassignmethid};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssignMethid].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AAssignMethid___empty_init_t)CALL(variable[4],COLOR_parser_prod___AAssignMethid___empty_init))(variable[4], init_table /*YYY*/) /*AAssignMethid::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAssignMethid____n_id(variable[4]) /*AAssignMethid::_n_id*/ =  variable[1] /*n_id*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAssignMethid____n_assign(variable[4]) /*AAssignMethid::_n_assign*/ =  variable[2] /*n_assign*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_assign*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label356: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssignMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___n_obra__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4185, LOCATE_parser_prod___ABraassignMethid___n_obra__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABraassignMethid____n_obra(variable[3]) /*ABraassignMethid::_n_obra*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label357: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___n_cbra__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4192, LOCATE_parser_prod___ABraassignMethid___n_cbra__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[3]) /*ABraassignMethid::_n_cbra*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label358: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4199, LOCATE_parser_prod___ABraassignMethid___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABraassignMethid____n_assign(variable[3]) /*ABraassignMethid::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label359: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4230, LOCATE_parser_prod___ABraassignMethid___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraassignMethid___replace_child, LOCATE_parser_prod, 4232); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraassignMethid____n_obra(variable[4]) /*ABraassignMethid::_n_obra*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TObra, ID_TObra)) /*cast TObra*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraassignMethid___replace_child, LOCATE_parser_prod, 4236); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraassignMethid____n_obra(variable[4]) /*ABraassignMethid::_n_obra*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraassignMethid____n_obra(variable[4]) /*ABraassignMethid::_n_obra*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label360;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[4]) /*ABraassignMethid::_n_cbra*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraassignMethid___replace_child, LOCATE_parser_prod, 4246); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[4]) /*ABraassignMethid::_n_cbra*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[4]) /*ABraassignMethid::_n_cbra*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label360;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraassignMethid____n_assign(variable[4]) /*ABraassignMethid::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraassignMethid___replace_child, LOCATE_parser_prod, 4256); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraassignMethid____n_assign(variable[4]) /*ABraassignMethid::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABraassignMethid____n_assign(variable[4]) /*ABraassignMethid::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label360;
-  }
-  return_label360: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4265, LOCATE_parser_prod___ABraassignMethid___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraassignMethid____n_obra(variable[3]) /*ABraassignMethid::_n_obra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraassignMethid____n_obra(variable[3]) /*ABraassignMethid::_n_obra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[3]) /*ABraassignMethid::_n_cbra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[3]) /*ABraassignMethid::_n_cbra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraassignMethid____n_assign(variable[3]) /*ABraassignMethid::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraassignMethid____n_assign(variable[3]) /*ABraassignMethid::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label361: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4278, LOCATE_parser_prod___ABraassignMethid___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraassignMethid____n_obra(variable[3]) /*ABraassignMethid::_n_obra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraassignMethid____n_obra(variable[3]) /*ABraassignMethid::_n_obra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[3]) /*ABraassignMethid::_n_cbra*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[3]) /*ABraassignMethid::_n_cbra*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraassignMethid____n_assign(variable[3]) /*ABraassignMethid::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABraassignMethid____n_assign(variable[3]) /*ABraassignMethid::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label362: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4207, LOCATE_parser_prod___ABraassignMethid___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraassignMethid].i]) return;
-  return_label363: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraassignMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___init_abraassignmethid(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4209, LOCATE_parser_prod___ABraassignMethid___init_abraassignmethid};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraassignMethid].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___ABraassignMethid___empty_init_t)CALL(variable[5],COLOR_parser_prod___ABraassignMethid___empty_init))(variable[5], init_table /*YYY*/) /*ABraassignMethid::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ABraassignMethid____n_obra(variable[5]) /*ABraassignMethid::_n_obra*/ =  variable[1] /*n_obra*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_obra*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_obra*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_obra*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_obra*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_obra*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_obra*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_obra*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_obra*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ABraassignMethid____n_cbra(variable[5]) /*ABraassignMethid::_n_cbra*/ =  variable[2] /*n_cbra*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_cbra*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_cbra*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_cbra*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_cbra*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_cbra*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_cbra*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_cbra*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_cbra*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ABraassignMethid____n_assign(variable[5]) /*ABraassignMethid::_n_assign*/ =  variable[3] /*n_assign*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_assign*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label364: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraassignMethid].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASignature___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4292, LOCATE_parser_prod___ASignature___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASignature____n_type(variable[3]) /*ASignature::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label365: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASignature___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4327, LOCATE_parser_prod___ASignature___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASignature___replace_child, LOCATE_parser_prod, 4329); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASignature____n_params(variable[4]) /*ASignature::_n_params*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ASignature____n_params(variable[7]) /*ASignature::_n_params*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PParam, ID_PParam)) /*cast PParam*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASignature___replace_child, LOCATE_parser_prod, 4333); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASignature____n_params(variable[7]) /*ASignature::_n_params*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASignature____n_params(variable[7]) /*ASignature::_n_params*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label366;
-    }
-    continue_367: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_367: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASignature____n_type(variable[4]) /*ASignature::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASignature___replace_child, LOCATE_parser_prod, 4345); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASignature____n_type(variable[4]) /*ASignature::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASignature____n_type(variable[4]) /*ASignature::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label366;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[4]) /*ASignature::_n_closure_decls*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[7]) /*ASignature::_n_closure_decls*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PClosureDecl, ID_PClosureDecl)) /*cast PClosureDecl*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASignature___replace_child, LOCATE_parser_prod, 4355); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[7]) /*ASignature::_n_closure_decls*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[7]) /*ASignature::_n_closure_decls*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label366;
-    }
-    continue_368: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_368: while(0);
-  return_label366: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASignature___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4366, LOCATE_parser_prod___ASignature___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASignature____n_params(variable[3]) /*ASignature::_n_params*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_370: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_370: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASignature____n_type(variable[3]) /*ASignature::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASignature____n_type(variable[3]) /*ASignature::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[3]) /*ASignature::_n_closure_decls*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_371: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_371: while(0);
-  return_label369: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASignature___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4379, LOCATE_parser_prod___ASignature___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASignature____n_params(variable[4]) /*ASignature::_n_params*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ASignature____n_params(variable[4]) /*ASignature::_n_params*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_373: while(0);
-  }
-  break_373: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASignature____n_type(variable[3]) /*ASignature::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASignature____n_type(variable[3]) /*ASignature::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[4]) /*ASignature::_n_closure_decls*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[4]) /*ASignature::_n_closure_decls*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_374: while(0);
-  }
-  break_374: while(0);
-  return_label372: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASignature___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4300, LOCATE_parser_prod___ASignature___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASignature].i]) return;
-  return_label375: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASignature].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASignature___init_asignature(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4302, LOCATE_parser_prod___ASignature___init_asignature};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASignature].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___ASignature___empty_init_t)CALL(variable[5],COLOR_parser_prod___ASignature___empty_init))(variable[5], init_table /*YYY*/) /*ASignature::empty_init*/;
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PParam]*/
-  ATTR_parser_nodes___ASignature____n_params(variable[5]) /*ASignature::_n_params*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_params*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_params*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PParam, ID_PParam)) /*cast PParam*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASignature___init_asignature, LOCATE_parser_prod, 4311); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___ASignature____n_params(variable[8]) /*ASignature::_n_params*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_377: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_377: while(0);
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ASignature____n_type(variable[5]) /*ASignature::_n_type*/ =  variable[2] /*n_type*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_type*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PClosureDecl]*/
-  ATTR_parser_nodes___ASignature____n_closure_decls(variable[5]) /*ASignature::_n_closure_decls*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_closure_decls*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_closure_decls*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PClosureDecl, ID_PClosureDecl)) /*cast PClosureDecl*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASignature___init_asignature, LOCATE_parser_prod, 4321); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___ASignature____n_closure_decls(variable[8]) /*ASignature::_n_closure_decls*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_378: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_378: while(0);
-  return_label376: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASignature].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4401, LOCATE_parser_prod___AParam___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PParam____n_id(variable[3]) /*PParam::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label379: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4408, LOCATE_parser_prod___AParam___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___PParam____n_type(variable[3]) /*PParam::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label380: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___n_dotdotdot__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4415, LOCATE_parser_prod___AParam___n_dotdotdot__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AParam____n_dotdotdot(variable[3]) /*AParam::_n_dotdotdot*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label381: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4446, LOCATE_parser_prod___AParam___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AParam___replace_child, LOCATE_parser_prod, 4448); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PParam____n_id(variable[4]) /*PParam::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AParam___replace_child, LOCATE_parser_prod, 4452); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PParam____n_id(variable[4]) /*PParam::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PParam____n_id(variable[4]) /*PParam::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label382;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___PParam____n_type(variable[4]) /*PParam::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AParam___replace_child, LOCATE_parser_prod, 4462); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PParam____n_type(variable[4]) /*PParam::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___PParam____n_type(variable[4]) /*PParam::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label382;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AParam____n_dotdotdot(variable[4]) /*AParam::_n_dotdotdot*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AParam___replace_child, LOCATE_parser_prod, 4472); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AParam____n_dotdotdot(variable[4]) /*AParam::_n_dotdotdot*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AParam____n_dotdotdot(variable[4]) /*AParam::_n_dotdotdot*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label382;
-  }
-  return_label382: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4481, LOCATE_parser_prod___AParam___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PParam____n_id(variable[3]) /*PParam::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PParam____n_id(variable[3]) /*PParam::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PParam____n_type(variable[3]) /*PParam::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PParam____n_type(variable[3]) /*PParam::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AParam____n_dotdotdot(variable[3]) /*AParam::_n_dotdotdot*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AParam____n_dotdotdot(variable[3]) /*AParam::_n_dotdotdot*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label383: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4494, LOCATE_parser_prod___AParam___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PParam____n_id(variable[3]) /*PParam::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PParam____n_id(variable[3]) /*PParam::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___PParam____n_type(variable[3]) /*PParam::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___PParam____n_type(variable[3]) /*PParam::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AParam____n_dotdotdot(variable[3]) /*AParam::_n_dotdotdot*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AParam____n_dotdotdot(variable[3]) /*AParam::_n_dotdotdot*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label384: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4423, LOCATE_parser_prod___AParam___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParam].i]) return;
-  return_label385: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParam].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParam___init_aparam(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4425, LOCATE_parser_prod___AParam___init_aparam};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParam].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AParam___empty_init_t)CALL(variable[5],COLOR_parser_prod___AParam___empty_init))(variable[5], init_table /*YYY*/) /*AParam::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___PParam____n_id(variable[5]) /*PParam::_n_id*/ =  variable[1] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___PParam____n_type(variable[5]) /*PParam::_n_type*/ =  variable[2] /*n_type*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_type*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AParam____n_dotdotdot(variable[5]) /*AParam::_n_dotdotdot*/ =  variable[3] /*n_dotdotdot*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_dotdotdot*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_dotdotdot*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_dotdotdot*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_dotdotdot*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_dotdotdot*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_dotdotdot*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_dotdotdot*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_dotdotdot*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label386: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParam].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_kwwith__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4508, LOCATE_parser_prod___AClosureDecl___n_kwwith__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[3]) /*AClosureDecl::_n_kwwith*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label387: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_kwbreak__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4515, LOCATE_parser_prod___AClosureDecl___n_kwbreak__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[3]) /*AClosureDecl::_n_kwbreak*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label388: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4522, LOCATE_parser_prod___AClosureDecl___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_id(variable[3]) /*AClosureDecl::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label389: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_signature__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4529, LOCATE_parser_prod___AClosureDecl___n_signature__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_signature(variable[3]) /*AClosureDecl::_n_signature*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label390: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4565, LOCATE_parser_prod___AClosureDecl___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDecl___replace_child, LOCATE_parser_prod, 4567); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[4]) /*AClosureDecl::_n_kwwith*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwwith, ID_TKwwith)) /*cast TKwwith*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDecl___replace_child, LOCATE_parser_prod, 4571); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[4]) /*AClosureDecl::_n_kwwith*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[4]) /*AClosureDecl::_n_kwwith*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label391;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[4]) /*AClosureDecl::_n_kwbreak*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDecl___replace_child, LOCATE_parser_prod, 4581); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[4]) /*AClosureDecl::_n_kwbreak*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[4]) /*AClosureDecl::_n_kwbreak*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label391;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDecl____n_id(variable[4]) /*AClosureDecl::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDecl___replace_child, LOCATE_parser_prod, 4591); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_id(variable[4]) /*AClosureDecl::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_id(variable[4]) /*AClosureDecl::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label391;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDecl____n_signature(variable[4]) /*AClosureDecl::_n_signature*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PSignature, ID_PSignature)) /*cast PSignature*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDecl___replace_child, LOCATE_parser_prod, 4601); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_signature(variable[4]) /*AClosureDecl::_n_signature*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDecl____n_signature(variable[4]) /*AClosureDecl::_n_signature*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label391;
-  }
-  return_label391: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4610, LOCATE_parser_prod___AClosureDecl___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[3]) /*AClosureDecl::_n_kwwith*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[3]) /*AClosureDecl::_n_kwwith*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[3]) /*AClosureDecl::_n_kwbreak*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[3]) /*AClosureDecl::_n_kwbreak*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_id(variable[3]) /*AClosureDecl::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_id(variable[3]) /*AClosureDecl::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_signature(variable[3]) /*AClosureDecl::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_signature(variable[3]) /*AClosureDecl::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label392: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4626, LOCATE_parser_prod___AClosureDecl___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[3]) /*AClosureDecl::_n_kwwith*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[3]) /*AClosureDecl::_n_kwwith*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[3]) /*AClosureDecl::_n_kwbreak*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[3]) /*AClosureDecl::_n_kwbreak*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_id(variable[3]) /*AClosureDecl::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_id(variable[3]) /*AClosureDecl::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDecl____n_signature(variable[3]) /*AClosureDecl::_n_signature*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDecl____n_signature(variable[3]) /*AClosureDecl::_n_signature*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label393: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4537, LOCATE_parser_prod___AClosureDecl___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDecl].i]) return;
-  return_label394: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDecl].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDecl___init_aclosuredecl(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4539, LOCATE_parser_prod___AClosureDecl___init_aclosuredecl};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDecl].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___AClosureDecl___empty_init_t)CALL(variable[6],COLOR_parser_prod___AClosureDecl___empty_init))(variable[6], init_table /*YYY*/) /*AClosureDecl::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_kwwith(variable[6]) /*AClosureDecl::_n_kwwith*/ =  variable[1] /*n_kwwith*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwwith*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwwith*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwwith*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwwith*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwwith*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwwith*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwwith*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwwith*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_kwbreak(variable[6]) /*AClosureDecl::_n_kwbreak*/ =  variable[2] /*n_kwbreak*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwbreak*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwbreak*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwbreak*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwbreak*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwbreak*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwbreak*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwbreak*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwbreak*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_id(variable[6]) /*AClosureDecl::_n_id*/ =  variable[3] /*n_id*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_id*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDecl____n_signature(variable[6]) /*AClosureDecl::_n_signature*/ =  variable[4] /*n_signature*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_signature*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_signature*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_signature*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_signature*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_signature*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_signature*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_signature*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_signature*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label395: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDecl].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AType___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4643, LOCATE_parser_prod___AType___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AType____n_id(variable[3]) /*AType::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label396: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AType___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4671, LOCATE_parser_prod___AType___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AType___replace_child, LOCATE_parser_prod, 4673); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AType____n_id(variable[4]) /*AType::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AType___replace_child, LOCATE_parser_prod, 4677); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AType____n_id(variable[4]) /*AType::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AType____n_id(variable[4]) /*AType::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label397;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AType____n_types(variable[4]) /*AType::_n_types*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AType____n_types(variable[7]) /*AType::_n_types*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AType___replace_child, LOCATE_parser_prod, 4687); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AType____n_types(variable[7]) /*AType::_n_types*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AType____n_types(variable[7]) /*AType::_n_types*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label397;
-    }
-    continue_398: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_398: while(0);
-  return_label397: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AType___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4698, LOCATE_parser_prod___AType___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AType____n_id(variable[3]) /*AType::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AType____n_id(variable[3]) /*AType::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AType____n_types(variable[3]) /*AType::_n_types*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_400: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_400: while(0);
-  return_label399: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AType___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4708, LOCATE_parser_prod___AType___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AType____n_id(variable[3]) /*AType::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AType____n_id(variable[3]) /*AType::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AType____n_types(variable[4]) /*AType::_n_types*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AType____n_types(variable[4]) /*AType::_n_types*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_402: while(0);
-  }
-  break_402: while(0);
-  return_label401: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AType___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4651, LOCATE_parser_prod___AType___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AType].i]) return;
-  return_label403: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AType].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AType___init_atype(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4653, LOCATE_parser_prod___AType___init_atype};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AType].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AType___empty_init_t)CALL(variable[4],COLOR_parser_prod___AType___empty_init))(variable[4], init_table /*YYY*/) /*AType::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AType____n_id(variable[4]) /*AType::_n_id*/ =  variable[1] /*n_id*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  variable[5] = NEW_List_list___List___init(); /*new List[PType]*/
-  ATTR_parser_nodes___AType____n_types(variable[4]) /*AType::_n_types*/ = variable[5];
-  variable[4] = ((array___AbstractArray___iterator_t)CALL( variable[2] /*n_types*/,COLOR_abstract_collection___Collection___iterator))( variable[2] /*n_types*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((array___ArrayIterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((array___ArrayIterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*ArrayIterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = TAG_Bool(( variable[6] /*n*/==NIT_NULL) || VAL_ISA( variable[6] /*n*/, COLOR_PType, ID_PType)) /*cast PType*/;
-    if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AType___init_atype, LOCATE_parser_prod, 4665); nit_exit(1);}
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AType____n_types(variable[7]) /*AType::_n_types*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[7],COLOR_abstract_collection___SimpleCollection___add))(variable[7],  variable[6] /*n*/) /*IndexedCollection::add*/;
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n*/, variable[7]) /*PNode::parent=*/;
-    continue_405: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*ArrayIterator::next*/;
-  }
-  break_405: while(0);
-  return_label404: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AType].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABlockExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4739, LOCATE_parser_prod___ABlockExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABlockExpr___replace_child, LOCATE_parser_prod, 4741); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[4]) /*ABlockExpr::_n_expr*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[7]) /*ABlockExpr::_n_expr*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABlockExpr___replace_child, LOCATE_parser_prod, 4745); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[7]) /*ABlockExpr::_n_expr*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[7]) /*ABlockExpr::_n_expr*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label406;
-    }
-    continue_407: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_407: while(0);
-  return_label406: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABlockExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4756, LOCATE_parser_prod___ABlockExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[3]) /*ABlockExpr::_n_expr*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_409: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_409: while(0);
-  return_label408: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABlockExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4763, LOCATE_parser_prod___ABlockExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[4]) /*ABlockExpr::_n_expr*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[4]) /*ABlockExpr::_n_expr*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_411: while(0);
-  }
-  break_411: while(0);
-  return_label410: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABlockExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4724, LOCATE_parser_prod___ABlockExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABlockExpr].i]) return;
-  return_label412: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABlockExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABlockExpr___init_ablockexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4726, LOCATE_parser_prod___ABlockExpr___init_ablockexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABlockExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ABlockExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ABlockExpr___empty_init))(variable[3], init_table /*YYY*/) /*ABlockExpr::empty_init*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ABlockExpr____n_expr(variable[3]) /*ABlockExpr::_n_expr*/ = variable[4];
-  variable[3] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_expr*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_expr*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*n*/==NIT_NULL) || VAL_ISA( variable[5] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABlockExpr___init_ablockexpr, LOCATE_parser_prod, 4733); nit_exit(1);}
-    variable[6] = variable[0];
-    variable[6] = ATTR_parser_nodes___ABlockExpr____n_expr(variable[6]) /*ABlockExpr::_n_expr*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[6],COLOR_abstract_collection___SimpleCollection___add))(variable[6],  variable[5] /*n*/) /*IndexedCollection::add*/;
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n*/, variable[6]) /*PNode::parent=*/;
-    continue_414: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_414: while(0);
-  return_label413: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABlockExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_kwvar__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4775, LOCATE_parser_prod___AVardeclExpr___n_kwvar__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[3]) /*AVardeclExpr::_n_kwvar*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label415: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4782, LOCATE_parser_prod___AVardeclExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_id(variable[3]) /*AVardeclExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label416: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4789, LOCATE_parser_prod___AVardeclExpr___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_type(variable[3]) /*AVardeclExpr::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label417: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4796, LOCATE_parser_prod___AVardeclExpr___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_assign(variable[3]) /*AVardeclExpr::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label418: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4803, LOCATE_parser_prod___AVardeclExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_expr(variable[3]) /*AVardeclExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label419: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4844, LOCATE_parser_prod___AVardeclExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVardeclExpr___replace_child, LOCATE_parser_prod, 4846); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[4]) /*AVardeclExpr::_n_kwvar*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwvar, ID_TKwvar)) /*cast TKwvar*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVardeclExpr___replace_child, LOCATE_parser_prod, 4850); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[4]) /*AVardeclExpr::_n_kwvar*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[4]) /*AVardeclExpr::_n_kwvar*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label420;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVardeclExpr____n_id(variable[4]) /*AVardeclExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVardeclExpr___replace_child, LOCATE_parser_prod, 4860); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_id(variable[4]) /*AVardeclExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_id(variable[4]) /*AVardeclExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label420;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVardeclExpr____n_type(variable[4]) /*AVardeclExpr::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVardeclExpr___replace_child, LOCATE_parser_prod, 4870); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_type(variable[4]) /*AVardeclExpr::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_type(variable[4]) /*AVardeclExpr::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label420;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVardeclExpr____n_assign(variable[4]) /*AVardeclExpr::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVardeclExpr___replace_child, LOCATE_parser_prod, 4880); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_assign(variable[4]) /*AVardeclExpr::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_assign(variable[4]) /*AVardeclExpr::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label420;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVardeclExpr____n_expr(variable[4]) /*AVardeclExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVardeclExpr___replace_child, LOCATE_parser_prod, 4890); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_expr(variable[4]) /*AVardeclExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVardeclExpr____n_expr(variable[4]) /*AVardeclExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label420;
-  }
-  return_label420: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4899, LOCATE_parser_prod___AVardeclExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[3]) /*AVardeclExpr::_n_kwvar*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[3]) /*AVardeclExpr::_n_kwvar*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_id(variable[3]) /*AVardeclExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_id(variable[3]) /*AVardeclExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_type(variable[3]) /*AVardeclExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_type(variable[3]) /*AVardeclExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_assign(variable[3]) /*AVardeclExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_assign(variable[3]) /*AVardeclExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_expr(variable[3]) /*AVardeclExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_expr(variable[3]) /*AVardeclExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label421: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4918, LOCATE_parser_prod___AVardeclExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[3]) /*AVardeclExpr::_n_kwvar*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[3]) /*AVardeclExpr::_n_kwvar*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_id(variable[3]) /*AVardeclExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_id(variable[3]) /*AVardeclExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_type(variable[3]) /*AVardeclExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_type(variable[3]) /*AVardeclExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_assign(variable[3]) /*AVardeclExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_assign(variable[3]) /*AVardeclExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVardeclExpr____n_expr(variable[3]) /*AVardeclExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVardeclExpr____n_expr(variable[3]) /*AVardeclExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label422: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4811, LOCATE_parser_prod___AVardeclExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVardeclExpr].i]) return;
-  return_label423: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVardeclExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___init_avardeclexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4813, LOCATE_parser_prod___AVardeclExpr___init_avardeclexpr};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVardeclExpr].i]) return;
-  variable[7] = variable[0];
-  ((parser_prod___AVardeclExpr___empty_init_t)CALL(variable[7],COLOR_parser_prod___AVardeclExpr___empty_init))(variable[7], init_table /*YYY*/) /*AVardeclExpr::empty_init*/;
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_kwvar(variable[7]) /*AVardeclExpr::_n_kwvar*/ =  variable[1] /*n_kwvar*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwvar*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwvar*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwvar*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwvar*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwvar*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwvar*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwvar*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwvar*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_id(variable[7]) /*AVardeclExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_type(variable[7]) /*AVardeclExpr::_n_type*/ =  variable[3] /*n_type*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_type*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_assign(variable[7]) /*AVardeclExpr::_n_assign*/ =  variable[4] /*n_assign*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_assign*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AVardeclExpr____n_expr(variable[7]) /*AVardeclExpr::_n_expr*/ =  variable[5] /*n_expr*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_expr*/, variable[7]) /*PNode::parent=*/;
-  }
-  return_label424: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVardeclExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___n_kwreturn__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4938, LOCATE_parser_prod___AReturnExpr___n_kwreturn__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[3]) /*AReturnExpr::_n_kwreturn*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label425: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4945, LOCATE_parser_prod___AReturnExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReturnExpr____n_expr(variable[3]) /*AReturnExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label426: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 4971, LOCATE_parser_prod___AReturnExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AReturnExpr___replace_child, LOCATE_parser_prod, 4973); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[4]) /*AReturnExpr::_n_kwreturn*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AReturnExpr___replace_child, LOCATE_parser_prod, 4977); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[4]) /*AReturnExpr::_n_kwreturn*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[4]) /*AReturnExpr::_n_kwreturn*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label427;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReturnExpr____n_expr(variable[4]) /*AReturnExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AReturnExpr___replace_child, LOCATE_parser_prod, 4987); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReturnExpr____n_expr(variable[4]) /*AReturnExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReturnExpr____n_expr(variable[4]) /*AReturnExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label427;
-  }
-  return_label427: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 4996, LOCATE_parser_prod___AReturnExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[3]) /*AReturnExpr::_n_kwreturn*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[3]) /*AReturnExpr::_n_kwreturn*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReturnExpr____n_expr(variable[3]) /*AReturnExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReturnExpr____n_expr(variable[3]) /*AReturnExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label428: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5006, LOCATE_parser_prod___AReturnExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[3]) /*AReturnExpr::_n_kwreturn*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[3]) /*AReturnExpr::_n_kwreturn*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReturnExpr____n_expr(variable[3]) /*AReturnExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReturnExpr____n_expr(variable[3]) /*AReturnExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label429: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4953, LOCATE_parser_prod___AReturnExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReturnExpr].i]) return;
-  return_label430: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReturnExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AReturnExpr___init_areturnexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 4955, LOCATE_parser_prod___AReturnExpr___init_areturnexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReturnExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AReturnExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AReturnExpr___empty_init))(variable[4], init_table /*YYY*/) /*AReturnExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AReturnExpr____n_kwreturn(variable[4]) /*AReturnExpr::_n_kwreturn*/ =  variable[1] /*n_kwreturn*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwreturn*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwreturn*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwreturn*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwreturn*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwreturn*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwreturn*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwreturn*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwreturn*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AReturnExpr____n_expr(variable[4]) /*AReturnExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label431: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AReturnExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___n_kwbreak__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5017, LOCATE_parser_prod___ABreakExpr___n_kwbreak__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[3]) /*ABreakExpr::_n_kwbreak*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label432: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5024, LOCATE_parser_prod___ABreakExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABreakExpr____n_expr(variable[3]) /*ABreakExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label433: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5050, LOCATE_parser_prod___ABreakExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABreakExpr___replace_child, LOCATE_parser_prod, 5052); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[4]) /*ABreakExpr::_n_kwbreak*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABreakExpr___replace_child, LOCATE_parser_prod, 5056); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[4]) /*ABreakExpr::_n_kwbreak*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[4]) /*ABreakExpr::_n_kwbreak*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label434;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABreakExpr____n_expr(variable[4]) /*ABreakExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABreakExpr___replace_child, LOCATE_parser_prod, 5066); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABreakExpr____n_expr(variable[4]) /*ABreakExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABreakExpr____n_expr(variable[4]) /*ABreakExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label434;
-  }
-  return_label434: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5075, LOCATE_parser_prod___ABreakExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[3]) /*ABreakExpr::_n_kwbreak*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[3]) /*ABreakExpr::_n_kwbreak*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABreakExpr____n_expr(variable[3]) /*ABreakExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABreakExpr____n_expr(variable[3]) /*ABreakExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label435: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5085, LOCATE_parser_prod___ABreakExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[3]) /*ABreakExpr::_n_kwbreak*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[3]) /*ABreakExpr::_n_kwbreak*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABreakExpr____n_expr(variable[3]) /*ABreakExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABreakExpr____n_expr(variable[3]) /*ABreakExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label436: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5032, LOCATE_parser_prod___ABreakExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABreakExpr].i]) return;
-  return_label437: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABreakExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABreakExpr___init_abreakexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5034, LOCATE_parser_prod___ABreakExpr___init_abreakexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABreakExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ABreakExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ABreakExpr___empty_init))(variable[4], init_table /*YYY*/) /*ABreakExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABreakExpr____n_kwbreak(variable[4]) /*ABreakExpr::_n_kwbreak*/ =  variable[1] /*n_kwbreak*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwbreak*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwbreak*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwbreak*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwbreak*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwbreak*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwbreak*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwbreak*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwbreak*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABreakExpr____n_expr(variable[4]) /*ABreakExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label438: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABreakExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbortExpr___n_kwabort__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5096, LOCATE_parser_prod___AAbortExpr___n_kwabort__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[3]) /*AAbortExpr::_n_kwabort*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label439: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbortExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5117, LOCATE_parser_prod___AAbortExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAbortExpr___replace_child, LOCATE_parser_prod, 5119); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[4]) /*AAbortExpr::_n_kwabort*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwabort, ID_TKwabort)) /*cast TKwabort*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAbortExpr___replace_child, LOCATE_parser_prod, 5123); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[4]) /*AAbortExpr::_n_kwabort*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[4]) /*AAbortExpr::_n_kwabort*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label440;
-  }
-  return_label440: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbortExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5132, LOCATE_parser_prod___AAbortExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[3]) /*AAbortExpr::_n_kwabort*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[3]) /*AAbortExpr::_n_kwabort*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label441: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbortExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5139, LOCATE_parser_prod___AAbortExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[3]) /*AAbortExpr::_n_kwabort*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[3]) /*AAbortExpr::_n_kwabort*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label442: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbortExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5104, LOCATE_parser_prod___AAbortExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbortExpr].i]) return;
-  return_label443: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbortExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAbortExpr___init_aabortexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5106, LOCATE_parser_prod___AAbortExpr___init_aabortexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbortExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AAbortExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AAbortExpr___empty_init))(variable[3], init_table /*YYY*/) /*AAbortExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAbortExpr____n_kwabort(variable[3]) /*AAbortExpr::_n_kwabort*/ =  variable[1] /*n_kwabort*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwabort*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwabort*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwabort*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwabort*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwabort*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwabort*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwabort*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwabort*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label444: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAbortExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___n_kwcontinue__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5147, LOCATE_parser_prod___AContinueExpr___n_kwcontinue__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[3]) /*AContinueExpr::_n_kwcontinue*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label445: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5154, LOCATE_parser_prod___AContinueExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AContinueExpr____n_expr(variable[3]) /*AContinueExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label446: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5180, LOCATE_parser_prod___AContinueExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AContinueExpr___replace_child, LOCATE_parser_prod, 5182); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[4]) /*AContinueExpr::_n_kwcontinue*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AContinueExpr___replace_child, LOCATE_parser_prod, 5186); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[4]) /*AContinueExpr::_n_kwcontinue*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[4]) /*AContinueExpr::_n_kwcontinue*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label447;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AContinueExpr____n_expr(variable[4]) /*AContinueExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AContinueExpr___replace_child, LOCATE_parser_prod, 5196); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AContinueExpr____n_expr(variable[4]) /*AContinueExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AContinueExpr____n_expr(variable[4]) /*AContinueExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label447;
-  }
-  return_label447: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5205, LOCATE_parser_prod___AContinueExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[3]) /*AContinueExpr::_n_kwcontinue*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[3]) /*AContinueExpr::_n_kwcontinue*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AContinueExpr____n_expr(variable[3]) /*AContinueExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AContinueExpr____n_expr(variable[3]) /*AContinueExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label448: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5215, LOCATE_parser_prod___AContinueExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[3]) /*AContinueExpr::_n_kwcontinue*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[3]) /*AContinueExpr::_n_kwcontinue*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AContinueExpr____n_expr(variable[3]) /*AContinueExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AContinueExpr____n_expr(variable[3]) /*AContinueExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label449: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5162, LOCATE_parser_prod___AContinueExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AContinueExpr].i]) return;
-  return_label450: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AContinueExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AContinueExpr___init_acontinueexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5164, LOCATE_parser_prod___AContinueExpr___init_acontinueexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AContinueExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AContinueExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AContinueExpr___empty_init))(variable[4], init_table /*YYY*/) /*AContinueExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(variable[4]) /*AContinueExpr::_n_kwcontinue*/ =  variable[1] /*n_kwcontinue*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwcontinue*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwcontinue*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwcontinue*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwcontinue*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwcontinue*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwcontinue*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwcontinue*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwcontinue*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AContinueExpr____n_expr(variable[4]) /*AContinueExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label451: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AContinueExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___n_kwdo__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5226, LOCATE_parser_prod___ADoExpr___n_kwdo__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ADoExpr____n_kwdo(variable[3]) /*ADoExpr::_n_kwdo*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label452: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___n_block__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5233, LOCATE_parser_prod___ADoExpr___n_block__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ADoExpr____n_block(variable[3]) /*ADoExpr::_n_block*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label453: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5259, LOCATE_parser_prod___ADoExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADoExpr___replace_child, LOCATE_parser_prod, 5261); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ADoExpr____n_kwdo(variable[4]) /*ADoExpr::_n_kwdo*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADoExpr___replace_child, LOCATE_parser_prod, 5265); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ADoExpr____n_kwdo(variable[4]) /*ADoExpr::_n_kwdo*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ADoExpr____n_kwdo(variable[4]) /*ADoExpr::_n_kwdo*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label454;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ADoExpr____n_block(variable[4]) /*ADoExpr::_n_block*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADoExpr___replace_child, LOCATE_parser_prod, 5275); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ADoExpr____n_block(variable[4]) /*ADoExpr::_n_block*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ADoExpr____n_block(variable[4]) /*ADoExpr::_n_block*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label454;
-  }
-  return_label454: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5284, LOCATE_parser_prod___ADoExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADoExpr____n_kwdo(variable[3]) /*ADoExpr::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ADoExpr____n_kwdo(variable[3]) /*ADoExpr::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADoExpr____n_block(variable[3]) /*ADoExpr::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ADoExpr____n_block(variable[3]) /*ADoExpr::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label455: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5294, LOCATE_parser_prod___ADoExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADoExpr____n_kwdo(variable[3]) /*ADoExpr::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ADoExpr____n_kwdo(variable[3]) /*ADoExpr::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADoExpr____n_block(variable[3]) /*ADoExpr::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ADoExpr____n_block(variable[3]) /*ADoExpr::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label456: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5241, LOCATE_parser_prod___ADoExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoExpr].i]) return;
-  return_label457: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoExpr___init_adoexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5243, LOCATE_parser_prod___ADoExpr___init_adoexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ADoExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ADoExpr___empty_init))(variable[4], init_table /*YYY*/) /*ADoExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ADoExpr____n_kwdo(variable[4]) /*ADoExpr::_n_kwdo*/ =  variable[1] /*n_kwdo*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwdo*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwdo*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwdo*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwdo*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwdo*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwdo*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ADoExpr____n_block(variable[4]) /*ADoExpr::_n_block*/ =  variable[2] /*n_block*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_block*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_block*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_block*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_block*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_block*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_block*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_block*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_block*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label458: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_kwif__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5305, LOCATE_parser_prod___AIfExpr___n_kwif__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_kwif(variable[3]) /*AIfExpr::_n_kwif*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label459: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5312, LOCATE_parser_prod___AIfExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_expr(variable[3]) /*AIfExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label460: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_then__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5319, LOCATE_parser_prod___AIfExpr___n_then__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_then(variable[3]) /*AIfExpr::_n_then*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label461: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_else__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5326, LOCATE_parser_prod___AIfExpr___n_else__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_else(variable[3]) /*AIfExpr::_n_else*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label462: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5362, LOCATE_parser_prod___AIfExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfExpr___replace_child, LOCATE_parser_prod, 5364); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfExpr____n_kwif(variable[4]) /*AIfExpr::_n_kwif*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfExpr___replace_child, LOCATE_parser_prod, 5368); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_kwif(variable[4]) /*AIfExpr::_n_kwif*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_kwif(variable[4]) /*AIfExpr::_n_kwif*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label463;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfExpr____n_expr(variable[4]) /*AIfExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfExpr___replace_child, LOCATE_parser_prod, 5378); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_expr(variable[4]) /*AIfExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_expr(variable[4]) /*AIfExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label463;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfExpr____n_then(variable[4]) /*AIfExpr::_n_then*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfExpr___replace_child, LOCATE_parser_prod, 5388); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_then(variable[4]) /*AIfExpr::_n_then*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_then(variable[4]) /*AIfExpr::_n_then*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label463;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfExpr____n_else(variable[4]) /*AIfExpr::_n_else*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfExpr___replace_child, LOCATE_parser_prod, 5398); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_else(variable[4]) /*AIfExpr::_n_else*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfExpr____n_else(variable[4]) /*AIfExpr::_n_else*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label463;
-  }
-  return_label463: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5407, LOCATE_parser_prod___AIfExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_kwif(variable[3]) /*AIfExpr::_n_kwif*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_kwif(variable[3]) /*AIfExpr::_n_kwif*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_expr(variable[3]) /*AIfExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_expr(variable[3]) /*AIfExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_then(variable[3]) /*AIfExpr::_n_then*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_then(variable[3]) /*AIfExpr::_n_then*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_else(variable[3]) /*AIfExpr::_n_else*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_else(variable[3]) /*AIfExpr::_n_else*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label464: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5423, LOCATE_parser_prod___AIfExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_kwif(variable[3]) /*AIfExpr::_n_kwif*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_kwif(variable[3]) /*AIfExpr::_n_kwif*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_expr(variable[3]) /*AIfExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_expr(variable[3]) /*AIfExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_then(variable[3]) /*AIfExpr::_n_then*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_then(variable[3]) /*AIfExpr::_n_then*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfExpr____n_else(variable[3]) /*AIfExpr::_n_else*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfExpr____n_else(variable[3]) /*AIfExpr::_n_else*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label465: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5334, LOCATE_parser_prod___AIfExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfExpr].i]) return;
-  return_label466: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfExpr___init_aifexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5336, LOCATE_parser_prod___AIfExpr___init_aifexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___AIfExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___AIfExpr___empty_init))(variable[6], init_table /*YYY*/) /*AIfExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_kwif(variable[6]) /*AIfExpr::_n_kwif*/ =  variable[1] /*n_kwif*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwif*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwif*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwif*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwif*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwif*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwif*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwif*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwif*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_expr(variable[6]) /*AIfExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_then(variable[6]) /*AIfExpr::_n_then*/ =  variable[3] /*n_then*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_then*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_then*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_then*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_then*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_then*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_then*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_then*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_then*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AIfExpr____n_else(variable[6]) /*AIfExpr::_n_else*/ =  variable[4] /*n_else*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_else*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_else*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_else*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_else*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_else*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_else*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_else*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_else*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label467: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_kwif__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5440, LOCATE_parser_prod___AIfexprExpr___n_kwif__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[3]) /*AIfexprExpr::_n_kwif*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label468: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5447, LOCATE_parser_prod___AIfexprExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_expr(variable[3]) /*AIfexprExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label469: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_kwthen__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5454, LOCATE_parser_prod___AIfexprExpr___n_kwthen__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[3]) /*AIfexprExpr::_n_kwthen*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label470: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_then__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5461, LOCATE_parser_prod___AIfexprExpr___n_then__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_then(variable[3]) /*AIfexprExpr::_n_then*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label471: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_kwelse__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5468, LOCATE_parser_prod___AIfexprExpr___n_kwelse__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[3]) /*AIfexprExpr::_n_kwelse*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label472: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_else__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5475, LOCATE_parser_prod___AIfexprExpr___n_else__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_else(variable[3]) /*AIfexprExpr::_n_else*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label473: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5521, LOCATE_parser_prod___AIfexprExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5523); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[4]) /*AIfexprExpr::_n_kwif*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5527); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[4]) /*AIfexprExpr::_n_kwif*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[4]) /*AIfexprExpr::_n_kwif*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label474;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfexprExpr____n_expr(variable[4]) /*AIfexprExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5537); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_expr(variable[4]) /*AIfexprExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_expr(variable[4]) /*AIfexprExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label474;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[4]) /*AIfexprExpr::_n_kwthen*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwthen, ID_TKwthen)) /*cast TKwthen*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5547); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[4]) /*AIfexprExpr::_n_kwthen*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[4]) /*AIfexprExpr::_n_kwthen*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label474;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfexprExpr____n_then(variable[4]) /*AIfexprExpr::_n_then*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5557); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_then(variable[4]) /*AIfexprExpr::_n_then*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_then(variable[4]) /*AIfexprExpr::_n_then*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label474;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[4]) /*AIfexprExpr::_n_kwelse*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwelse, ID_TKwelse)) /*cast TKwelse*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5567); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[4]) /*AIfexprExpr::_n_kwelse*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[4]) /*AIfexprExpr::_n_kwelse*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label474;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIfexprExpr____n_else(variable[4]) /*AIfexprExpr::_n_else*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIfexprExpr___replace_child, LOCATE_parser_prod, 5577); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_else(variable[4]) /*AIfexprExpr::_n_else*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIfexprExpr____n_else(variable[4]) /*AIfexprExpr::_n_else*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label474;
-  }
-  return_label474: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5586, LOCATE_parser_prod___AIfexprExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[3]) /*AIfexprExpr::_n_kwif*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[3]) /*AIfexprExpr::_n_kwif*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_expr(variable[3]) /*AIfexprExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_expr(variable[3]) /*AIfexprExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[3]) /*AIfexprExpr::_n_kwthen*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[3]) /*AIfexprExpr::_n_kwthen*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_then(variable[3]) /*AIfexprExpr::_n_then*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_then(variable[3]) /*AIfexprExpr::_n_then*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[3]) /*AIfexprExpr::_n_kwelse*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[3]) /*AIfexprExpr::_n_kwelse*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_else(variable[3]) /*AIfexprExpr::_n_else*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_else(variable[3]) /*AIfexprExpr::_n_else*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label475: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5608, LOCATE_parser_prod___AIfexprExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[3]) /*AIfexprExpr::_n_kwif*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[3]) /*AIfexprExpr::_n_kwif*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_expr(variable[3]) /*AIfexprExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_expr(variable[3]) /*AIfexprExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[3]) /*AIfexprExpr::_n_kwthen*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[3]) /*AIfexprExpr::_n_kwthen*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_then(variable[3]) /*AIfexprExpr::_n_then*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_then(variable[3]) /*AIfexprExpr::_n_then*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[3]) /*AIfexprExpr::_n_kwelse*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[3]) /*AIfexprExpr::_n_kwelse*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIfexprExpr____n_else(variable[3]) /*AIfexprExpr::_n_else*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIfexprExpr____n_else(variable[3]) /*AIfexprExpr::_n_else*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label476: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5483, LOCATE_parser_prod___AIfexprExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfexprExpr].i]) return;
-  return_label477: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfexprExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___init_aifexprexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, val_t  param5, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5485, LOCATE_parser_prod___AIfexprExpr___init_aifexprexpr};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  variable[6] =  param5;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfexprExpr].i]) return;
-  variable[8] = variable[0];
-  ((parser_prod___AIfexprExpr___empty_init_t)CALL(variable[8],COLOR_parser_prod___AIfexprExpr___empty_init))(variable[8], init_table /*YYY*/) /*AIfexprExpr::empty_init*/;
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_kwif(variable[8]) /*AIfexprExpr::_n_kwif*/ =  variable[1] /*n_kwif*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwif*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwif*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwif*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwif*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwif*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwif*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwif*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwif*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_expr(variable[8]) /*AIfexprExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_kwthen(variable[8]) /*AIfexprExpr::_n_kwthen*/ =  variable[3] /*n_kwthen*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_kwthen*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_kwthen*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwthen*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_kwthen*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwthen*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_kwthen*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_kwthen*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_kwthen*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_then(variable[8]) /*AIfexprExpr::_n_then*/ =  variable[4] /*n_then*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_then*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_then*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_then*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_then*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_then*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_then*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_then*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_then*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_kwelse(variable[8]) /*AIfexprExpr::_n_kwelse*/ =  variable[5] /*n_kwelse*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_kwelse*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_kwelse*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_kwelse*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_kwelse*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_kwelse*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_kwelse*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_kwelse*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_kwelse*/, variable[8]) /*PNode::parent=*/;
-  }
-  variable[8] = variable[0];
-  ATTR_parser_nodes___AIfexprExpr____n_else(variable[8]) /*AIfexprExpr::_n_else*/ =  variable[6] /*n_else*/;
-  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[6] /*n_else*/ ==  NIT_NULL /*null*/) || (( variable[6] /*n_else*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[6] /*n_else*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[6] /*n_else*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[6] /*n_else*/,COLOR_kernel___Object_____eqeq))( variable[6] /*n_else*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n_else*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n_else*/, variable[8]) /*PNode::parent=*/;
-  }
-  return_label478: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIfexprExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_kwwhile__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5631, LOCATE_parser_prod___AWhileExpr___n_kwwhile__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[3]) /*AWhileExpr::_n_kwwhile*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label479: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5638, LOCATE_parser_prod___AWhileExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_expr(variable[3]) /*AWhileExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label480: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_kwdo__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5645, LOCATE_parser_prod___AWhileExpr___n_kwdo__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[3]) /*AWhileExpr::_n_kwdo*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label481: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_block__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5652, LOCATE_parser_prod___AWhileExpr___n_block__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_block(variable[3]) /*AWhileExpr::_n_block*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label482: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5688, LOCATE_parser_prod___AWhileExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWhileExpr___replace_child, LOCATE_parser_prod, 5690); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[4]) /*AWhileExpr::_n_kwwhile*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwwhile, ID_TKwwhile)) /*cast TKwwhile*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWhileExpr___replace_child, LOCATE_parser_prod, 5694); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[4]) /*AWhileExpr::_n_kwwhile*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[4]) /*AWhileExpr::_n_kwwhile*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label483;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AWhileExpr____n_expr(variable[4]) /*AWhileExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWhileExpr___replace_child, LOCATE_parser_prod, 5704); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_expr(variable[4]) /*AWhileExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_expr(variable[4]) /*AWhileExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label483;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[4]) /*AWhileExpr::_n_kwdo*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWhileExpr___replace_child, LOCATE_parser_prod, 5714); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[4]) /*AWhileExpr::_n_kwdo*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[4]) /*AWhileExpr::_n_kwdo*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label483;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AWhileExpr____n_block(variable[4]) /*AWhileExpr::_n_block*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AWhileExpr___replace_child, LOCATE_parser_prod, 5724); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_block(variable[4]) /*AWhileExpr::_n_block*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AWhileExpr____n_block(variable[4]) /*AWhileExpr::_n_block*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label483;
-  }
-  return_label483: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5733, LOCATE_parser_prod___AWhileExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[3]) /*AWhileExpr::_n_kwwhile*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[3]) /*AWhileExpr::_n_kwwhile*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_expr(variable[3]) /*AWhileExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_expr(variable[3]) /*AWhileExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[3]) /*AWhileExpr::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[3]) /*AWhileExpr::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_block(variable[3]) /*AWhileExpr::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_block(variable[3]) /*AWhileExpr::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label484: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5749, LOCATE_parser_prod___AWhileExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[3]) /*AWhileExpr::_n_kwwhile*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[3]) /*AWhileExpr::_n_kwwhile*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_expr(variable[3]) /*AWhileExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_expr(variable[3]) /*AWhileExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[3]) /*AWhileExpr::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[3]) /*AWhileExpr::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AWhileExpr____n_block(variable[3]) /*AWhileExpr::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AWhileExpr____n_block(variable[3]) /*AWhileExpr::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label485: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5660, LOCATE_parser_prod___AWhileExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWhileExpr].i]) return;
-  return_label486: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWhileExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AWhileExpr___init_awhileexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5662, LOCATE_parser_prod___AWhileExpr___init_awhileexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWhileExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___AWhileExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___AWhileExpr___empty_init))(variable[6], init_table /*YYY*/) /*AWhileExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_kwwhile(variable[6]) /*AWhileExpr::_n_kwwhile*/ =  variable[1] /*n_kwwhile*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwwhile*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwwhile*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwwhile*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwwhile*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwwhile*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwwhile*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwwhile*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwwhile*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_expr(variable[6]) /*AWhileExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_kwdo(variable[6]) /*AWhileExpr::_n_kwdo*/ =  variable[3] /*n_kwdo*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_kwdo*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_kwdo*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_kwdo*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_kwdo*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_kwdo*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_kwdo*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AWhileExpr____n_block(variable[6]) /*AWhileExpr::_n_block*/ =  variable[4] /*n_block*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_block*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_block*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_block*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_block*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_block*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_block*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_block*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_block*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label487: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AWhileExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___n_vardecl__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5766, LOCATE_parser_prod___AForExpr___n_vardecl__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AForExpr____n_vardecl(variable[3]) /*AForExpr::_n_vardecl*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label488: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___n_kwdo__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5773, LOCATE_parser_prod___AForExpr___n_kwdo__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AForExpr____n_kwdo(variable[3]) /*AForExpr::_n_kwdo*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label489: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___n_block__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5780, LOCATE_parser_prod___AForExpr___n_block__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AForExpr____n_block(variable[3]) /*AForExpr::_n_block*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label490: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5811, LOCATE_parser_prod___AForExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForExpr___replace_child, LOCATE_parser_prod, 5813); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AForExpr____n_vardecl(variable[4]) /*AForExpr::_n_vardecl*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForExpr___replace_child, LOCATE_parser_prod, 5817); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForExpr____n_vardecl(variable[4]) /*AForExpr::_n_vardecl*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForExpr____n_vardecl(variable[4]) /*AForExpr::_n_vardecl*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label491;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AForExpr____n_kwdo(variable[4]) /*AForExpr::_n_kwdo*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForExpr___replace_child, LOCATE_parser_prod, 5827); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForExpr____n_kwdo(variable[4]) /*AForExpr::_n_kwdo*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForExpr____n_kwdo(variable[4]) /*AForExpr::_n_kwdo*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label491;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AForExpr____n_block(variable[4]) /*AForExpr::_n_block*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForExpr___replace_child, LOCATE_parser_prod, 5837); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForExpr____n_block(variable[4]) /*AForExpr::_n_block*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForExpr____n_block(variable[4]) /*AForExpr::_n_block*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label491;
-  }
-  return_label491: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5846, LOCATE_parser_prod___AForExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForExpr____n_vardecl(variable[3]) /*AForExpr::_n_vardecl*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForExpr____n_vardecl(variable[3]) /*AForExpr::_n_vardecl*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForExpr____n_kwdo(variable[3]) /*AForExpr::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForExpr____n_kwdo(variable[3]) /*AForExpr::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForExpr____n_block(variable[3]) /*AForExpr::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForExpr____n_block(variable[3]) /*AForExpr::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label492: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5859, LOCATE_parser_prod___AForExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForExpr____n_vardecl(variable[3]) /*AForExpr::_n_vardecl*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForExpr____n_vardecl(variable[3]) /*AForExpr::_n_vardecl*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForExpr____n_kwdo(variable[3]) /*AForExpr::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForExpr____n_kwdo(variable[3]) /*AForExpr::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForExpr____n_block(variable[3]) /*AForExpr::_n_block*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForExpr____n_block(variable[3]) /*AForExpr::_n_block*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label493: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5788, LOCATE_parser_prod___AForExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForExpr].i]) return;
-  return_label494: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForExpr___init_aforexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5790, LOCATE_parser_prod___AForExpr___init_aforexpr};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AForExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AForExpr___empty_init))(variable[5], init_table /*YYY*/) /*AForExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AForExpr____n_vardecl(variable[5]) /*AForExpr::_n_vardecl*/ =  variable[1] /*n_vardecl*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_vardecl*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_vardecl*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_vardecl*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_vardecl*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_vardecl*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_vardecl*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_vardecl*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_vardecl*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AForExpr____n_kwdo(variable[5]) /*AForExpr::_n_kwdo*/ =  variable[2] /*n_kwdo*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwdo*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwdo*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwdo*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwdo*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwdo*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwdo*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AForExpr____n_block(variable[5]) /*AForExpr::_n_block*/ =  variable[3] /*n_block*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_block*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_block*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_block*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_block*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_block*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_block*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_block*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_block*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label495: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___n_kwfor__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5873, LOCATE_parser_prod___AForVardeclExpr___n_kwfor__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[3]) /*AForVardeclExpr::_n_kwfor*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label496: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5880, LOCATE_parser_prod___AForVardeclExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AForVardeclExpr____n_id(variable[3]) /*AForVardeclExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label497: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5887, LOCATE_parser_prod___AForVardeclExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[3]) /*AForVardeclExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label498: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 5918, LOCATE_parser_prod___AForVardeclExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForVardeclExpr___replace_child, LOCATE_parser_prod, 5920); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[4]) /*AForVardeclExpr::_n_kwfor*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwfor, ID_TKwfor)) /*cast TKwfor*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForVardeclExpr___replace_child, LOCATE_parser_prod, 5924); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[4]) /*AForVardeclExpr::_n_kwfor*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[4]) /*AForVardeclExpr::_n_kwfor*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label499;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AForVardeclExpr____n_id(variable[4]) /*AForVardeclExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForVardeclExpr___replace_child, LOCATE_parser_prod, 5934); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForVardeclExpr____n_id(variable[4]) /*AForVardeclExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForVardeclExpr____n_id(variable[4]) /*AForVardeclExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label499;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[4]) /*AForVardeclExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AForVardeclExpr___replace_child, LOCATE_parser_prod, 5944); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[4]) /*AForVardeclExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[4]) /*AForVardeclExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label499;
-  }
-  return_label499: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5953, LOCATE_parser_prod___AForVardeclExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[3]) /*AForVardeclExpr::_n_kwfor*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[3]) /*AForVardeclExpr::_n_kwfor*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_id(variable[3]) /*AForVardeclExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_id(variable[3]) /*AForVardeclExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[3]) /*AForVardeclExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[3]) /*AForVardeclExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label500: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5966, LOCATE_parser_prod___AForVardeclExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[3]) /*AForVardeclExpr::_n_kwfor*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[3]) /*AForVardeclExpr::_n_kwfor*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_id(variable[3]) /*AForVardeclExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_id(variable[3]) /*AForVardeclExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[3]) /*AForVardeclExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[3]) /*AForVardeclExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label501: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5895, LOCATE_parser_prod___AForVardeclExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForVardeclExpr].i]) return;
-  return_label502: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForVardeclExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AForVardeclExpr___init_aforvardeclexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 5897, LOCATE_parser_prod___AForVardeclExpr___init_aforvardeclexpr};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForVardeclExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AForVardeclExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AForVardeclExpr___empty_init))(variable[5], init_table /*YYY*/) /*AForVardeclExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AForVardeclExpr____n_kwfor(variable[5]) /*AForVardeclExpr::_n_kwfor*/ =  variable[1] /*n_kwfor*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwfor*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwfor*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwfor*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwfor*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwfor*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwfor*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwfor*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwfor*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AForVardeclExpr____n_id(variable[5]) /*AForVardeclExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AForVardeclExpr____n_expr(variable[5]) /*AForVardeclExpr::_n_expr*/ =  variable[3] /*n_expr*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_expr*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label503: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AForVardeclExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___n_kwassert__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5980, LOCATE_parser_prod___AAssertExpr___n_kwassert__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[3]) /*AAssertExpr::_n_kwassert*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label504: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5987, LOCATE_parser_prod___AAssertExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssertExpr____n_id(variable[3]) /*AAssertExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label505: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 5994, LOCATE_parser_prod___AAssertExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssertExpr____n_expr(variable[3]) /*AAssertExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label506: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6025, LOCATE_parser_prod___AAssertExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssertExpr___replace_child, LOCATE_parser_prod, 6027); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[4]) /*AAssertExpr::_n_kwassert*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwassert, ID_TKwassert)) /*cast TKwassert*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssertExpr___replace_child, LOCATE_parser_prod, 6031); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[4]) /*AAssertExpr::_n_kwassert*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[4]) /*AAssertExpr::_n_kwassert*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label507;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssertExpr____n_id(variable[4]) /*AAssertExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssertExpr___replace_child, LOCATE_parser_prod, 6041); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssertExpr____n_id(variable[4]) /*AAssertExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssertExpr____n_id(variable[4]) /*AAssertExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label507;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssertExpr____n_expr(variable[4]) /*AAssertExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAssertExpr___replace_child, LOCATE_parser_prod, 6051); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssertExpr____n_expr(variable[4]) /*AAssertExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssertExpr____n_expr(variable[4]) /*AAssertExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label507;
-  }
-  return_label507: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6060, LOCATE_parser_prod___AAssertExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[3]) /*AAssertExpr::_n_kwassert*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[3]) /*AAssertExpr::_n_kwassert*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssertExpr____n_id(variable[3]) /*AAssertExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssertExpr____n_id(variable[3]) /*AAssertExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssertExpr____n_expr(variable[3]) /*AAssertExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssertExpr____n_expr(variable[3]) /*AAssertExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label508: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6073, LOCATE_parser_prod___AAssertExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[3]) /*AAssertExpr::_n_kwassert*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[3]) /*AAssertExpr::_n_kwassert*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssertExpr____n_id(variable[3]) /*AAssertExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssertExpr____n_id(variable[3]) /*AAssertExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssertExpr____n_expr(variable[3]) /*AAssertExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssertExpr____n_expr(variable[3]) /*AAssertExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label509: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6002, LOCATE_parser_prod___AAssertExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssertExpr].i]) return;
-  return_label510: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssertExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAssertExpr___init_aassertexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6004, LOCATE_parser_prod___AAssertExpr___init_aassertexpr};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssertExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AAssertExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AAssertExpr___empty_init))(variable[5], init_table /*YYY*/) /*AAssertExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAssertExpr____n_kwassert(variable[5]) /*AAssertExpr::_n_kwassert*/ =  variable[1] /*n_kwassert*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwassert*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwassert*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwassert*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwassert*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwassert*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwassert*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwassert*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwassert*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAssertExpr____n_id(variable[5]) /*AAssertExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAssertExpr____n_expr(variable[5]) /*AAssertExpr::_n_expr*/ =  variable[3] /*n_expr*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_expr*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label511: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAssertExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6094, LOCATE_parser_prod___AOnceExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label512: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___n_kwonce__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6087, LOCATE_parser_prod___AOnceExpr___n_kwonce__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[3]) /*AOnceExpr::_n_kwonce*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label513: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6120, LOCATE_parser_prod___AOnceExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOnceExpr___replace_child, LOCATE_parser_prod, 6122); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[4]) /*AOnceExpr::_n_kwonce*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwonce, ID_TKwonce)) /*cast TKwonce*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOnceExpr___replace_child, LOCATE_parser_prod, 6126); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[4]) /*AOnceExpr::_n_kwonce*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[4]) /*AOnceExpr::_n_kwonce*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label514;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOnceExpr___replace_child, LOCATE_parser_prod, 6136); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label514;
-  }
-  return_label514: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6145, LOCATE_parser_prod___AOnceExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[3]) /*AOnceExpr::_n_kwonce*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[3]) /*AOnceExpr::_n_kwonce*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label515: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6155, LOCATE_parser_prod___AOnceExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[3]) /*AOnceExpr::_n_kwonce*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[3]) /*AOnceExpr::_n_kwonce*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label516: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6102, LOCATE_parser_prod___AOnceExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOnceExpr].i]) return;
-  return_label517: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOnceExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOnceExpr___init_aonceexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6104, LOCATE_parser_prod___AOnceExpr___init_aonceexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOnceExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AOnceExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AOnceExpr___empty_init))(variable[4], init_table /*YYY*/) /*AOnceExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AOnceExpr____n_kwonce(variable[4]) /*AOnceExpr::_n_kwonce*/ =  variable[1] /*n_kwonce*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwonce*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwonce*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwonce*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwonce*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwonce*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwonce*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwonce*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwonce*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label518: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOnceExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASendExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6166, LOCATE_parser_prod___ASendExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label519: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASendExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6187, LOCATE_parser_prod___ASendExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASendExpr___replace_child, LOCATE_parser_prod, 6189); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASendExpr___replace_child, LOCATE_parser_prod, 6193); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label520;
-  }
-  return_label520: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASendExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6202, LOCATE_parser_prod___ASendExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label521: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASendExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6209, LOCATE_parser_prod___ASendExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label522: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASendExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6174, LOCATE_parser_prod___ASendExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASendExpr].i]) return;
-  return_label523: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASendExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASendExpr___init_asendexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6176, LOCATE_parser_prod___ASendExpr___init_asendexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASendExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ASendExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ASendExpr___empty_init))(variable[3], init_table /*YYY*/) /*ASendExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label524: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASendExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6217, LOCATE_parser_prod___ABinopExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label525: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6224, LOCATE_parser_prod___ABinopExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label526: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6250, LOCATE_parser_prod___ABinopExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABinopExpr___replace_child, LOCATE_parser_prod, 6252); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABinopExpr___replace_child, LOCATE_parser_prod, 6256); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label527;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABinopExpr___replace_child, LOCATE_parser_prod, 6266); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label527;
-  }
-  return_label527: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6275, LOCATE_parser_prod___ABinopExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label528: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6285, LOCATE_parser_prod___ABinopExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label529: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6232, LOCATE_parser_prod___ABinopExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABinopExpr].i]) return;
-  return_label530: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABinopExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABinopExpr___init_abinopexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6234, LOCATE_parser_prod___ABinopExpr___init_abinopexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABinopExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ABinopExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ABinopExpr___empty_init))(variable[4], init_table /*YYY*/) /*ABinopExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label531: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABinopExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6296, LOCATE_parser_prod___AOrExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AOrExpr____n_expr(variable[3]) /*AOrExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label532: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6303, LOCATE_parser_prod___AOrExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AOrExpr____n_expr2(variable[3]) /*AOrExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label533: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6329, LOCATE_parser_prod___AOrExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOrExpr___replace_child, LOCATE_parser_prod, 6331); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AOrExpr____n_expr(variable[4]) /*AOrExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOrExpr___replace_child, LOCATE_parser_prod, 6335); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AOrExpr____n_expr(variable[4]) /*AOrExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AOrExpr____n_expr(variable[4]) /*AOrExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label534;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AOrExpr____n_expr2(variable[4]) /*AOrExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOrExpr___replace_child, LOCATE_parser_prod, 6345); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AOrExpr____n_expr2(variable[4]) /*AOrExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AOrExpr____n_expr2(variable[4]) /*AOrExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label534;
-  }
-  return_label534: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6354, LOCATE_parser_prod___AOrExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AOrExpr____n_expr(variable[3]) /*AOrExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AOrExpr____n_expr(variable[3]) /*AOrExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AOrExpr____n_expr2(variable[3]) /*AOrExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AOrExpr____n_expr2(variable[3]) /*AOrExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label535: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6364, LOCATE_parser_prod___AOrExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AOrExpr____n_expr(variable[3]) /*AOrExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AOrExpr____n_expr(variable[3]) /*AOrExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AOrExpr____n_expr2(variable[3]) /*AOrExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AOrExpr____n_expr2(variable[3]) /*AOrExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label536: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6311, LOCATE_parser_prod___AOrExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrExpr].i]) return;
-  return_label537: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrExpr___init_aorexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6313, LOCATE_parser_prod___AOrExpr___init_aorexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AOrExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AOrExpr___empty_init))(variable[4], init_table /*YYY*/) /*AOrExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AOrExpr____n_expr(variable[4]) /*AOrExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AOrExpr____n_expr2(variable[4]) /*AOrExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label538: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6375, LOCATE_parser_prod___AAndExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAndExpr____n_expr(variable[3]) /*AAndExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label539: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6382, LOCATE_parser_prod___AAndExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAndExpr____n_expr2(variable[3]) /*AAndExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label540: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6408, LOCATE_parser_prod___AAndExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAndExpr___replace_child, LOCATE_parser_prod, 6410); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAndExpr____n_expr(variable[4]) /*AAndExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAndExpr___replace_child, LOCATE_parser_prod, 6414); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAndExpr____n_expr(variable[4]) /*AAndExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAndExpr____n_expr(variable[4]) /*AAndExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label541;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAndExpr____n_expr2(variable[4]) /*AAndExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAndExpr___replace_child, LOCATE_parser_prod, 6424); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAndExpr____n_expr2(variable[4]) /*AAndExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAndExpr____n_expr2(variable[4]) /*AAndExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label541;
-  }
-  return_label541: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6433, LOCATE_parser_prod___AAndExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAndExpr____n_expr(variable[3]) /*AAndExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAndExpr____n_expr(variable[3]) /*AAndExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAndExpr____n_expr2(variable[3]) /*AAndExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAndExpr____n_expr2(variable[3]) /*AAndExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label542: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6443, LOCATE_parser_prod___AAndExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAndExpr____n_expr(variable[3]) /*AAndExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAndExpr____n_expr(variable[3]) /*AAndExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAndExpr____n_expr2(variable[3]) /*AAndExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAndExpr____n_expr2(variable[3]) /*AAndExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label543: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6390, LOCATE_parser_prod___AAndExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAndExpr].i]) return;
-  return_label544: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAndExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAndExpr___init_aandexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6392, LOCATE_parser_prod___AAndExpr___init_aandexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAndExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AAndExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AAndExpr___empty_init))(variable[4], init_table /*YYY*/) /*AAndExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAndExpr____n_expr(variable[4]) /*AAndExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAndExpr____n_expr2(variable[4]) /*AAndExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label545: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAndExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___n_kwnot__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6454, LOCATE_parser_prod___ANotExpr___n_kwnot__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANotExpr____n_kwnot(variable[3]) /*ANotExpr::_n_kwnot*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label546: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6461, LOCATE_parser_prod___ANotExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANotExpr____n_expr(variable[3]) /*ANotExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label547: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6487, LOCATE_parser_prod___ANotExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANotExpr___replace_child, LOCATE_parser_prod, 6489); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANotExpr____n_kwnot(variable[4]) /*ANotExpr::_n_kwnot*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANotExpr___replace_child, LOCATE_parser_prod, 6493); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANotExpr____n_kwnot(variable[4]) /*ANotExpr::_n_kwnot*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANotExpr____n_kwnot(variable[4]) /*ANotExpr::_n_kwnot*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label548;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANotExpr____n_expr(variable[4]) /*ANotExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANotExpr___replace_child, LOCATE_parser_prod, 6503); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANotExpr____n_expr(variable[4]) /*ANotExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANotExpr____n_expr(variable[4]) /*ANotExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label548;
-  }
-  return_label548: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6512, LOCATE_parser_prod___ANotExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(variable[3]) /*ANotExpr::_n_kwnot*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(variable[3]) /*ANotExpr::_n_kwnot*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANotExpr____n_expr(variable[3]) /*ANotExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANotExpr____n_expr(variable[3]) /*ANotExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label549: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6522, LOCATE_parser_prod___ANotExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(variable[3]) /*ANotExpr::_n_kwnot*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(variable[3]) /*ANotExpr::_n_kwnot*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANotExpr____n_expr(variable[3]) /*ANotExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANotExpr____n_expr(variable[3]) /*ANotExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label550: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6469, LOCATE_parser_prod___ANotExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANotExpr].i]) return;
-  return_label551: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANotExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANotExpr___init_anotexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6471, LOCATE_parser_prod___ANotExpr___init_anotexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANotExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ANotExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ANotExpr___empty_init))(variable[4], init_table /*YYY*/) /*ANotExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ANotExpr____n_kwnot(variable[4]) /*ANotExpr::_n_kwnot*/ =  variable[1] /*n_kwnot*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwnot*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwnot*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwnot*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwnot*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwnot*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwnot*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwnot*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwnot*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ANotExpr____n_expr(variable[4]) /*ANotExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label552: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANotExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6533, LOCATE_parser_prod___AEqExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label553: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6540, LOCATE_parser_prod___AEqExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label554: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6566, LOCATE_parser_prod___AEqExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEqExpr___replace_child, LOCATE_parser_prod, 6568); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEqExpr___replace_child, LOCATE_parser_prod, 6572); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label555;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEqExpr___replace_child, LOCATE_parser_prod, 6582); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label555;
-  }
-  return_label555: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6591, LOCATE_parser_prod___AEqExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label556: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6601, LOCATE_parser_prod___AEqExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label557: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6548, LOCATE_parser_prod___AEqExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqExpr].i]) return;
-  return_label558: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEqExpr___init_aeqexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6550, LOCATE_parser_prod___AEqExpr___init_aeqexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AEqExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AEqExpr___empty_init))(variable[4], init_table /*YYY*/) /*AEqExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label559: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEqExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6612, LOCATE_parser_prod___AEeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AEeExpr____n_expr(variable[3]) /*AEeExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label560: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6619, LOCATE_parser_prod___AEeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AEeExpr____n_expr2(variable[3]) /*AEeExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label561: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6645, LOCATE_parser_prod___AEeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEeExpr___replace_child, LOCATE_parser_prod, 6647); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AEeExpr____n_expr(variable[4]) /*AEeExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEeExpr___replace_child, LOCATE_parser_prod, 6651); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEeExpr____n_expr(variable[4]) /*AEeExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEeExpr____n_expr(variable[4]) /*AEeExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label562;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AEeExpr____n_expr2(variable[4]) /*AEeExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEeExpr___replace_child, LOCATE_parser_prod, 6661); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEeExpr____n_expr2(variable[4]) /*AEeExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEeExpr____n_expr2(variable[4]) /*AEeExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label562;
-  }
-  return_label562: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6670, LOCATE_parser_prod___AEeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEeExpr____n_expr(variable[3]) /*AEeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEeExpr____n_expr(variable[3]) /*AEeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEeExpr____n_expr2(variable[3]) /*AEeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEeExpr____n_expr2(variable[3]) /*AEeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label563: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6680, LOCATE_parser_prod___AEeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEeExpr____n_expr(variable[3]) /*AEeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEeExpr____n_expr(variable[3]) /*AEeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEeExpr____n_expr2(variable[3]) /*AEeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEeExpr____n_expr2(variable[3]) /*AEeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label564: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6627, LOCATE_parser_prod___AEeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEeExpr].i]) return;
-  return_label565: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEeExpr___init_aeeexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6629, LOCATE_parser_prod___AEeExpr___init_aeeexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AEeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AEeExpr___empty_init))(variable[4], init_table /*YYY*/) /*AEeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AEeExpr____n_expr(variable[4]) /*AEeExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AEeExpr____n_expr2(variable[4]) /*AEeExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label566: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6691, LOCATE_parser_prod___ANeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label567: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6698, LOCATE_parser_prod___ANeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label568: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6724, LOCATE_parser_prod___ANeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANeExpr___replace_child, LOCATE_parser_prod, 6726); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANeExpr___replace_child, LOCATE_parser_prod, 6730); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label569;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANeExpr___replace_child, LOCATE_parser_prod, 6740); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label569;
-  }
-  return_label569: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6749, LOCATE_parser_prod___ANeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label570: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6759, LOCATE_parser_prod___ANeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label571: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6706, LOCATE_parser_prod___ANeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeExpr].i]) return;
-  return_label572: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANeExpr___init_aneexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6708, LOCATE_parser_prod___ANeExpr___init_aneexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ANeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ANeExpr___empty_init))(variable[4], init_table /*YYY*/) /*ANeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label573: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6770, LOCATE_parser_prod___ALtExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label574: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6777, LOCATE_parser_prod___ALtExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label575: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6803, LOCATE_parser_prod___ALtExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALtExpr___replace_child, LOCATE_parser_prod, 6805); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALtExpr___replace_child, LOCATE_parser_prod, 6809); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label576;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALtExpr___replace_child, LOCATE_parser_prod, 6819); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label576;
-  }
-  return_label576: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6828, LOCATE_parser_prod___ALtExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label577: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6838, LOCATE_parser_prod___ALtExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label578: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6785, LOCATE_parser_prod___ALtExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtExpr].i]) return;
-  return_label579: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALtExpr___init_altexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6787, LOCATE_parser_prod___ALtExpr___init_altexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ALtExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ALtExpr___empty_init))(variable[4], init_table /*YYY*/) /*ALtExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label580: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALtExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6849, LOCATE_parser_prod___ALeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label581: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6856, LOCATE_parser_prod___ALeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label582: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6882, LOCATE_parser_prod___ALeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALeExpr___replace_child, LOCATE_parser_prod, 6884); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALeExpr___replace_child, LOCATE_parser_prod, 6888); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label583;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ALeExpr___replace_child, LOCATE_parser_prod, 6898); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label583;
-  }
-  return_label583: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6907, LOCATE_parser_prod___ALeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label584: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6917, LOCATE_parser_prod___ALeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label585: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6864, LOCATE_parser_prod___ALeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeExpr].i]) return;
-  return_label586: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ALeExpr___init_aleexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6866, LOCATE_parser_prod___ALeExpr___init_aleexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ALeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ALeExpr___empty_init))(variable[4], init_table /*YYY*/) /*ALeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label587: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ALeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6928, LOCATE_parser_prod___AGtExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label588: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6935, LOCATE_parser_prod___AGtExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label589: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 6961, LOCATE_parser_prod___AGtExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGtExpr___replace_child, LOCATE_parser_prod, 6963); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGtExpr___replace_child, LOCATE_parser_prod, 6967); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label590;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGtExpr___replace_child, LOCATE_parser_prod, 6977); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label590;
-  }
-  return_label590: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6986, LOCATE_parser_prod___AGtExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label591: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 6996, LOCATE_parser_prod___AGtExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label592: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6943, LOCATE_parser_prod___AGtExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtExpr].i]) return;
-  return_label593: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGtExpr___init_agtexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 6945, LOCATE_parser_prod___AGtExpr___init_agtexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AGtExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AGtExpr___empty_init))(variable[4], init_table /*YYY*/) /*AGtExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label594: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGtExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7007, LOCATE_parser_prod___AGeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label595: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7014, LOCATE_parser_prod___AGeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label596: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7040, LOCATE_parser_prod___AGeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGeExpr___replace_child, LOCATE_parser_prod, 7042); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGeExpr___replace_child, LOCATE_parser_prod, 7046); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label597;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AGeExpr___replace_child, LOCATE_parser_prod, 7056); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label597;
-  }
-  return_label597: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7065, LOCATE_parser_prod___AGeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label598: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7075, LOCATE_parser_prod___AGeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label599: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7022, LOCATE_parser_prod___AGeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeExpr].i]) return;
-  return_label600: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AGeExpr___init_ageexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7024, LOCATE_parser_prod___AGeExpr___init_ageexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AGeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AGeExpr___empty_init))(variable[4], init_table /*YYY*/) /*AGeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label601: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AGeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7086, LOCATE_parser_prod___AIsaExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIsaExpr____n_expr(variable[3]) /*AIsaExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label602: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7093, LOCATE_parser_prod___AIsaExpr___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIsaExpr____n_type(variable[3]) /*AIsaExpr::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label603: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7119, LOCATE_parser_prod___AIsaExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIsaExpr___replace_child, LOCATE_parser_prod, 7121); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIsaExpr____n_expr(variable[4]) /*AIsaExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIsaExpr___replace_child, LOCATE_parser_prod, 7125); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIsaExpr____n_expr(variable[4]) /*AIsaExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIsaExpr____n_expr(variable[4]) /*AIsaExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label604;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIsaExpr____n_type(variable[4]) /*AIsaExpr::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIsaExpr___replace_child, LOCATE_parser_prod, 7135); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIsaExpr____n_type(variable[4]) /*AIsaExpr::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIsaExpr____n_type(variable[4]) /*AIsaExpr::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label604;
-  }
-  return_label604: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7144, LOCATE_parser_prod___AIsaExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIsaExpr____n_expr(variable[3]) /*AIsaExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIsaExpr____n_expr(variable[3]) /*AIsaExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIsaExpr____n_type(variable[3]) /*AIsaExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIsaExpr____n_type(variable[3]) /*AIsaExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label605: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7154, LOCATE_parser_prod___AIsaExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIsaExpr____n_expr(variable[3]) /*AIsaExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIsaExpr____n_expr(variable[3]) /*AIsaExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIsaExpr____n_type(variable[3]) /*AIsaExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIsaExpr____n_type(variable[3]) /*AIsaExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label606: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7101, LOCATE_parser_prod___AIsaExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIsaExpr].i]) return;
-  return_label607: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIsaExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIsaExpr___init_aisaexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7103, LOCATE_parser_prod___AIsaExpr___init_aisaexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIsaExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AIsaExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AIsaExpr___empty_init))(variable[4], init_table /*YYY*/) /*AIsaExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AIsaExpr____n_expr(variable[4]) /*AIsaExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AIsaExpr____n_type(variable[4]) /*AIsaExpr::_n_type*/ =  variable[2] /*n_type*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_type*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label608: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIsaExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7165, LOCATE_parser_prod___APlusExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label609: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7172, LOCATE_parser_prod___APlusExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label610: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7198, LOCATE_parser_prod___APlusExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusExpr___replace_child, LOCATE_parser_prod, 7200); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusExpr___replace_child, LOCATE_parser_prod, 7204); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label611;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusExpr___replace_child, LOCATE_parser_prod, 7214); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label611;
-  }
-  return_label611: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7223, LOCATE_parser_prod___APlusExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label612: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7233, LOCATE_parser_prod___APlusExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label613: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7180, LOCATE_parser_prod___APlusExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusExpr].i]) return;
-  return_label614: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusExpr___init_aplusexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7182, LOCATE_parser_prod___APlusExpr___init_aplusexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___APlusExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___APlusExpr___empty_init))(variable[4], init_table /*YYY*/) /*APlusExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label615: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7244, LOCATE_parser_prod___AMinusExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label616: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7251, LOCATE_parser_prod___AMinusExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label617: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7277, LOCATE_parser_prod___AMinusExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusExpr___replace_child, LOCATE_parser_prod, 7279); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusExpr___replace_child, LOCATE_parser_prod, 7283); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label618;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusExpr___replace_child, LOCATE_parser_prod, 7293); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label618;
-  }
-  return_label618: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7302, LOCATE_parser_prod___AMinusExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label619: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7312, LOCATE_parser_prod___AMinusExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label620: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7259, LOCATE_parser_prod___AMinusExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusExpr].i]) return;
-  return_label621: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusExpr___init_aminusexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7261, LOCATE_parser_prod___AMinusExpr___init_aminusexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AMinusExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AMinusExpr___empty_init))(variable[4], init_table /*YYY*/) /*AMinusExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label622: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7323, LOCATE_parser_prod___AStarshipExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label623: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7330, LOCATE_parser_prod___AStarshipExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label624: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7356, LOCATE_parser_prod___AStarshipExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarshipExpr___replace_child, LOCATE_parser_prod, 7358); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarshipExpr___replace_child, LOCATE_parser_prod, 7362); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label625;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarshipExpr___replace_child, LOCATE_parser_prod, 7372); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label625;
-  }
-  return_label625: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7381, LOCATE_parser_prod___AStarshipExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label626: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7391, LOCATE_parser_prod___AStarshipExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label627: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7338, LOCATE_parser_prod___AStarshipExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipExpr].i]) return;
-  return_label628: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___init_astarshipexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7340, LOCATE_parser_prod___AStarshipExpr___init_astarshipexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AStarshipExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AStarshipExpr___empty_init))(variable[4], init_table /*YYY*/) /*AStarshipExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label629: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarshipExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7402, LOCATE_parser_prod___AStarExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label630: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7409, LOCATE_parser_prod___AStarExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label631: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7435, LOCATE_parser_prod___AStarExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarExpr___replace_child, LOCATE_parser_prod, 7437); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarExpr___replace_child, LOCATE_parser_prod, 7441); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label632;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStarExpr___replace_child, LOCATE_parser_prod, 7451); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label632;
-  }
-  return_label632: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7460, LOCATE_parser_prod___AStarExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label633: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7470, LOCATE_parser_prod___AStarExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label634: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7417, LOCATE_parser_prod___AStarExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarExpr].i]) return;
-  return_label635: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStarExpr___init_astarexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7419, LOCATE_parser_prod___AStarExpr___init_astarexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AStarExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AStarExpr___empty_init))(variable[4], init_table /*YYY*/) /*AStarExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label636: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStarExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7481, LOCATE_parser_prod___ASlashExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label637: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7488, LOCATE_parser_prod___ASlashExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label638: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7514, LOCATE_parser_prod___ASlashExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASlashExpr___replace_child, LOCATE_parser_prod, 7516); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASlashExpr___replace_child, LOCATE_parser_prod, 7520); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label639;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASlashExpr___replace_child, LOCATE_parser_prod, 7530); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label639;
-  }
-  return_label639: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7539, LOCATE_parser_prod___ASlashExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label640: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7549, LOCATE_parser_prod___ASlashExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label641: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7496, LOCATE_parser_prod___ASlashExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashExpr].i]) return;
-  return_label642: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASlashExpr___init_aslashexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7498, LOCATE_parser_prod___ASlashExpr___init_aslashexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ASlashExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ASlashExpr___empty_init))(variable[4], init_table /*YYY*/) /*ASlashExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label643: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASlashExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7560, LOCATE_parser_prod___APercentExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label644: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7567, LOCATE_parser_prod___APercentExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label645: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7593, LOCATE_parser_prod___APercentExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APercentExpr___replace_child, LOCATE_parser_prod, 7595); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APercentExpr___replace_child, LOCATE_parser_prod, 7599); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label646;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APercentExpr___replace_child, LOCATE_parser_prod, 7609); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label646;
-  }
-  return_label646: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7618, LOCATE_parser_prod___APercentExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label647: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7628, LOCATE_parser_prod___APercentExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(variable[3]) /*ABinopExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label648: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7575, LOCATE_parser_prod___APercentExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentExpr].i]) return;
-  return_label649: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APercentExpr___init_apercentexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7577, LOCATE_parser_prod___APercentExpr___init_apercentexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___APercentExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___APercentExpr___empty_init))(variable[4], init_table /*YYY*/) /*APercentExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ABinopExpr____n_expr2(variable[4]) /*ABinopExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label650: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APercentExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7646, LOCATE_parser_prod___AUminusExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label651: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___n_minus__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7639, LOCATE_parser_prod___AUminusExpr___n_minus__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AUminusExpr____n_minus(variable[3]) /*AUminusExpr::_n_minus*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label652: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7672, LOCATE_parser_prod___AUminusExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AUminusExpr___replace_child, LOCATE_parser_prod, 7674); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AUminusExpr____n_minus(variable[4]) /*AUminusExpr::_n_minus*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AUminusExpr___replace_child, LOCATE_parser_prod, 7678); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AUminusExpr____n_minus(variable[4]) /*AUminusExpr::_n_minus*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AUminusExpr____n_minus(variable[4]) /*AUminusExpr::_n_minus*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label653;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AUminusExpr___replace_child, LOCATE_parser_prod, 7688); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label653;
-  }
-  return_label653: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7697, LOCATE_parser_prod___AUminusExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AUminusExpr____n_minus(variable[3]) /*AUminusExpr::_n_minus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AUminusExpr____n_minus(variable[3]) /*AUminusExpr::_n_minus*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label654: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7707, LOCATE_parser_prod___AUminusExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AUminusExpr____n_minus(variable[3]) /*AUminusExpr::_n_minus*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AUminusExpr____n_minus(variable[3]) /*AUminusExpr::_n_minus*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label655: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7654, LOCATE_parser_prod___AUminusExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUminusExpr].i]) return;
-  return_label656: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUminusExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AUminusExpr___init_auminusexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7656, LOCATE_parser_prod___AUminusExpr___init_auminusexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUminusExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AUminusExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AUminusExpr___empty_init))(variable[4], init_table /*YYY*/) /*AUminusExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AUminusExpr____n_minus(variable[4]) /*AUminusExpr::_n_minus*/ =  variable[1] /*n_minus*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_minus*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_minus*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_minus*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_minus*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_minus*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_minus*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_minus*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_minus*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label657: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AUminusExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___n_kwnew__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7718, LOCATE_parser_prod___ANewExpr___n_kwnew__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANewExpr____n_kwnew(variable[3]) /*ANewExpr::_n_kwnew*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label658: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7725, LOCATE_parser_prod___ANewExpr___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANewExpr____n_type(variable[3]) /*ANewExpr::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label659: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7732, LOCATE_parser_prod___ANewExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANewExpr____n_id(variable[3]) /*ANewExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label660: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7770, LOCATE_parser_prod___ANewExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANewExpr___replace_child, LOCATE_parser_prod, 7772); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANewExpr____n_kwnew(variable[4]) /*ANewExpr::_n_kwnew*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwnew, ID_TKwnew)) /*cast TKwnew*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANewExpr___replace_child, LOCATE_parser_prod, 7776); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANewExpr____n_kwnew(variable[4]) /*ANewExpr::_n_kwnew*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANewExpr____n_kwnew(variable[4]) /*ANewExpr::_n_kwnew*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label661;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANewExpr____n_type(variable[4]) /*ANewExpr::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANewExpr___replace_child, LOCATE_parser_prod, 7786); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANewExpr____n_type(variable[4]) /*ANewExpr::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANewExpr____n_type(variable[4]) /*ANewExpr::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label661;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANewExpr____n_id(variable[4]) /*ANewExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANewExpr___replace_child, LOCATE_parser_prod, 7796); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANewExpr____n_id(variable[4]) /*ANewExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANewExpr____n_id(variable[4]) /*ANewExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label661;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANewExpr____n_args(variable[4]) /*ANewExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ANewExpr____n_args(variable[7]) /*ANewExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANewExpr___replace_child, LOCATE_parser_prod, 7806); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ANewExpr____n_args(variable[7]) /*ANewExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ANewExpr____n_args(variable[7]) /*ANewExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label661;
-    }
-    continue_662: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_662: while(0);
-  return_label661: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7817, LOCATE_parser_prod___ANewExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(variable[3]) /*ANewExpr::_n_kwnew*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(variable[3]) /*ANewExpr::_n_kwnew*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_type(variable[3]) /*ANewExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANewExpr____n_type(variable[3]) /*ANewExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_id(variable[3]) /*ANewExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANewExpr____n_id(variable[3]) /*ANewExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_args(variable[3]) /*ANewExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_664: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_664: while(0);
-  return_label663: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7833, LOCATE_parser_prod___ANewExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(variable[3]) /*ANewExpr::_n_kwnew*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(variable[3]) /*ANewExpr::_n_kwnew*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_type(variable[3]) /*ANewExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANewExpr____n_type(variable[3]) /*ANewExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANewExpr____n_id(variable[3]) /*ANewExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANewExpr____n_id(variable[3]) /*ANewExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANewExpr____n_args(variable[4]) /*ANewExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ANewExpr____n_args(variable[4]) /*ANewExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_666: while(0);
-  }
-  break_666: while(0);
-  return_label665: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7740, LOCATE_parser_prod___ANewExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANewExpr].i]) return;
-  return_label667: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANewExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANewExpr___init_anewexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7742, LOCATE_parser_prod___ANewExpr___init_anewexpr};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANewExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___ANewExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___ANewExpr___empty_init))(variable[6], init_table /*YYY*/) /*ANewExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ANewExpr____n_kwnew(variable[6]) /*ANewExpr::_n_kwnew*/ =  variable[1] /*n_kwnew*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwnew*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwnew*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwnew*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwnew*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwnew*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwnew*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwnew*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwnew*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ANewExpr____n_type(variable[6]) /*ANewExpr::_n_type*/ =  variable[2] /*n_type*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_type*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ANewExpr____n_id(variable[6]) /*ANewExpr::_n_id*/ =  variable[3] /*n_id*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_id*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  variable[7] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ANewExpr____n_args(variable[6]) /*ANewExpr::_n_args*/ = variable[7];
-  variable[6] = ((array___AbstractArray___iterator_t)CALL( variable[4] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[4] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = ((array___ArrayIterator___is_ok_t)CALL(variable[6],COLOR_abstract_collection___Iterator___is_ok))(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = ((array___ArrayIterator___item_t)CALL(variable[6],COLOR_abstract_collection___Iterator___item))(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*n*/==NIT_NULL) || VAL_ISA( variable[8] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANewExpr___init_anewexpr, LOCATE_parser_prod, 7764); nit_exit(1);}
-    variable[9] = variable[0];
-    variable[9] = ATTR_parser_nodes___ANewExpr____n_args(variable[9]) /*ANewExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[9],COLOR_abstract_collection___SimpleCollection___add))(variable[9],  variable[8] /*n*/) /*IndexedCollection::add*/;
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n*/, variable[9]) /*PNode::parent=*/;
-    continue_669: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[6],COLOR_abstract_collection___Iterator___next))(variable[6]) /*ArrayIterator::next*/;
-  }
-  break_669: while(0);
-  return_label668: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANewExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7854, LOCATE_parser_prod___AAttrExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label670: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7861, LOCATE_parser_prod___AAttrExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label671: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7887, LOCATE_parser_prod___AAttrExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrExpr___replace_child, LOCATE_parser_prod, 7889); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrExpr___replace_child, LOCATE_parser_prod, 7893); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label672;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrExpr___replace_child, LOCATE_parser_prod, 7903); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label672;
-  }
-  return_label672: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7912, LOCATE_parser_prod___AAttrExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label673: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7922, LOCATE_parser_prod___AAttrExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label674: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7869, LOCATE_parser_prod___AAttrExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrExpr].i]) return;
-  return_label675: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrExpr___init_aattrexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7871, LOCATE_parser_prod___AAttrExpr___init_aattrexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AAttrExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AAttrExpr___empty_init))(variable[4], init_table /*YYY*/) /*AAttrExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label676: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7933, LOCATE_parser_prod___AAttrAssignExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label677: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7940, LOCATE_parser_prod___AAttrAssignExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label678: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7947, LOCATE_parser_prod___AAttrAssignExpr___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label679: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 7954, LOCATE_parser_prod___AAttrAssignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label680: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 7990, LOCATE_parser_prod___AAttrAssignExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrAssignExpr___replace_child, LOCATE_parser_prod, 7992); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrAssignExpr___replace_child, LOCATE_parser_prod, 7996); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label681;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrAssignExpr___replace_child, LOCATE_parser_prod, 8006); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label681;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrAssignExpr___replace_child, LOCATE_parser_prod, 8016); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label681;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrAssignExpr___replace_child, LOCATE_parser_prod, 8026); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label681;
-  }
-  return_label681: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8035, LOCATE_parser_prod___AAttrAssignExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label682: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8051, LOCATE_parser_prod___AAttrAssignExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label683: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7962, LOCATE_parser_prod___AAttrAssignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrAssignExpr].i]) return;
-  return_label684: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 7964, LOCATE_parser_prod___AAttrAssignExpr___init_aattrassignexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrAssignExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___AAttrAssignExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___AAttrAssignExpr___empty_init))(variable[6], init_table /*YYY*/) /*AAttrAssignExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[6]) /*AAttrFormExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_id(variable[6]) /*AAttrFormExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[6]) /*AAssignFormExpr::_n_assign*/ =  variable[3] /*n_assign*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_assign*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[6]) /*AAssignFormExpr::_n_value*/ =  variable[4] /*n_value*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_value*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label685: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8068, LOCATE_parser_prod___AAttrReassignExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label686: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8075, LOCATE_parser_prod___AAttrReassignExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label687: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_assign_op__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8082, LOCATE_parser_prod___AAttrReassignExpr___n_assign_op__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label688: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8089, LOCATE_parser_prod___AAttrReassignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label689: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8125, LOCATE_parser_prod___AAttrReassignExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrReassignExpr___replace_child, LOCATE_parser_prod, 8127); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrReassignExpr___replace_child, LOCATE_parser_prod, 8131); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[4]) /*AAttrFormExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label690;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrReassignExpr___replace_child, LOCATE_parser_prod, 8141); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAttrFormExpr____n_id(variable[4]) /*AAttrFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label690;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PAssignOp, ID_PAssignOp)) /*cast PAssignOp*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrReassignExpr___replace_child, LOCATE_parser_prod, 8151); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label690;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAttrReassignExpr___replace_child, LOCATE_parser_prod, 8161); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label690;
-  }
-  return_label690: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8170, LOCATE_parser_prod___AAttrReassignExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label691: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8186, LOCATE_parser_prod___AAttrReassignExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[3]) /*AAttrFormExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(variable[3]) /*AAttrFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label692: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8097, LOCATE_parser_prod___AAttrReassignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrReassignExpr].i]) return;
-  return_label693: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8099, LOCATE_parser_prod___AAttrReassignExpr___init_aattrreassignexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrReassignExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___AAttrReassignExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___AAttrReassignExpr___empty_init))(variable[6], init_table /*YYY*/) /*AAttrReassignExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(variable[6]) /*AAttrFormExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAttrFormExpr____n_id(variable[6]) /*AAttrFormExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[6]) /*AReassignFormExpr::_n_assign_op*/ =  variable[3] /*n_assign_op*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_assign_op*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_assign_op*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_assign_op*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_assign_op*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_assign_op*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_assign_op*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[6]) /*AReassignFormExpr::_n_value*/ =  variable[4] /*n_value*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_value*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label694: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAttrReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8203, LOCATE_parser_prod___ACallExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label695: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8210, LOCATE_parser_prod___ACallExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label696: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8250, LOCATE_parser_prod___ACallExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___replace_child, LOCATE_parser_prod, 8252); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___replace_child, LOCATE_parser_prod, 8256); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label697;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___replace_child, LOCATE_parser_prod, 8266); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label697;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___replace_child, LOCATE_parser_prod, 8276); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label697;
-    }
-    continue_698: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_698: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[4]) /*ASendExpr::_n_closure_defs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[7]) /*ASendExpr::_n_closure_defs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PClosureDef, ID_PClosureDef)) /*cast PClosureDef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___replace_child, LOCATE_parser_prod, 8288); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[7]) /*ASendExpr::_n_closure_defs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[7]) /*ASendExpr::_n_closure_defs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label697;
-    }
-    continue_699: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_699: while(0);
-  return_label697: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8299, LOCATE_parser_prod___ACallExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[3]) /*ACallFormExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_701: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_701: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[3]) /*ASendExpr::_n_closure_defs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_702: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_702: while(0);
-  return_label700: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8315, LOCATE_parser_prod___ACallExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_704: while(0);
-  }
-  break_704: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[4]) /*ASendExpr::_n_closure_defs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[4]) /*ASendExpr::_n_closure_defs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_705: while(0);
-  }
-  break_705: while(0);
-  return_label703: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8218, LOCATE_parser_prod___ACallExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallExpr].i]) return;
-  return_label706: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallExpr___init_acallexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8220, LOCATE_parser_prod___ACallExpr___init_acallexpr};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___ACallExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___ACallExpr___empty_init))(variable[6], init_table /*YYY*/) /*ACallExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[6]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ACallFormExpr____n_id(variable[6]) /*ACallFormExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  variable[7] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ACallFormExpr____n_args(variable[6]) /*ACallFormExpr::_n_args*/ = variable[7];
-  variable[6] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = ((array___ArrayIterator___is_ok_t)CALL(variable[6],COLOR_abstract_collection___Iterator___is_ok))(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = ((array___ArrayIterator___item_t)CALL(variable[6],COLOR_abstract_collection___Iterator___item))(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*n*/==NIT_NULL) || VAL_ISA( variable[8] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___init_acallexpr, LOCATE_parser_prod, 8238); nit_exit(1);}
-    variable[9] = variable[0];
-    variable[9] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[9]) /*ACallFormExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[9],COLOR_abstract_collection___SimpleCollection___add))(variable[9],  variable[8] /*n*/) /*IndexedCollection::add*/;
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n*/, variable[9]) /*PNode::parent=*/;
-    continue_708: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[6],COLOR_abstract_collection___Iterator___next))(variable[6]) /*ArrayIterator::next*/;
-  }
-  break_708: while(0);
-  variable[6] = variable[0];
-  variable[7] = NEW_List_list___List___init(); /*new List[PClosureDef]*/
-  ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[6]) /*ASendExpr::_n_closure_defs*/ = variable[7];
-  variable[6] = ((array___AbstractArray___iterator_t)CALL( variable[4] /*n_closure_defs*/,COLOR_abstract_collection___Collection___iterator))( variable[4] /*n_closure_defs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = ((array___ArrayIterator___is_ok_t)CALL(variable[6],COLOR_abstract_collection___Iterator___is_ok))(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = ((array___ArrayIterator___item_t)CALL(variable[6],COLOR_abstract_collection___Iterator___item))(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*n*/==NIT_NULL) || VAL_ISA( variable[8] /*n*/, COLOR_PClosureDef, ID_PClosureDef)) /*cast PClosureDef*/;
-    if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallExpr___init_acallexpr, LOCATE_parser_prod, 8244); nit_exit(1);}
-    variable[9] = variable[0];
-    variable[9] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[9]) /*ASendExpr::_n_closure_defs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[9],COLOR_abstract_collection___SimpleCollection___add))(variable[9],  variable[8] /*n*/) /*IndexedCollection::add*/;
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n*/, variable[9]) /*PNode::parent=*/;
-    continue_709: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[6],COLOR_abstract_collection___Iterator___next))(variable[6]) /*ArrayIterator::next*/;
-  }
-  break_709: while(0);
-  return_label707: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8340, LOCATE_parser_prod___ACallAssignExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label710: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8347, LOCATE_parser_prod___ACallAssignExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label711: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8354, LOCATE_parser_prod___ACallAssignExpr___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label712: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8361, LOCATE_parser_prod___ACallAssignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label713: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8404, LOCATE_parser_prod___ACallAssignExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___replace_child, LOCATE_parser_prod, 8406); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___replace_child, LOCATE_parser_prod, 8410); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label714;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___replace_child, LOCATE_parser_prod, 8420); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label714;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___replace_child, LOCATE_parser_prod, 8430); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label714;
-    }
-    continue_715: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_715: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___replace_child, LOCATE_parser_prod, 8442); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label714;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___replace_child, LOCATE_parser_prod, 8452); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label714;
-  }
-  return_label714: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8461, LOCATE_parser_prod___ACallAssignExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[3]) /*ACallFormExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_717: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_717: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label716: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8480, LOCATE_parser_prod___ACallAssignExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_719: while(0);
-  }
-  break_719: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label718: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8369, LOCATE_parser_prod___ACallAssignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallAssignExpr].i]) return;
-  return_label720: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___init_acallassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8371, LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr};
-  val_t variable[11];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallAssignExpr].i]) return;
-  variable[7] = variable[0];
-  ((parser_prod___ACallAssignExpr___empty_init_t)CALL(variable[7],COLOR_parser_prod___ACallAssignExpr___empty_init))(variable[7], init_table /*YYY*/) /*ACallAssignExpr::empty_init*/;
-  variable[7] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[7]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___ACallFormExpr____n_id(variable[7]) /*ACallFormExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  variable[8] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/ = variable[8];
-  variable[7] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[8] = ((array___ArrayIterator___is_ok_t)CALL(variable[7],COLOR_abstract_collection___Iterator___is_ok))(variable[7]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[8])) break; /*for*/
-    variable[8] = ((array___ArrayIterator___item_t)CALL(variable[7],COLOR_abstract_collection___Iterator___item))(variable[7]) /*ArrayIterator::item*/;
-    variable[9] = variable[8];
-    variable[10] = TAG_Bool(( variable[9] /*n*/==NIT_NULL) || VAL_ISA( variable[9] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[10])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr, LOCATE_parser_prod, 8390); nit_exit(1);}
-    variable[10] = variable[0];
-    variable[10] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[10]) /*ACallFormExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[10],COLOR_abstract_collection___SimpleCollection___add))(variable[10],  variable[9] /*n*/) /*IndexedCollection::add*/;
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[9] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[9] /*n*/, variable[10]) /*PNode::parent=*/;
-    continue_722: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[7],COLOR_abstract_collection___Iterator___next))(variable[7]) /*ArrayIterator::next*/;
-  }
-  break_722: while(0);
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[7]) /*AAssignFormExpr::_n_assign*/ =  variable[4] /*n_assign*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_assign*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[7]) /*AAssignFormExpr::_n_value*/ =  variable[5] /*n_value*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_value*/, variable[7]) /*PNode::parent=*/;
-  }
-  return_label721: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8504, LOCATE_parser_prod___ACallReassignExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label723: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8511, LOCATE_parser_prod___ACallReassignExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label724: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_assign_op__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8518, LOCATE_parser_prod___ACallReassignExpr___n_assign_op__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label725: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8525, LOCATE_parser_prod___ACallReassignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label726: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8568, LOCATE_parser_prod___ACallReassignExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___replace_child, LOCATE_parser_prod, 8570); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___replace_child, LOCATE_parser_prod, 8574); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label727;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___replace_child, LOCATE_parser_prod, 8584); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACallFormExpr____n_id(variable[4]) /*ACallFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label727;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___replace_child, LOCATE_parser_prod, 8594); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label727;
-    }
-    continue_728: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_728: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PAssignOp, ID_PAssignOp)) /*cast PAssignOp*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___replace_child, LOCATE_parser_prod, 8606); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label727;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___replace_child, LOCATE_parser_prod, 8616); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label727;
-  }
-  return_label727: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8625, LOCATE_parser_prod___ACallReassignExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[3]) /*ACallFormExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_730: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_730: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label729: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8644, LOCATE_parser_prod___ACallReassignExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACallFormExpr____n_id(variable[3]) /*ACallFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[4]) /*ACallFormExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_732: while(0);
-  }
-  break_732: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label731: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8533, LOCATE_parser_prod___ACallReassignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallReassignExpr].i]) return;
-  return_label733: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, val_t  param4, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8535, LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr};
-  val_t variable[11];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[5] =  param4;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallReassignExpr].i]) return;
-  variable[7] = variable[0];
-  ((parser_prod___ACallReassignExpr___empty_init_t)CALL(variable[7],COLOR_parser_prod___ACallReassignExpr___empty_init))(variable[7], init_table /*YYY*/) /*ACallReassignExpr::empty_init*/;
-  variable[7] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[7]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___ACallFormExpr____n_id(variable[7]) /*ACallFormExpr::_n_id*/ =  variable[2] /*n_id*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_id*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  variable[8] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ACallFormExpr____n_args(variable[7]) /*ACallFormExpr::_n_args*/ = variable[8];
-  variable[7] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[8] = ((array___ArrayIterator___is_ok_t)CALL(variable[7],COLOR_abstract_collection___Iterator___is_ok))(variable[7]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[8])) break; /*for*/
-    variable[8] = ((array___ArrayIterator___item_t)CALL(variable[7],COLOR_abstract_collection___Iterator___item))(variable[7]) /*ArrayIterator::item*/;
-    variable[9] = variable[8];
-    variable[10] = TAG_Bool(( variable[9] /*n*/==NIT_NULL) || VAL_ISA( variable[9] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[10])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr, LOCATE_parser_prod, 8554); nit_exit(1);}
-    variable[10] = variable[0];
-    variable[10] = ATTR_parser_nodes___ACallFormExpr____n_args(variable[10]) /*ACallFormExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[10],COLOR_abstract_collection___SimpleCollection___add))(variable[10],  variable[9] /*n*/) /*IndexedCollection::add*/;
-    variable[10] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[9] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[9] /*n*/, variable[10]) /*PNode::parent=*/;
-    continue_735: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[7],COLOR_abstract_collection___Iterator___next))(variable[7]) /*ArrayIterator::next*/;
-  }
-  break_735: while(0);
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[7]) /*AReassignFormExpr::_n_assign_op*/ =  variable[4] /*n_assign_op*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_assign_op*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_assign_op*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_assign_op*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_assign_op*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_assign_op*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_assign_op*/, variable[7]) /*PNode::parent=*/;
-  }
-  variable[7] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[7]) /*AReassignFormExpr::_n_value*/ =  variable[5] /*n_value*/;
-  variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[5] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[5] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[7])) { /*if*/
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n_value*/, variable[7]) /*PNode::parent=*/;
-  }
-  return_label734: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACallReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___n_qualified__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8668, LOCATE_parser_prod___ASuperExpr___n_qualified__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASuperExpr____n_qualified(variable[3]) /*ASuperExpr::_n_qualified*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label736: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___n_kwsuper__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8675, LOCATE_parser_prod___ASuperExpr___n_kwsuper__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[3]) /*ASuperExpr::_n_kwsuper*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label737: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8708, LOCATE_parser_prod___ASuperExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperExpr___replace_child, LOCATE_parser_prod, 8710); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperExpr____n_qualified(variable[4]) /*ASuperExpr::_n_qualified*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PQualified, ID_PQualified)) /*cast PQualified*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperExpr___replace_child, LOCATE_parser_prod, 8714); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperExpr____n_qualified(variable[4]) /*ASuperExpr::_n_qualified*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperExpr____n_qualified(variable[4]) /*ASuperExpr::_n_qualified*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label738;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[4]) /*ASuperExpr::_n_kwsuper*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwsuper, ID_TKwsuper)) /*cast TKwsuper*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperExpr___replace_child, LOCATE_parser_prod, 8724); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[4]) /*ASuperExpr::_n_kwsuper*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[4]) /*ASuperExpr::_n_kwsuper*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label738;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperExpr____n_args(variable[4]) /*ASuperExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ASuperExpr____n_args(variable[7]) /*ASuperExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperExpr___replace_child, LOCATE_parser_prod, 8734); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASuperExpr____n_args(variable[7]) /*ASuperExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASuperExpr____n_args(variable[7]) /*ASuperExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label738;
-    }
-    continue_739: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_739: while(0);
-  return_label738: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8745, LOCATE_parser_prod___ASuperExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperExpr____n_qualified(variable[3]) /*ASuperExpr::_n_qualified*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperExpr____n_qualified(variable[3]) /*ASuperExpr::_n_qualified*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[3]) /*ASuperExpr::_n_kwsuper*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[3]) /*ASuperExpr::_n_kwsuper*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperExpr____n_args(variable[3]) /*ASuperExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_741: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_741: while(0);
-  return_label740: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8758, LOCATE_parser_prod___ASuperExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperExpr____n_qualified(variable[3]) /*ASuperExpr::_n_qualified*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperExpr____n_qualified(variable[3]) /*ASuperExpr::_n_qualified*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[3]) /*ASuperExpr::_n_kwsuper*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[3]) /*ASuperExpr::_n_kwsuper*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperExpr____n_args(variable[4]) /*ASuperExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ASuperExpr____n_args(variable[4]) /*ASuperExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_743: while(0);
-  }
-  break_743: while(0);
-  return_label742: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8683, LOCATE_parser_prod___ASuperExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperExpr].i]) return;
-  return_label744: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperExpr___init_asuperexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8685, LOCATE_parser_prod___ASuperExpr___init_asuperexpr};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___ASuperExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___ASuperExpr___empty_init))(variable[5], init_table /*YYY*/) /*ASuperExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ASuperExpr____n_qualified(variable[5]) /*ASuperExpr::_n_qualified*/ =  variable[1] /*n_qualified*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_qualified*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_qualified*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_qualified*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_qualified*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_qualified*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_qualified*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_qualified*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_qualified*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ASuperExpr____n_kwsuper(variable[5]) /*ASuperExpr::_n_kwsuper*/ =  variable[2] /*n_kwsuper*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwsuper*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwsuper*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwsuper*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwsuper*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwsuper*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwsuper*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwsuper*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwsuper*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ASuperExpr____n_args(variable[5]) /*ASuperExpr::_n_args*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperExpr___init_asuperexpr, LOCATE_parser_prod, 8702); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___ASuperExpr____n_args(variable[8]) /*ASuperExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_746: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_746: while(0);
-  return_label745: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8776, LOCATE_parser_prod___AInitExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label747: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___n_kwinit__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8783, LOCATE_parser_prod___AInitExpr___n_kwinit__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AInitExpr____n_kwinit(variable[3]) /*AInitExpr::_n_kwinit*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label748: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8816, LOCATE_parser_prod___AInitExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInitExpr___replace_child, LOCATE_parser_prod, 8818); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInitExpr___replace_child, LOCATE_parser_prod, 8822); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label749;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AInitExpr____n_kwinit(variable[4]) /*AInitExpr::_n_kwinit*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInitExpr___replace_child, LOCATE_parser_prod, 8832); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AInitExpr____n_kwinit(variable[4]) /*AInitExpr::_n_kwinit*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AInitExpr____n_kwinit(variable[4]) /*AInitExpr::_n_kwinit*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label749;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AInitExpr____n_args(variable[4]) /*AInitExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AInitExpr____n_args(variable[7]) /*AInitExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInitExpr___replace_child, LOCATE_parser_prod, 8842); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AInitExpr____n_args(variable[7]) /*AInitExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AInitExpr____n_args(variable[7]) /*AInitExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label749;
-    }
-    continue_750: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_750: while(0);
-  return_label749: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8853, LOCATE_parser_prod___AInitExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInitExpr____n_kwinit(variable[3]) /*AInitExpr::_n_kwinit*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AInitExpr____n_kwinit(variable[3]) /*AInitExpr::_n_kwinit*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInitExpr____n_args(variable[3]) /*AInitExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_752: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_752: while(0);
-  return_label751: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8866, LOCATE_parser_prod___AInitExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AInitExpr____n_kwinit(variable[3]) /*AInitExpr::_n_kwinit*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AInitExpr____n_kwinit(variable[3]) /*AInitExpr::_n_kwinit*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AInitExpr____n_args(variable[4]) /*AInitExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AInitExpr____n_args(variable[4]) /*AInitExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_754: while(0);
-  }
-  break_754: while(0);
-  return_label753: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8791, LOCATE_parser_prod___AInitExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInitExpr].i]) return;
-  return_label755: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInitExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AInitExpr___init_ainitexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8793, LOCATE_parser_prod___AInitExpr___init_ainitexpr};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInitExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AInitExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AInitExpr___empty_init))(variable[5], init_table /*YYY*/) /*AInitExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[5]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AInitExpr____n_kwinit(variable[5]) /*AInitExpr::_n_kwinit*/ =  variable[2] /*n_kwinit*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwinit*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwinit*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwinit*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwinit*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwinit*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwinit*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwinit*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwinit*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___AInitExpr____n_args(variable[5]) /*AInitExpr::_n_args*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AInitExpr___init_ainitexpr, LOCATE_parser_prod, 8810); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___AInitExpr____n_args(variable[8]) /*AInitExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_757: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_757: while(0);
-  return_label756: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AInitExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8884, LOCATE_parser_prod___ABraExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label758: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 8919, LOCATE_parser_prod___ABraExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraExpr___replace_child, LOCATE_parser_prod, 8921); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraExpr___replace_child, LOCATE_parser_prod, 8925); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label759;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraExpr___replace_child, LOCATE_parser_prod, 8935); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label759;
-    }
-    continue_760: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_760: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[4]) /*ASendExpr::_n_closure_defs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[7]) /*ASendExpr::_n_closure_defs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PClosureDef, ID_PClosureDef)) /*cast PClosureDef*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraExpr___replace_child, LOCATE_parser_prod, 8947); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[7]) /*ASendExpr::_n_closure_defs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[7]) /*ASendExpr::_n_closure_defs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label759;
-    }
-    continue_761: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_761: while(0);
-  return_label759: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8958, LOCATE_parser_prod___ABraExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[3]) /*ABraFormExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_763: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_763: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[3]) /*ASendExpr::_n_closure_defs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_764: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_764: while(0);
-  return_label762: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8971, LOCATE_parser_prod___ABraExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_766: while(0);
-  }
-  break_766: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[4]) /*ASendExpr::_n_closure_defs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[4]) /*ASendExpr::_n_closure_defs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_767: while(0);
-  }
-  break_767: while(0);
-  return_label765: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8892, LOCATE_parser_prod___ABraExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraExpr].i]) return;
-  return_label768: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraExpr___init_abraexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 8894, LOCATE_parser_prod___ABraExpr___init_abraexpr};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___ABraExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___ABraExpr___empty_init))(variable[5], init_table /*YYY*/) /*ABraExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[5]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ABraFormExpr____n_args(variable[5]) /*ABraFormExpr::_n_args*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[2] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[2] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraExpr___init_abraexpr, LOCATE_parser_prod, 8907); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[8]) /*ABraFormExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_770: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_770: while(0);
-  variable[5] = variable[0];
-  variable[6] = NEW_List_list___List___init(); /*new List[PClosureDef]*/
-  ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[5]) /*ASendExpr::_n_closure_defs*/ = variable[6];
-  variable[5] = ((array___AbstractArray___iterator_t)CALL( variable[3] /*n_closure_defs*/,COLOR_abstract_collection___Collection___iterator))( variable[3] /*n_closure_defs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = TAG_Bool(( variable[7] /*n*/==NIT_NULL) || VAL_ISA( variable[7] /*n*/, COLOR_PClosureDef, ID_PClosureDef)) /*cast PClosureDef*/;
-    if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraExpr___init_abraexpr, LOCATE_parser_prod, 8913); nit_exit(1);}
-    variable[8] = variable[0];
-    variable[8] = ATTR_parser_nodes___ASendExpr____n_closure_defs(variable[8]) /*ASendExpr::_n_closure_defs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[8],COLOR_abstract_collection___SimpleCollection___add))(variable[8],  variable[7] /*n*/) /*IndexedCollection::add*/;
-    variable[8] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[7] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[7] /*n*/, variable[8]) /*PNode::parent=*/;
-    continue_771: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
-  }
-  break_771: while(0);
-  return_label769: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 8993, LOCATE_parser_prod___ABraAssignExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label772: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9000, LOCATE_parser_prod___ABraAssignExpr___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label773: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9007, LOCATE_parser_prod___ABraAssignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label774: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9045, LOCATE_parser_prod___ABraAssignExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraAssignExpr___replace_child, LOCATE_parser_prod, 9047); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraAssignExpr___replace_child, LOCATE_parser_prod, 9051); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label775;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraAssignExpr___replace_child, LOCATE_parser_prod, 9061); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label775;
-    }
-    continue_776: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_776: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraAssignExpr___replace_child, LOCATE_parser_prod, 9073); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label775;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraAssignExpr___replace_child, LOCATE_parser_prod, 9083); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label775;
-  }
-  return_label775: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9092, LOCATE_parser_prod___ABraAssignExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[3]) /*ABraFormExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_778: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_778: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label777: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9108, LOCATE_parser_prod___ABraAssignExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_780: while(0);
-  }
-  break_780: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label779: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9015, LOCATE_parser_prod___ABraAssignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraAssignExpr].i]) return;
-  return_label781: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___init_abraassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9017, LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraAssignExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___ABraAssignExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___ABraAssignExpr___empty_init))(variable[6], init_table /*YYY*/) /*ABraAssignExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[6]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  variable[7] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ABraFormExpr____n_args(variable[6]) /*ABraFormExpr::_n_args*/ = variable[7];
-  variable[6] = ((array___AbstractArray___iterator_t)CALL( variable[2] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[2] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = ((array___ArrayIterator___is_ok_t)CALL(variable[6],COLOR_abstract_collection___Iterator___is_ok))(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = ((array___ArrayIterator___item_t)CALL(variable[6],COLOR_abstract_collection___Iterator___item))(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*n*/==NIT_NULL) || VAL_ISA( variable[8] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr, LOCATE_parser_prod, 9031); nit_exit(1);}
-    variable[9] = variable[0];
-    variable[9] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[9]) /*ABraFormExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[9],COLOR_abstract_collection___SimpleCollection___add))(variable[9],  variable[8] /*n*/) /*IndexedCollection::add*/;
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n*/, variable[9]) /*PNode::parent=*/;
-    continue_783: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[6],COLOR_abstract_collection___Iterator___next))(variable[6]) /*ArrayIterator::next*/;
-  }
-  break_783: while(0);
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[6]) /*AAssignFormExpr::_n_assign*/ =  variable[3] /*n_assign*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_assign*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[6]) /*AAssignFormExpr::_n_value*/ =  variable[4] /*n_value*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_value*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label782: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9129, LOCATE_parser_prod___ABraReassignExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label784: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___n_assign_op__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9136, LOCATE_parser_prod___ABraReassignExpr___n_assign_op__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label785: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9143, LOCATE_parser_prod___ABraReassignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label786: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9181, LOCATE_parser_prod___ABraReassignExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraReassignExpr___replace_child, LOCATE_parser_prod, 9183); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraReassignExpr___replace_child, LOCATE_parser_prod, 9187); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASendExpr____n_expr(variable[4]) /*ASendExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label787;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraReassignExpr___replace_child, LOCATE_parser_prod, 9197); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[7]) /*ABraFormExpr::_n_args*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label787;
-    }
-    continue_788: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_788: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PAssignOp, ID_PAssignOp)) /*cast PAssignOp*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraReassignExpr___replace_child, LOCATE_parser_prod, 9209); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label787;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraReassignExpr___replace_child, LOCATE_parser_prod, 9219); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label787;
-  }
-  return_label787: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9228, LOCATE_parser_prod___ABraReassignExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[3]) /*ABraFormExpr::_n_args*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_790: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_790: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label789: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9244, LOCATE_parser_prod___ABraReassignExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASendExpr____n_expr(variable[3]) /*ASendExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[4]) /*ABraFormExpr::_n_args*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_792: while(0);
-  }
-  break_792: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label791: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9151, LOCATE_parser_prod___ABraReassignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraReassignExpr].i]) return;
-  return_label793: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9153, LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraReassignExpr].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___ABraReassignExpr___empty_init_t)CALL(variable[6],COLOR_parser_prod___ABraReassignExpr___empty_init))(variable[6], init_table /*YYY*/) /*ABraReassignExpr::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___ASendExpr____n_expr(variable[6]) /*ASendExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  variable[7] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ABraFormExpr____n_args(variable[6]) /*ABraFormExpr::_n_args*/ = variable[7];
-  variable[6] = ((array___AbstractArray___iterator_t)CALL( variable[2] /*n_args*/,COLOR_abstract_collection___Collection___iterator))( variable[2] /*n_args*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = ((array___ArrayIterator___is_ok_t)CALL(variable[6],COLOR_abstract_collection___Iterator___is_ok))(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = ((array___ArrayIterator___item_t)CALL(variable[6],COLOR_abstract_collection___Iterator___item))(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*n*/==NIT_NULL) || VAL_ISA( variable[8] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr, LOCATE_parser_prod, 9167); nit_exit(1);}
-    variable[9] = variable[0];
-    variable[9] = ATTR_parser_nodes___ABraFormExpr____n_args(variable[9]) /*ABraFormExpr::_n_args*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[9],COLOR_abstract_collection___SimpleCollection___add))(variable[9],  variable[8] /*n*/) /*IndexedCollection::add*/;
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n*/, variable[9]) /*PNode::parent=*/;
-    continue_795: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[6],COLOR_abstract_collection___Iterator___next))(variable[6]) /*ArrayIterator::next*/;
-  }
-  break_795: while(0);
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[6]) /*AReassignFormExpr::_n_assign_op*/ =  variable[3] /*n_assign_op*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_assign_op*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_assign_op*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_assign_op*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_assign_op*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_assign_op*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_assign_op*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[6]) /*AReassignFormExpr::_n_value*/ =  variable[4] /*n_value*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_value*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label794: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ABraReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9265, LOCATE_parser_prod___AVarExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label796: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9286, LOCATE_parser_prod___AVarExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarExpr___replace_child, LOCATE_parser_prod, 9288); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarExpr___replace_child, LOCATE_parser_prod, 9292); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label797;
-  }
-  return_label797: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9301, LOCATE_parser_prod___AVarExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label798: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9308, LOCATE_parser_prod___AVarExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label799: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9273, LOCATE_parser_prod___AVarExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarExpr].i]) return;
-  return_label800: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarExpr___init_avarexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9275, LOCATE_parser_prod___AVarExpr___init_avarexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AVarExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AVarExpr___empty_init))(variable[3], init_table /*YYY*/) /*AVarExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/ =  variable[1] /*n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label801: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9316, LOCATE_parser_prod___AVarAssignExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label802: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___n_assign__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9323, LOCATE_parser_prod___AVarAssignExpr___n_assign__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label803: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9330, LOCATE_parser_prod___AVarAssignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label804: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9361, LOCATE_parser_prod___AVarAssignExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarAssignExpr___replace_child, LOCATE_parser_prod, 9363); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarAssignExpr___replace_child, LOCATE_parser_prod, 9367); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label805;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarAssignExpr___replace_child, LOCATE_parser_prod, 9377); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[4]) /*AAssignFormExpr::_n_assign*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label805;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarAssignExpr___replace_child, LOCATE_parser_prod, 9387); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAssignFormExpr____n_value(variable[4]) /*AAssignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label805;
-  }
-  return_label805: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9396, LOCATE_parser_prod___AVarAssignExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label806: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9409, LOCATE_parser_prod___AVarAssignExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[3]) /*AAssignFormExpr::_n_assign*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(variable[3]) /*AAssignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label807: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9338, LOCATE_parser_prod___AVarAssignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarAssignExpr].i]) return;
-  return_label808: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___init_avarassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9340, LOCATE_parser_prod___AVarAssignExpr___init_avarassignexpr};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarAssignExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AVarAssignExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AVarAssignExpr___empty_init))(variable[5], init_table /*YYY*/) /*AVarAssignExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AVarFormExpr____n_id(variable[5]) /*AVarFormExpr::_n_id*/ =  variable[1] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(variable[5]) /*AAssignFormExpr::_n_assign*/ =  variable[2] /*n_assign*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_assign*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_assign*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_assign*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_assign*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_assign*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_assign*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_assign*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_assign*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAssignFormExpr____n_value(variable[5]) /*AAssignFormExpr::_n_value*/ =  variable[3] /*n_value*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_value*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label809: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarAssignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___n_id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9423, LOCATE_parser_prod___AVarReassignExpr___n_id__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label810: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___n_assign_op__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9430, LOCATE_parser_prod___AVarReassignExpr___n_assign_op__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label811: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___n_value__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9437, LOCATE_parser_prod___AVarReassignExpr___n_value__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label812: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9468, LOCATE_parser_prod___AVarReassignExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarReassignExpr___replace_child, LOCATE_parser_prod, 9470); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarReassignExpr___replace_child, LOCATE_parser_prod, 9474); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AVarFormExpr____n_id(variable[4]) /*AVarFormExpr::_n_id*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label813;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PAssignOp, ID_PAssignOp)) /*cast PAssignOp*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarReassignExpr___replace_child, LOCATE_parser_prod, 9484); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[4]) /*AReassignFormExpr::_n_assign_op*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label813;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AVarReassignExpr___replace_child, LOCATE_parser_prod, 9494); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AReassignFormExpr____n_value(variable[4]) /*AReassignFormExpr::_n_value*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label813;
-  }
-  return_label813: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9503, LOCATE_parser_prod___AVarReassignExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label814: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9516, LOCATE_parser_prod___AVarReassignExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AVarFormExpr____n_id(variable[3]) /*AVarFormExpr::_n_id*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[3]) /*AReassignFormExpr::_n_assign_op*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(variable[3]) /*AReassignFormExpr::_n_value*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label815: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9445, LOCATE_parser_prod___AVarReassignExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarReassignExpr].i]) return;
-  return_label816: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9447, LOCATE_parser_prod___AVarReassignExpr___init_avarreassignexpr};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarReassignExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AVarReassignExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AVarReassignExpr___empty_init))(variable[5], init_table /*YYY*/) /*AVarReassignExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AVarFormExpr____n_id(variable[5]) /*AVarFormExpr::_n_id*/ =  variable[1] /*n_id*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_id*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_id*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_id*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_id*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_id*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_id*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_id*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(variable[5]) /*AReassignFormExpr::_n_assign_op*/ =  variable[2] /*n_assign_op*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_assign_op*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_assign_op*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_assign_op*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_assign_op*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_assign_op*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_assign_op*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_assign_op*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AReassignFormExpr____n_value(variable[5]) /*AReassignFormExpr::_n_value*/ =  variable[3] /*n_value*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_value*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_value*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_value*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_value*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_value*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_value*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_value*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_value*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label817: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AVarReassignExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9530, LOCATE_parser_prod___ARangeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label818: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9537, LOCATE_parser_prod___ARangeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label819: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9563, LOCATE_parser_prod___ARangeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ARangeExpr___replace_child, LOCATE_parser_prod, 9565); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ARangeExpr___replace_child, LOCATE_parser_prod, 9569); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label820;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ARangeExpr___replace_child, LOCATE_parser_prod, 9579); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label820;
-  }
-  return_label820: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9588, LOCATE_parser_prod___ARangeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label821: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9598, LOCATE_parser_prod___ARangeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label822: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9545, LOCATE_parser_prod___ARangeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ARangeExpr].i]) return;
-  return_label823: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ARangeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ARangeExpr___init_arangeexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9547, LOCATE_parser_prod___ARangeExpr___init_arangeexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ARangeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ARangeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ARangeExpr___empty_init))(variable[4], init_table /*YYY*/) /*ARangeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label824: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ARangeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9609, LOCATE_parser_prod___ACrangeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label825: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9616, LOCATE_parser_prod___ACrangeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label826: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9642, LOCATE_parser_prod___ACrangeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACrangeExpr___replace_child, LOCATE_parser_prod, 9644); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACrangeExpr___replace_child, LOCATE_parser_prod, 9648); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label827;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACrangeExpr___replace_child, LOCATE_parser_prod, 9658); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label827;
-  }
-  return_label827: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9667, LOCATE_parser_prod___ACrangeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label828: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9677, LOCATE_parser_prod___ACrangeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label829: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9624, LOCATE_parser_prod___ACrangeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACrangeExpr].i]) return;
-  return_label830: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACrangeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___init_acrangeexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9626, LOCATE_parser_prod___ACrangeExpr___init_acrangeexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACrangeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___ACrangeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___ACrangeExpr___empty_init))(variable[4], init_table /*YYY*/) /*ACrangeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label831: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACrangeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9688, LOCATE_parser_prod___AOrangeExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label832: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___n_expr2__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9695, LOCATE_parser_prod___AOrangeExpr___n_expr2__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label833: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9721, LOCATE_parser_prod___AOrangeExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOrangeExpr___replace_child, LOCATE_parser_prod, 9723); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOrangeExpr___replace_child, LOCATE_parser_prod, 9727); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label834;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AOrangeExpr___replace_child, LOCATE_parser_prod, 9737); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label834;
-  }
-  return_label834: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9746, LOCATE_parser_prod___AOrangeExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label835: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9756, LOCATE_parser_prod___AOrangeExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr(variable[3]) /*ARangeExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(variable[3]) /*ARangeExpr::_n_expr2*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label836: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9703, LOCATE_parser_prod___AOrangeExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrangeExpr].i]) return;
-  return_label837: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrangeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___init_aorangeexpr(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9705, LOCATE_parser_prod___AOrangeExpr___init_aorangeexpr};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrangeExpr].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AOrangeExpr___empty_init_t)CALL(variable[4],COLOR_parser_prod___AOrangeExpr___empty_init))(variable[4], init_table /*YYY*/) /*AOrangeExpr::empty_init*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr(variable[4]) /*ARangeExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[4]) /*PNode::parent=*/;
-  }
-  variable[4] = variable[0];
-  ATTR_parser_nodes___ARangeExpr____n_expr2(variable[4]) /*ARangeExpr::_n_expr2*/ =  variable[2] /*n_expr2*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_expr2*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_expr2*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_expr2*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_expr2*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_expr2*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_expr2*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_expr2*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label838: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AOrangeExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AArrayExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9783, LOCATE_parser_prod___AArrayExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AArrayExpr___replace_child, LOCATE_parser_prod, 9785); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[4]) /*AArrayExpr::_n_exprs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[7]) /*AArrayExpr::_n_exprs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AArrayExpr___replace_child, LOCATE_parser_prod, 9789); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[7]) /*AArrayExpr::_n_exprs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[7]) /*AArrayExpr::_n_exprs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label839;
-    }
-    continue_840: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_840: while(0);
-  return_label839: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AArrayExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9800, LOCATE_parser_prod___AArrayExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[3]) /*AArrayExpr::_n_exprs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_842: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_842: while(0);
-  return_label841: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AArrayExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9807, LOCATE_parser_prod___AArrayExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[4]) /*AArrayExpr::_n_exprs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[4]) /*AArrayExpr::_n_exprs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_844: while(0);
-  }
-  break_844: while(0);
-  return_label843: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AArrayExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9768, LOCATE_parser_prod___AArrayExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AArrayExpr].i]) return;
-  return_label845: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AArrayExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AArrayExpr___init_aarrayexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9770, LOCATE_parser_prod___AArrayExpr___init_aarrayexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AArrayExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AArrayExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AArrayExpr___empty_init))(variable[3], init_table /*YYY*/) /*AArrayExpr::empty_init*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___AArrayExpr____n_exprs(variable[3]) /*AArrayExpr::_n_exprs*/ = variable[4];
-  variable[3] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_exprs*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_exprs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*n*/==NIT_NULL) || VAL_ISA( variable[5] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AArrayExpr___init_aarrayexpr, LOCATE_parser_prod, 9777); nit_exit(1);}
-    variable[6] = variable[0];
-    variable[6] = ATTR_parser_nodes___AArrayExpr____n_exprs(variable[6]) /*AArrayExpr::_n_exprs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[6],COLOR_abstract_collection___SimpleCollection___add))(variable[6],  variable[5] /*n*/) /*IndexedCollection::add*/;
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n*/, variable[6]) /*PNode::parent=*/;
-    continue_847: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_847: while(0);
-  return_label846: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AArrayExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASelfExpr___n_kwself__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9819, LOCATE_parser_prod___ASelfExpr___n_kwself__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASelfExpr____n_kwself(variable[3]) /*ASelfExpr::_n_kwself*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label848: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASelfExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9840, LOCATE_parser_prod___ASelfExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASelfExpr___replace_child, LOCATE_parser_prod, 9842); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASelfExpr____n_kwself(variable[4]) /*ASelfExpr::_n_kwself*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwself, ID_TKwself)) /*cast TKwself*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASelfExpr___replace_child, LOCATE_parser_prod, 9846); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASelfExpr____n_kwself(variable[4]) /*ASelfExpr::_n_kwself*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ASelfExpr____n_kwself(variable[4]) /*ASelfExpr::_n_kwself*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label849;
-  }
-  return_label849: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASelfExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9855, LOCATE_parser_prod___ASelfExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASelfExpr____n_kwself(variable[3]) /*ASelfExpr::_n_kwself*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASelfExpr____n_kwself(variable[3]) /*ASelfExpr::_n_kwself*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label850: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASelfExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9862, LOCATE_parser_prod___ASelfExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASelfExpr____n_kwself(variable[3]) /*ASelfExpr::_n_kwself*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ASelfExpr____n_kwself(variable[3]) /*ASelfExpr::_n_kwself*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label851: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASelfExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9827, LOCATE_parser_prod___ASelfExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASelfExpr].i]) return;
-  return_label852: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASelfExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASelfExpr___init_aselfexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9829, LOCATE_parser_prod___ASelfExpr___init_aselfexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASelfExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ASelfExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ASelfExpr___empty_init))(variable[3], init_table /*YYY*/) /*ASelfExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ASelfExpr____n_kwself(variable[3]) /*ASelfExpr::_n_kwself*/ =  variable[1] /*n_kwself*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwself*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwself*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwself*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwself*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwself*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwself*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwself*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwself*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label853: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASelfExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9878, LOCATE_parser_prod___AImplicitSelfExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AImplicitSelfExpr___replace_child, LOCATE_parser_prod, 9880); nit_exit(1);}
-  return_label854: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9883, LOCATE_parser_prod___AImplicitSelfExpr___visit_all};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  return_label855: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9887, LOCATE_parser_prod___AImplicitSelfExpr___visit_all_reverse};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  return_label856: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9871, LOCATE_parser_prod___AImplicitSelfExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i]) return;
-  return_label857: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9873, LOCATE_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i]) return;
-  variable[2] = variable[0];
-  ((parser_prod___AImplicitSelfExpr___empty_init_t)CALL(variable[2],COLOR_parser_prod___AImplicitSelfExpr___empty_init))(variable[2], init_table /*YYY*/) /*AImplicitSelfExpr::empty_init*/;
-  return_label858: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATrueExpr___n_kwtrue__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9892, LOCATE_parser_prod___ATrueExpr___n_kwtrue__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[3]) /*ATrueExpr::_n_kwtrue*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label859: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATrueExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9913, LOCATE_parser_prod___ATrueExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATrueExpr___replace_child, LOCATE_parser_prod, 9915); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[4]) /*ATrueExpr::_n_kwtrue*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwtrue, ID_TKwtrue)) /*cast TKwtrue*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ATrueExpr___replace_child, LOCATE_parser_prod, 9919); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[4]) /*ATrueExpr::_n_kwtrue*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[4]) /*ATrueExpr::_n_kwtrue*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label860;
-  }
-  return_label860: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATrueExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9928, LOCATE_parser_prod___ATrueExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[3]) /*ATrueExpr::_n_kwtrue*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[3]) /*ATrueExpr::_n_kwtrue*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label861: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATrueExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9935, LOCATE_parser_prod___ATrueExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[3]) /*ATrueExpr::_n_kwtrue*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[3]) /*ATrueExpr::_n_kwtrue*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label862: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATrueExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9900, LOCATE_parser_prod___ATrueExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATrueExpr].i]) return;
-  return_label863: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATrueExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ATrueExpr___init_atrueexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9902, LOCATE_parser_prod___ATrueExpr___init_atrueexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATrueExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ATrueExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ATrueExpr___empty_init))(variable[3], init_table /*YYY*/) /*ATrueExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ATrueExpr____n_kwtrue(variable[3]) /*ATrueExpr::_n_kwtrue*/ =  variable[1] /*n_kwtrue*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwtrue*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwtrue*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwtrue*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwtrue*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwtrue*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwtrue*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwtrue*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwtrue*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label864: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ATrueExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFalseExpr___n_kwfalse__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9943, LOCATE_parser_prod___AFalseExpr___n_kwfalse__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[3]) /*AFalseExpr::_n_kwfalse*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label865: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFalseExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 9964, LOCATE_parser_prod___AFalseExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFalseExpr___replace_child, LOCATE_parser_prod, 9966); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[4]) /*AFalseExpr::_n_kwfalse*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwfalse, ID_TKwfalse)) /*cast TKwfalse*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFalseExpr___replace_child, LOCATE_parser_prod, 9970); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[4]) /*AFalseExpr::_n_kwfalse*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[4]) /*AFalseExpr::_n_kwfalse*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label866;
-  }
-  return_label866: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFalseExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9979, LOCATE_parser_prod___AFalseExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[3]) /*AFalseExpr::_n_kwfalse*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[3]) /*AFalseExpr::_n_kwfalse*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label867: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFalseExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9986, LOCATE_parser_prod___AFalseExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[3]) /*AFalseExpr::_n_kwfalse*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[3]) /*AFalseExpr::_n_kwfalse*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label868: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFalseExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9951, LOCATE_parser_prod___AFalseExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFalseExpr].i]) return;
-  return_label869: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFalseExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFalseExpr___init_afalseexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 9953, LOCATE_parser_prod___AFalseExpr___init_afalseexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFalseExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AFalseExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AFalseExpr___empty_init))(variable[3], init_table /*YYY*/) /*AFalseExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AFalseExpr____n_kwfalse(variable[3]) /*AFalseExpr::_n_kwfalse*/ =  variable[1] /*n_kwfalse*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwfalse*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwfalse*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwfalse*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwfalse*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwfalse*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwfalse*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwfalse*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwfalse*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label870: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFalseExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANullExpr___n_kwnull__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 9994, LOCATE_parser_prod___ANullExpr___n_kwnull__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANullExpr____n_kwnull(variable[3]) /*ANullExpr::_n_kwnull*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label871: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANullExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10015, LOCATE_parser_prod___ANullExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANullExpr___replace_child, LOCATE_parser_prod, 10017); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ANullExpr____n_kwnull(variable[4]) /*ANullExpr::_n_kwnull*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ANullExpr___replace_child, LOCATE_parser_prod, 10021); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANullExpr____n_kwnull(variable[4]) /*ANullExpr::_n_kwnull*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ANullExpr____n_kwnull(variable[4]) /*ANullExpr::_n_kwnull*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label872;
-  }
-  return_label872: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANullExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10030, LOCATE_parser_prod___ANullExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANullExpr____n_kwnull(variable[3]) /*ANullExpr::_n_kwnull*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANullExpr____n_kwnull(variable[3]) /*ANullExpr::_n_kwnull*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label873: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANullExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10037, LOCATE_parser_prod___ANullExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ANullExpr____n_kwnull(variable[3]) /*ANullExpr::_n_kwnull*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ANullExpr____n_kwnull(variable[3]) /*ANullExpr::_n_kwnull*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label874: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANullExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10002, LOCATE_parser_prod___ANullExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANullExpr].i]) return;
-  return_label875: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANullExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ANullExpr___init_anullexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10004, LOCATE_parser_prod___ANullExpr___init_anullexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANullExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ANullExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ANullExpr___empty_init))(variable[3], init_table /*YYY*/) /*ANullExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ANullExpr____n_kwnull(variable[3]) /*ANullExpr::_n_kwnull*/ =  variable[1] /*n_kwnull*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwnull*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwnull*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwnull*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwnull*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwnull*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwnull*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwnull*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwnull*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label876: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ANullExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntExpr___n_number__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10045, LOCATE_parser_prod___AIntExpr___n_number__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIntExpr____n_number(variable[3]) /*AIntExpr::_n_number*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label877: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10066, LOCATE_parser_prod___AIntExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIntExpr___replace_child, LOCATE_parser_prod, 10068); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AIntExpr____n_number(variable[4]) /*AIntExpr::_n_number*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TNumber, ID_TNumber)) /*cast TNumber*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AIntExpr___replace_child, LOCATE_parser_prod, 10072); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIntExpr____n_number(variable[4]) /*AIntExpr::_n_number*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AIntExpr____n_number(variable[4]) /*AIntExpr::_n_number*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label878;
-  }
-  return_label878: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10081, LOCATE_parser_prod___AIntExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIntExpr____n_number(variable[3]) /*AIntExpr::_n_number*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIntExpr____n_number(variable[3]) /*AIntExpr::_n_number*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label879: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10088, LOCATE_parser_prod___AIntExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AIntExpr____n_number(variable[3]) /*AIntExpr::_n_number*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AIntExpr____n_number(variable[3]) /*AIntExpr::_n_number*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label880: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10053, LOCATE_parser_prod___AIntExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntExpr].i]) return;
-  return_label881: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AIntExpr___init_aintexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10055, LOCATE_parser_prod___AIntExpr___init_aintexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AIntExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AIntExpr___empty_init))(variable[3], init_table /*YYY*/) /*AIntExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AIntExpr____n_number(variable[3]) /*AIntExpr::_n_number*/ =  variable[1] /*n_number*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_number*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_number*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_number*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_number*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_number*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_number*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_number*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_number*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label882: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AIntExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFloatExpr___n_float__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10096, LOCATE_parser_prod___AFloatExpr___n_float__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AFloatExpr____n_float(variable[3]) /*AFloatExpr::_n_float*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label883: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFloatExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10117, LOCATE_parser_prod___AFloatExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFloatExpr___replace_child, LOCATE_parser_prod, 10119); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AFloatExpr____n_float(variable[4]) /*AFloatExpr::_n_float*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TFloat, ID_TFloat)) /*cast TFloat*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AFloatExpr___replace_child, LOCATE_parser_prod, 10123); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFloatExpr____n_float(variable[4]) /*AFloatExpr::_n_float*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AFloatExpr____n_float(variable[4]) /*AFloatExpr::_n_float*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label884;
-  }
-  return_label884: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFloatExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10132, LOCATE_parser_prod___AFloatExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFloatExpr____n_float(variable[3]) /*AFloatExpr::_n_float*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFloatExpr____n_float(variable[3]) /*AFloatExpr::_n_float*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label885: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFloatExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10139, LOCATE_parser_prod___AFloatExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AFloatExpr____n_float(variable[3]) /*AFloatExpr::_n_float*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AFloatExpr____n_float(variable[3]) /*AFloatExpr::_n_float*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label886: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFloatExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10104, LOCATE_parser_prod___AFloatExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFloatExpr].i]) return;
-  return_label887: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFloatExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AFloatExpr___init_afloatexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10106, LOCATE_parser_prod___AFloatExpr___init_afloatexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFloatExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AFloatExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AFloatExpr___empty_init))(variable[3], init_table /*YYY*/) /*AFloatExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AFloatExpr____n_float(variable[3]) /*AFloatExpr::_n_float*/ =  variable[1] /*n_float*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_float*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_float*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_float*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_float*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_float*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_float*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_float*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_float*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label888: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AFloatExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACharExpr___n_char__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10147, LOCATE_parser_prod___ACharExpr___n_char__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ACharExpr____n_char(variable[3]) /*ACharExpr::_n_char*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label889: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACharExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10168, LOCATE_parser_prod___ACharExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACharExpr___replace_child, LOCATE_parser_prod, 10170); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ACharExpr____n_char(variable[4]) /*ACharExpr::_n_char*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TChar, ID_TChar)) /*cast TChar*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ACharExpr___replace_child, LOCATE_parser_prod, 10174); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACharExpr____n_char(variable[4]) /*ACharExpr::_n_char*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___ACharExpr____n_char(variable[4]) /*ACharExpr::_n_char*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label890;
-  }
-  return_label890: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACharExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10183, LOCATE_parser_prod___ACharExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACharExpr____n_char(variable[3]) /*ACharExpr::_n_char*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACharExpr____n_char(variable[3]) /*ACharExpr::_n_char*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label891: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACharExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10190, LOCATE_parser_prod___ACharExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ACharExpr____n_char(variable[3]) /*ACharExpr::_n_char*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___ACharExpr____n_char(variable[3]) /*ACharExpr::_n_char*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label892: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACharExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10155, LOCATE_parser_prod___ACharExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACharExpr].i]) return;
-  return_label893: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACharExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ACharExpr___init_acharexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10157, LOCATE_parser_prod___ACharExpr___init_acharexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACharExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ACharExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ACharExpr___empty_init))(variable[3], init_table /*YYY*/) /*ACharExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___ACharExpr____n_char(variable[3]) /*ACharExpr::_n_char*/ =  variable[1] /*n_char*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_char*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_char*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_char*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_char*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_char*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_char*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_char*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_char*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label894: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ACharExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStringExpr___n_string__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10198, LOCATE_parser_prod___AStringExpr___n_string__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStringExpr____n_string(variable[3]) /*AStringExpr::_n_string*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label895: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStringExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10219, LOCATE_parser_prod___AStringExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStringExpr___replace_child, LOCATE_parser_prod, 10221); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AStringExpr____n_string(variable[4]) /*AStringExpr::_n_string*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TString, ID_TString)) /*cast TString*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStringExpr___replace_child, LOCATE_parser_prod, 10225); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStringExpr____n_string(variable[4]) /*AStringExpr::_n_string*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStringExpr____n_string(variable[4]) /*AStringExpr::_n_string*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label896;
-  }
-  return_label896: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStringExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10234, LOCATE_parser_prod___AStringExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStringExpr____n_string(variable[3]) /*AStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStringExpr____n_string(variable[3]) /*AStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label897: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStringExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10241, LOCATE_parser_prod___AStringExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStringExpr____n_string(variable[3]) /*AStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStringExpr____n_string(variable[3]) /*AStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label898: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStringExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10206, LOCATE_parser_prod___AStringExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStringExpr].i]) return;
-  return_label899: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStringExpr___init_astringexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10208, LOCATE_parser_prod___AStringExpr___init_astringexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStringExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AStringExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AStringExpr___empty_init))(variable[3], init_table /*YYY*/) /*AStringExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStringExpr____n_string(variable[3]) /*AStringExpr::_n_string*/ =  variable[1] /*n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_string*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_string*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_string*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_string*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_string*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_string*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label900: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___n_string__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10249, LOCATE_parser_prod___AStartStringExpr___n_string__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStartStringExpr____n_string(variable[3]) /*AStartStringExpr::_n_string*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label901: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10270, LOCATE_parser_prod___AStartStringExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStartStringExpr___replace_child, LOCATE_parser_prod, 10272); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AStartStringExpr____n_string(variable[4]) /*AStartStringExpr::_n_string*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TStartString, ID_TStartString)) /*cast TStartString*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AStartStringExpr___replace_child, LOCATE_parser_prod, 10276); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStartStringExpr____n_string(variable[4]) /*AStartStringExpr::_n_string*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AStartStringExpr____n_string(variable[4]) /*AStartStringExpr::_n_string*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label902;
-  }
-  return_label902: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10285, LOCATE_parser_prod___AStartStringExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStartStringExpr____n_string(variable[3]) /*AStartStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStartStringExpr____n_string(variable[3]) /*AStartStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label903: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10292, LOCATE_parser_prod___AStartStringExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AStartStringExpr____n_string(variable[3]) /*AStartStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AStartStringExpr____n_string(variable[3]) /*AStartStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label904: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10257, LOCATE_parser_prod___AStartStringExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStartStringExpr].i]) return;
-  return_label905: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStartStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___init_astartstringexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10259, LOCATE_parser_prod___AStartStringExpr___init_astartstringexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStartStringExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AStartStringExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AStartStringExpr___empty_init))(variable[3], init_table /*YYY*/) /*AStartStringExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AStartStringExpr____n_string(variable[3]) /*AStartStringExpr::_n_string*/ =  variable[1] /*n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_string*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_string*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_string*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_string*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_string*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_string*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label906: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AStartStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___n_string__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10300, LOCATE_parser_prod___AMidStringExpr___n_string__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMidStringExpr____n_string(variable[3]) /*AMidStringExpr::_n_string*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label907: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10321, LOCATE_parser_prod___AMidStringExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMidStringExpr___replace_child, LOCATE_parser_prod, 10323); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMidStringExpr____n_string(variable[4]) /*AMidStringExpr::_n_string*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TMidString, ID_TMidString)) /*cast TMidString*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMidStringExpr___replace_child, LOCATE_parser_prod, 10327); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMidStringExpr____n_string(variable[4]) /*AMidStringExpr::_n_string*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMidStringExpr____n_string(variable[4]) /*AMidStringExpr::_n_string*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label908;
-  }
-  return_label908: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10336, LOCATE_parser_prod___AMidStringExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMidStringExpr____n_string(variable[3]) /*AMidStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMidStringExpr____n_string(variable[3]) /*AMidStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label909: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10343, LOCATE_parser_prod___AMidStringExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMidStringExpr____n_string(variable[3]) /*AMidStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMidStringExpr____n_string(variable[3]) /*AMidStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label910: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10308, LOCATE_parser_prod___AMidStringExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMidStringExpr].i]) return;
-  return_label911: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMidStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___init_amidstringexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10310, LOCATE_parser_prod___AMidStringExpr___init_amidstringexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMidStringExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AMidStringExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AMidStringExpr___empty_init))(variable[3], init_table /*YYY*/) /*AMidStringExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMidStringExpr____n_string(variable[3]) /*AMidStringExpr::_n_string*/ =  variable[1] /*n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_string*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_string*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_string*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_string*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_string*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_string*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label912: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMidStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___n_string__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10351, LOCATE_parser_prod___AEndStringExpr___n_string__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AEndStringExpr____n_string(variable[3]) /*AEndStringExpr::_n_string*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label913: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10372, LOCATE_parser_prod___AEndStringExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEndStringExpr___replace_child, LOCATE_parser_prod, 10374); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AEndStringExpr____n_string(variable[4]) /*AEndStringExpr::_n_string*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TEndString, ID_TEndString)) /*cast TEndString*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AEndStringExpr___replace_child, LOCATE_parser_prod, 10378); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEndStringExpr____n_string(variable[4]) /*AEndStringExpr::_n_string*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AEndStringExpr____n_string(variable[4]) /*AEndStringExpr::_n_string*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label914;
-  }
-  return_label914: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10387, LOCATE_parser_prod___AEndStringExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEndStringExpr____n_string(variable[3]) /*AEndStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEndStringExpr____n_string(variable[3]) /*AEndStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label915: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10394, LOCATE_parser_prod___AEndStringExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AEndStringExpr____n_string(variable[3]) /*AEndStringExpr::_n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AEndStringExpr____n_string(variable[3]) /*AEndStringExpr::_n_string*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label916: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10359, LOCATE_parser_prod___AEndStringExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEndStringExpr].i]) return;
-  return_label917: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEndStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___init_aendstringexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10361, LOCATE_parser_prod___AEndStringExpr___init_aendstringexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEndStringExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AEndStringExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AEndStringExpr___empty_init))(variable[3], init_table /*YYY*/) /*AEndStringExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AEndStringExpr____n_string(variable[3]) /*AEndStringExpr::_n_string*/ =  variable[1] /*n_string*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_string*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_string*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_string*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_string*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_string*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_string*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_string*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label918: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AEndStringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10418, LOCATE_parser_prod___ASuperstringExpr___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperstringExpr___replace_child, LOCATE_parser_prod, 10420); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[4]) /*ASuperstringExpr::_n_exprs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[7]) /*ASuperstringExpr::_n_exprs*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperstringExpr___replace_child, LOCATE_parser_prod, 10424); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[7]) /*ASuperstringExpr::_n_exprs*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[7]) /*ASuperstringExpr::_n_exprs*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label919;
-    }
-    continue_920: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_920: while(0);
-  return_label919: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10435, LOCATE_parser_prod___ASuperstringExpr___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[3]) /*ASuperstringExpr::_n_exprs*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_922: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_922: while(0);
-  return_label921: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10442, LOCATE_parser_prod___ASuperstringExpr___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[4]) /*ASuperstringExpr::_n_exprs*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[4]) /*ASuperstringExpr::_n_exprs*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_924: while(0);
-  }
-  break_924: while(0);
-  return_label923: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10403, LOCATE_parser_prod___ASuperstringExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperstringExpr].i]) return;
-  return_label925: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperstringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10405, LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperstringExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ASuperstringExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___ASuperstringExpr___empty_init))(variable[3], init_table /*YYY*/) /*ASuperstringExpr::empty_init*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_List_list___List___init(); /*new List[PExpr]*/
-  ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[3]) /*ASuperstringExpr::_n_exprs*/ = variable[4];
-  variable[3] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_exprs*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_exprs*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*n*/==NIT_NULL) || VAL_ISA( variable[5] /*n*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr, LOCATE_parser_prod, 10412); nit_exit(1);}
-    variable[6] = variable[0];
-    variable[6] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(variable[6]) /*ASuperstringExpr::_n_exprs*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[6],COLOR_abstract_collection___SimpleCollection___add))(variable[6],  variable[5] /*n*/) /*IndexedCollection::add*/;
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n*/, variable[6]) /*PNode::parent=*/;
-    continue_927: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_927: while(0);
-  return_label926: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ASuperstringExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10454, LOCATE_parser_prod___AParExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label928: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10475, LOCATE_parser_prod___AParExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AParExpr___replace_child, LOCATE_parser_prod, 10477); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AParExpr___replace_child, LOCATE_parser_prod, 10481); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AProxyExpr____n_expr(variable[4]) /*AProxyExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label929;
-  }
-  return_label929: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10490, LOCATE_parser_prod___AParExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label930: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10497, LOCATE_parser_prod___AParExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label931: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10462, LOCATE_parser_prod___AParExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParExpr].i]) return;
-  return_label932: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AParExpr___init_aparexpr(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10464, LOCATE_parser_prod___AParExpr___init_aparexpr};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParExpr].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AParExpr___empty_init_t)CALL(variable[3],COLOR_parser_prod___AParExpr___empty_init))(variable[3], init_table /*YYY*/) /*AParExpr::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AProxyExpr____n_expr(variable[3]) /*AProxyExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label933: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AParExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10505, LOCATE_parser_prod___AAsCastExpr___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAsCastExpr____n_expr(variable[3]) /*AAsCastExpr::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label934: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___n_kwas__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10512, LOCATE_parser_prod___AAsCastExpr___n_kwas__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[3]) /*AAsCastExpr::_n_kwas*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label935: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___n_type__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10519, LOCATE_parser_prod___AAsCastExpr___n_type__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AAsCastExpr____n_type(variable[3]) /*AAsCastExpr::_n_type*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label936: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10550, LOCATE_parser_prod___AAsCastExpr___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAsCastExpr___replace_child, LOCATE_parser_prod, 10552); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAsCastExpr____n_expr(variable[4]) /*AAsCastExpr::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAsCastExpr___replace_child, LOCATE_parser_prod, 10556); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAsCastExpr____n_expr(variable[4]) /*AAsCastExpr::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAsCastExpr____n_expr(variable[4]) /*AAsCastExpr::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label937;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[4]) /*AAsCastExpr::_n_kwas*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAsCastExpr___replace_child, LOCATE_parser_prod, 10566); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[4]) /*AAsCastExpr::_n_kwas*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[4]) /*AAsCastExpr::_n_kwas*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label937;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AAsCastExpr____n_type(variable[4]) /*AAsCastExpr::_n_type*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PType, ID_PType)) /*cast PType*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AAsCastExpr___replace_child, LOCATE_parser_prod, 10576); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAsCastExpr____n_type(variable[4]) /*AAsCastExpr::_n_type*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AAsCastExpr____n_type(variable[4]) /*AAsCastExpr::_n_type*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label937;
-  }
-  return_label937: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10585, LOCATE_parser_prod___AAsCastExpr___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAsCastExpr____n_expr(variable[3]) /*AAsCastExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAsCastExpr____n_expr(variable[3]) /*AAsCastExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[3]) /*AAsCastExpr::_n_kwas*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[3]) /*AAsCastExpr::_n_kwas*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAsCastExpr____n_type(variable[3]) /*AAsCastExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAsCastExpr____n_type(variable[3]) /*AAsCastExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label938: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10598, LOCATE_parser_prod___AAsCastExpr___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAsCastExpr____n_expr(variable[3]) /*AAsCastExpr::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAsCastExpr____n_expr(variable[3]) /*AAsCastExpr::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[3]) /*AAsCastExpr::_n_kwas*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[3]) /*AAsCastExpr::_n_kwas*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AAsCastExpr____n_type(variable[3]) /*AAsCastExpr::_n_type*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AAsCastExpr____n_type(variable[3]) /*AAsCastExpr::_n_type*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label939: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10527, LOCATE_parser_prod___AAsCastExpr___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAsCastExpr].i]) return;
-  return_label940: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAsCastExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___init_aascastexpr(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10529, LOCATE_parser_prod___AAsCastExpr___init_aascastexpr};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAsCastExpr].i]) return;
-  variable[5] = variable[0];
-  ((parser_prod___AAsCastExpr___empty_init_t)CALL(variable[5],COLOR_parser_prod___AAsCastExpr___empty_init))(variable[5], init_table /*YYY*/) /*AAsCastExpr::empty_init*/;
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAsCastExpr____n_expr(variable[5]) /*AAsCastExpr::_n_expr*/ =  variable[1] /*n_expr*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_expr*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAsCastExpr____n_kwas(variable[5]) /*AAsCastExpr::_n_kwas*/ =  variable[2] /*n_kwas*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_kwas*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_kwas*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwas*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_kwas*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_kwas*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_kwas*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_kwas*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_kwas*/, variable[5]) /*PNode::parent=*/;
-  }
-  variable[5] = variable[0];
-  ATTR_parser_nodes___AAsCastExpr____n_type(variable[5]) /*AAsCastExpr::_n_type*/ =  variable[3] /*n_type*/;
-  variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_type*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_type*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_type*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_type*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_type*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_type*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_type*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_type*/, variable[5]) /*PNode::parent=*/;
-  }
-  return_label941: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AAsCastExpr].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___n_pluseq__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10612, LOCATE_parser_prod___APlusAssignOp___n_pluseq__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[3]) /*APlusAssignOp::_n_pluseq*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label942: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10633, LOCATE_parser_prod___APlusAssignOp___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusAssignOp___replace_child, LOCATE_parser_prod, 10635); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[4]) /*APlusAssignOp::_n_pluseq*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TPluseq, ID_TPluseq)) /*cast TPluseq*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___APlusAssignOp___replace_child, LOCATE_parser_prod, 10639); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[4]) /*APlusAssignOp::_n_pluseq*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[4]) /*APlusAssignOp::_n_pluseq*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label943;
-  }
-  return_label943: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10648, LOCATE_parser_prod___APlusAssignOp___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[3]) /*APlusAssignOp::_n_pluseq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[3]) /*APlusAssignOp::_n_pluseq*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label944: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10655, LOCATE_parser_prod___APlusAssignOp___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[3]) /*APlusAssignOp::_n_pluseq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[3]) /*APlusAssignOp::_n_pluseq*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label945: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10620, LOCATE_parser_prod___APlusAssignOp___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusAssignOp].i]) return;
-  return_label946: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusAssignOp].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___init_aplusassignop(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10622, LOCATE_parser_prod___APlusAssignOp___init_aplusassignop};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusAssignOp].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___APlusAssignOp___empty_init_t)CALL(variable[3],COLOR_parser_prod___APlusAssignOp___empty_init))(variable[3], init_table /*YYY*/) /*APlusAssignOp::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___APlusAssignOp____n_pluseq(variable[3]) /*APlusAssignOp::_n_pluseq*/ =  variable[1] /*n_pluseq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_pluseq*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_pluseq*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_pluseq*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_pluseq*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_pluseq*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_pluseq*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_pluseq*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_pluseq*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label947: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_APlusAssignOp].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___n_minuseq__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10663, LOCATE_parser_prod___AMinusAssignOp___n_minuseq__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[3]) /*AMinusAssignOp::_n_minuseq*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label948: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10684, LOCATE_parser_prod___AMinusAssignOp___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusAssignOp___replace_child, LOCATE_parser_prod, 10686); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[4]) /*AMinusAssignOp::_n_minuseq*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TMinuseq, ID_TMinuseq)) /*cast TMinuseq*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AMinusAssignOp___replace_child, LOCATE_parser_prod, 10690); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[4]) /*AMinusAssignOp::_n_minuseq*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[4]) /*AMinusAssignOp::_n_minuseq*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label949;
-  }
-  return_label949: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10699, LOCATE_parser_prod___AMinusAssignOp___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[3]) /*AMinusAssignOp::_n_minuseq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[3]) /*AMinusAssignOp::_n_minuseq*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label950: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10706, LOCATE_parser_prod___AMinusAssignOp___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[3]) /*AMinusAssignOp::_n_minuseq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[3]) /*AMinusAssignOp::_n_minuseq*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label951: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10671, LOCATE_parser_prod___AMinusAssignOp___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusAssignOp].i]) return;
-  return_label952: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusAssignOp].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___init_aminusassignop(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10673, LOCATE_parser_prod___AMinusAssignOp___init_aminusassignop};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusAssignOp].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___AMinusAssignOp___empty_init_t)CALL(variable[3],COLOR_parser_prod___AMinusAssignOp___empty_init))(variable[3], init_table /*YYY*/) /*AMinusAssignOp::empty_init*/;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(variable[3]) /*AMinusAssignOp::_n_minuseq*/ =  variable[1] /*n_minuseq*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_minuseq*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_minuseq*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_minuseq*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_minuseq*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_minuseq*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_minuseq*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_minuseq*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_minuseq*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label953: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AMinusAssignOp].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_kwwith__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10714, LOCATE_parser_prod___AClosureDef___n_kwwith__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDef____n_kwwith(variable[3]) /*AClosureDef::_n_kwwith*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label954: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_kwdo__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10721, LOCATE_parser_prod___AClosureDef___n_kwdo__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDef____n_kwdo(variable[3]) /*AClosureDef::_n_kwdo*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label955: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_expr__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10728, LOCATE_parser_prod___AClosureDef___n_expr__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AClosureDef____n_expr(variable[3]) /*AClosureDef::_n_expr*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label956: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10766, LOCATE_parser_prod___AClosureDef___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDef___replace_child, LOCATE_parser_prod, 10768); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDef____n_kwwith(variable[4]) /*AClosureDef::_n_kwwith*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwwith, ID_TKwwith)) /*cast TKwwith*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDef___replace_child, LOCATE_parser_prod, 10772); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDef____n_kwwith(variable[4]) /*AClosureDef::_n_kwwith*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDef____n_kwwith(variable[4]) /*AClosureDef::_n_kwwith*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label957;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDef____n_id(variable[4]) /*AClosureDef::_n_id*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AClosureDef____n_id(variable[7]) /*AClosureDef::_n_id*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDef___replace_child, LOCATE_parser_prod, 10782); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClosureDef____n_id(variable[7]) /*AClosureDef::_n_id*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AClosureDef____n_id(variable[7]) /*AClosureDef::_n_id*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label957;
-    }
-    continue_958: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_958: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDef____n_kwdo(variable[4]) /*AClosureDef::_n_kwdo*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDef___replace_child, LOCATE_parser_prod, 10794); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDef____n_kwdo(variable[4]) /*AClosureDef::_n_kwdo*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDef____n_kwdo(variable[4]) /*AClosureDef::_n_kwdo*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label957;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDef____n_expr(variable[4]) /*AClosureDef::_n_expr*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PExpr, ID_PExpr)) /*cast PExpr*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDef___replace_child, LOCATE_parser_prod, 10804); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDef____n_expr(variable[4]) /*AClosureDef::_n_expr*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AClosureDef____n_expr(variable[4]) /*AClosureDef::_n_expr*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label957;
-  }
-  return_label957: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10813, LOCATE_parser_prod___AClosureDef___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_kwwith(variable[3]) /*AClosureDef::_n_kwwith*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDef____n_kwwith(variable[3]) /*AClosureDef::_n_kwwith*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_id(variable[3]) /*AClosureDef::_n_id*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_960: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_960: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_kwdo(variable[3]) /*AClosureDef::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDef____n_kwdo(variable[3]) /*AClosureDef::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_expr(variable[3]) /*AClosureDef::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDef____n_expr(variable[3]) /*AClosureDef::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label959: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10829, LOCATE_parser_prod___AClosureDef___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_kwwith(variable[3]) /*AClosureDef::_n_kwwith*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDef____n_kwwith(variable[3]) /*AClosureDef::_n_kwwith*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AClosureDef____n_id(variable[4]) /*AClosureDef::_n_id*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AClosureDef____n_id(variable[4]) /*AClosureDef::_n_id*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_962: while(0);
-  }
-  break_962: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_kwdo(variable[3]) /*AClosureDef::_n_kwdo*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDef____n_kwdo(variable[3]) /*AClosureDef::_n_kwdo*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AClosureDef____n_expr(variable[3]) /*AClosureDef::_n_expr*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AClosureDef____n_expr(variable[3]) /*AClosureDef::_n_expr*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label961: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10736, LOCATE_parser_prod___AClosureDef___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDef].i]) return;
-  return_label963: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AClosureDef___init_aclosuredef(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10738, LOCATE_parser_prod___AClosureDef___init_aclosuredef};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDef].i]) return;
-  variable[6] = variable[0];
-  ((parser_prod___AClosureDef___empty_init_t)CALL(variable[6],COLOR_parser_prod___AClosureDef___empty_init))(variable[6], init_table /*YYY*/) /*AClosureDef::empty_init*/;
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDef____n_kwwith(variable[6]) /*AClosureDef::_n_kwwith*/ =  variable[1] /*n_kwwith*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n_kwwith*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n_kwwith*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwwith*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n_kwwith*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n_kwwith*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n_kwwith*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n_kwwith*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n_kwwith*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  variable[7] = NEW_List_list___List___init(); /*new List[TId]*/
-  ATTR_parser_nodes___AClosureDef____n_id(variable[6]) /*AClosureDef::_n_id*/ = variable[7];
-  variable[6] = ((array___AbstractArray___iterator_t)CALL( variable[2] /*n_id*/,COLOR_abstract_collection___Collection___iterator))( variable[2] /*n_id*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = ((array___ArrayIterator___is_ok_t)CALL(variable[6],COLOR_abstract_collection___Iterator___is_ok))(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = ((array___ArrayIterator___item_t)CALL(variable[6],COLOR_abstract_collection___Iterator___item))(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*n*/==NIT_NULL) || VAL_ISA( variable[8] /*n*/, COLOR_TId, ID_TId)) /*cast TId*/;
-    if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AClosureDef___init_aclosuredef, LOCATE_parser_prod, 10752); nit_exit(1);}
-    variable[9] = variable[0];
-    variable[9] = ATTR_parser_nodes___AClosureDef____n_id(variable[9]) /*AClosureDef::_n_id*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[9],COLOR_abstract_collection___SimpleCollection___add))(variable[9],  variable[8] /*n*/) /*IndexedCollection::add*/;
-    variable[9] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[8] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[8] /*n*/, variable[9]) /*PNode::parent=*/;
-    continue_965: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[6],COLOR_abstract_collection___Iterator___next))(variable[6]) /*ArrayIterator::next*/;
-  }
-  break_965: while(0);
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDef____n_kwdo(variable[6]) /*AClosureDef::_n_kwdo*/ =  variable[3] /*n_kwdo*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[3] /*n_kwdo*/ ==  NIT_NULL /*null*/) || (( variable[3] /*n_kwdo*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*n_kwdo*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[3] /*n_kwdo*/,COLOR_kernel___Object_____eqeq))( variable[3] /*n_kwdo*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[3] /*n_kwdo*/,COLOR_parser_prod___PNode___parent__eq))( variable[3] /*n_kwdo*/, variable[6]) /*PNode::parent=*/;
-  }
-  variable[6] = variable[0];
-  ATTR_parser_nodes___AClosureDef____n_expr(variable[6]) /*AClosureDef::_n_expr*/ =  variable[4] /*n_expr*/;
-  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*n_expr*/ ==  NIT_NULL /*null*/) || (( variable[4] /*n_expr*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[4] /*n_expr*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*n_expr*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[4] /*n_expr*/,COLOR_kernel___Object_____eqeq))( variable[4] /*n_expr*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[4] /*n_expr*/,COLOR_parser_prod___PNode___parent__eq))( variable[4] /*n_expr*/, variable[6]) /*PNode::parent=*/;
-  }
-  return_label964: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AClosureDef].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AQualified___n_classid__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10850, LOCATE_parser_prod___AQualified___n_classid__eq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  ATTR_parser_nodes___AQualified____n_classid(variable[3]) /*AQualified::_n_classid*/ =  variable[1] /*n*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*n*/ ==  NIT_NULL /*null*/) || (( variable[1] /*n*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*n*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*n*/,COLOR_kernel___Object_____eqeq))( variable[1] /*n*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*n*/, variable[3]) /*PNode::parent=*/;
-  }
-  return_label966: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AQualified___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10878, LOCATE_parser_prod___AQualified___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AQualified___replace_child, LOCATE_parser_prod, 10880); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AQualified____n_id(variable[4]) /*AQualified::_n_id*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AQualified____n_id(variable[7]) /*AQualified::_n_id*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TId, ID_TId)) /*cast TId*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AQualified___replace_child, LOCATE_parser_prod, 10884); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AQualified____n_id(variable[7]) /*AQualified::_n_id*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___AQualified____n_id(variable[7]) /*AQualified::_n_id*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label967;
-    }
-    continue_968: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_968: while(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AQualified____n_classid(variable[4]) /*AQualified::_n_classid*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AQualified___replace_child, LOCATE_parser_prod, 10896); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AQualified____n_classid(variable[4]) /*AQualified::_n_classid*/ =  variable[2] /*new_child*/;
-    } else { /*if*/
-      variable[4] = variable[0];
-      ATTR_parser_nodes___AQualified____n_classid(variable[4]) /*AQualified::_n_classid*/ =  NIT_NULL /*null*/;
-    }
-    goto return_label967;
-  }
-  return_label967: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AQualified___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10905, LOCATE_parser_prod___AQualified___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AQualified____n_id(variable[3]) /*AQualified::_n_id*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_970: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_970: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AQualified____n_classid(variable[3]) /*AQualified::_n_classid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AQualified____n_classid(variable[3]) /*AQualified::_n_classid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label969: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AQualified___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10915, LOCATE_parser_prod___AQualified___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___AQualified____n_id(variable[4]) /*AQualified::_n_id*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___AQualified____n_id(variable[4]) /*AQualified::_n_id*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_972: while(0);
-  }
-  break_972: while(0);
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___AQualified____n_classid(variable[3]) /*AQualified::_n_classid*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___AQualified____n_classid(variable[3]) /*AQualified::_n_classid*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label971: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AQualified___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10858, LOCATE_parser_prod___AQualified___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AQualified].i]) return;
-  return_label973: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AQualified].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___AQualified___init_aqualified(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10860, LOCATE_parser_prod___AQualified___init_aqualified};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AQualified].i]) return;
-  variable[4] = variable[0];
-  ((parser_prod___AQualified___empty_init_t)CALL(variable[4],COLOR_parser_prod___AQualified___empty_init))(variable[4], init_table /*YYY*/) /*AQualified::empty_init*/;
-  variable[4] = variable[0];
-  variable[5] = NEW_List_list___List___init(); /*new List[TId]*/
-  ATTR_parser_nodes___AQualified____n_id(variable[4]) /*AQualified::_n_id*/ = variable[5];
-  variable[4] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_id*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_id*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((array___ArrayIterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((array___ArrayIterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*ArrayIterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = TAG_Bool(( variable[6] /*n*/==NIT_NULL) || VAL_ISA( variable[6] /*n*/, COLOR_TId, ID_TId)) /*cast TId*/;
-    if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___AQualified___init_aqualified, LOCATE_parser_prod, 10868); nit_exit(1);}
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___AQualified____n_id(variable[7]) /*AQualified::_n_id*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[7],COLOR_abstract_collection___SimpleCollection___add))(variable[7],  variable[6] /*n*/) /*IndexedCollection::add*/;
-    variable[7] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[6] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[6] /*n*/, variable[7]) /*PNode::parent=*/;
-    continue_975: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*ArrayIterator::next*/;
-  }
-  break_975: while(0);
-  variable[4] = variable[0];
-  ATTR_parser_nodes___AQualified____n_classid(variable[4]) /*AQualified::_n_classid*/ =  variable[2] /*n_classid*/;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*n_classid*/ ==  NIT_NULL /*null*/) || (( variable[2] /*n_classid*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*n_classid*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*n_classid*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*n_classid*/,COLOR_kernel___Object_____eqeq))( variable[2] /*n_classid*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*n_classid*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*n_classid*/, variable[4]) /*PNode::parent=*/;
-  }
-  return_label974: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_AQualified].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoc___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10946, LOCATE_parser_prod___ADoc___replace_child};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADoc___replace_child, LOCATE_parser_prod, 10948); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ADoc____n_comment(variable[4]) /*ADoc::_n_comment*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[5] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[4]); /*new Range[Int]*/
-  variable[4] = variable[5];
-  variable[4] = ((range___Range___iterator_t)CALL(variable[4],COLOR_abstract_collection___Collection___iterator))(variable[4]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[5] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[4],COLOR_abstract_collection___Iterator___is_ok))(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = ((abstract_collection___Iterator___item_t)CALL(variable[4],COLOR_abstract_collection___Iterator___item))(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[7] = ATTR_parser_nodes___ADoc____n_comment(variable[7]) /*ADoc::_n_comment*/;
-    variable[7] = ((list___List_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[6] /*i*/) /*List::[]*/;
-    variable[7] = TAG_Bool((variable[7] ==  variable[1] /*old_child*/) || ((variable[7] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[7],COLOR_kernel___Object_____eqeq))(variable[7],  variable[1] /*old_child*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-      if (UNTAG_Bool(variable[7])) { /*if*/
-        variable[7] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_TComment, ID_TComment)) /*cast TComment*/;
-        if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADoc___replace_child, LOCATE_parser_prod, 10952); nit_exit(1);}
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ADoc____n_comment(variable[7]) /*ADoc::_n_comment*/;
-        ((list___List_____braeq_t)CALL(variable[7],COLOR_abstract_collection___Map_____braeq))(variable[7],  variable[6] /*i*/,  variable[2] /*new_child*/) /*List::[]=*/;
-        variable[7] = variable[0];
-        ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[7]) /*PNode::parent=*/;
-      } else { /*if*/
-        variable[7] = variable[0];
-        variable[7] = ATTR_parser_nodes___ADoc____n_comment(variable[7]) /*ADoc::_n_comment*/;
-        ((list___List___remove_at_t)CALL(variable[7],COLOR_abstract_collection___Map___remove_at))(variable[7],  variable[6] /*i*/) /*List::remove_at*/;
-      }
-      goto return_label976;
-    }
-    continue_977: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable[4],COLOR_abstract_collection___Iterator___next))(variable[4]) /*Iterator::next*/;
-  }
-  break_977: while(0);
-  return_label976: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoc___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10963, LOCATE_parser_prod___ADoc___visit_all};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___ADoc____n_comment(variable[3]) /*ADoc::_n_comment*/;
-  variable[3] = ((list___List___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*List::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((list___ListIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ListIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((list___ListIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ListIterator::item*/;
-    variable[5] = variable[4];
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/,  variable[5] /*n*/) /*Visitor::visit*/;
-    continue_979: while(0);
-    ((list___ListIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ListIterator::next*/;
-  }
-  break_979: while(0);
-  return_label978: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoc___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 10970, LOCATE_parser_prod___ADoc___visit_all_reverse};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___ADoc____n_comment(variable[4]) /*ADoc::_n_comment*/;
-  variable[4] = ((list___List___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*List::length*/;
-  variable[3] = variable[4];
-  while (true) { /*while*/
-    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[4])) break; /* while*/
-    variable[4] = variable[0];
-    variable[4] = ATTR_parser_nodes___ADoc____n_comment(variable[4]) /*ADoc::_n_comment*/;
-    variable[4] = ((list___List_____bra_t)CALL(variable[4],COLOR_abstract_collection___Map_____bra))(variable[4],  variable[3] /*i*/) /*List::[]*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[4]) /*Visitor::visit*/;
-    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable[3] = variable[4] /*i=*/;
-    continue_981: while(0);
-  }
-  break_981: while(0);
-  return_label980: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoc___empty_init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10931, LOCATE_parser_prod___ADoc___empty_init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoc].i]) return;
-  return_label982: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoc].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___ADoc___init_adoc(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10933, LOCATE_parser_prod___ADoc___init_adoc};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoc].i]) return;
-  variable[3] = variable[0];
-  ((parser_prod___ADoc___empty_init_t)CALL(variable[3],COLOR_parser_prod___ADoc___empty_init))(variable[3], init_table /*YYY*/) /*ADoc::empty_init*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_List_list___List___init(); /*new List[TComment]*/
-  ATTR_parser_nodes___ADoc____n_comment(variable[3]) /*ADoc::_n_comment*/ = variable[4];
-  variable[3] = ((array___AbstractArray___iterator_t)CALL( variable[1] /*n_comment*/,COLOR_abstract_collection___Collection___iterator))( variable[1] /*n_comment*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*n*/==NIT_NULL) || VAL_ISA( variable[5] /*n*/, COLOR_TComment, ID_TComment)) /*cast TComment*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___ADoc___init_adoc, LOCATE_parser_prod, 10940); nit_exit(1);}
-    variable[6] = variable[0];
-    variable[6] = ATTR_parser_nodes___ADoc____n_comment(variable[6]) /*ADoc::_n_comment*/;
-    ((abstract_collection___IndexedCollection___add_t)CALL(variable[6],COLOR_abstract_collection___SimpleCollection___add))(variable[6],  variable[5] /*n*/) /*IndexedCollection::add*/;
-    variable[6] = variable[0];
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[5] /*n*/,COLOR_parser_prod___PNode___parent__eq))( variable[5] /*n*/, variable[6]) /*PNode::parent=*/;
-    continue_984: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_984: while(0);
-  return_label983: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_ADoc].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Start___replace_child(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 10991, LOCATE_parser_prod___Start___replace_child};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*old_child*/ ==  NIT_NULL /*null*/) || (( variable[1] /*old_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*old_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[1] /*old_child*/,COLOR_kernel___Object_____eqeq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___Start___replace_child, LOCATE_parser_prod, 10993); nit_exit(1);}
-  variable[4] = variable[0];
-  variable[4] = ATTR_parser_nodes___Start____n_base(variable[4]) /*Start::_n_base*/;
-  variable[4] = TAG_Bool((variable[4] ==  variable[1] /*old_child*/) || ((variable[4] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*old_child*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[4],COLOR_kernel___Object_____eqeq))(variable[4],  variable[1] /*old_child*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = TAG_Bool(( variable[2] /*new_child*/ ==  NIT_NULL /*null*/) || (( variable[2] /*new_child*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*new_child*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[2] /*new_child*/,COLOR_kernel___Object_____eqeq))( variable[2] /*new_child*/,  NIT_NULL /*null*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[4])) { /*if*/
-    } else { /*if*/
-      variable[4] = variable[0];
-      ((parser_prod___PNode___parent__eq_t)CALL( variable[2] /*new_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[2] /*new_child*/, variable[4]) /*PNode::parent=*/;
-      variable[4] = TAG_Bool(( variable[2] /*new_child*/==NIT_NULL) || VAL_ISA( variable[2] /*new_child*/, COLOR_PModule, ID_PModule)) /*cast PModule*/;
-      if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_parser_prod___Start___replace_child, LOCATE_parser_prod, 10998); nit_exit(1);}
-      variable[4] = variable[0];
-      ATTR_parser_nodes___Start____n_base(variable[4]) /*Start::_n_base*/ =  variable[2] /*new_child*/;
-    }
-    ((parser_prod___PNode___parent__eq_t)CALL( variable[1] /*old_child*/,COLOR_parser_prod___PNode___parent__eq))( variable[1] /*old_child*/,  NIT_NULL /*null*/) /*PNode::parent=*/;
-    goto return_label985;
-  }
-  return_label985: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Start___visit_all(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 11006, LOCATE_parser_prod___Start___visit_all};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___Start____n_base(variable[3]) /*Start::_n_base*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___Start____n_base(variable[3]) /*Start::_n_base*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label986: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Start___visit_all_reverse(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 11013, LOCATE_parser_prod___Start___visit_all_reverse};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_parser_nodes___Start____n_base(variable[3]) /*Start::_n_base*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[3],COLOR_kernel___Object_____eqeq))(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = variable[0];
-    variable[3] = ATTR_parser_nodes___Start____n_base(variable[3]) /*Start::_n_base*/;
-    ((parser_prod___Visitor___visit_t)CALL( variable[1] /*v*/,COLOR_parser_prod___Visitor___visit))( variable[1] /*v*/, variable[3]) /*Visitor::visit*/;
-  }
-  return_label987: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void parser_prod___Start___init(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 10983, LOCATE_parser_prod___Start___init};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_parser_prod;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_Start].i]) return;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___Start____n_base(variable[4]) /*Start::_n_base*/ =  variable[1] /*n_base*/;
-  variable[4] = variable[0];
-  ATTR_parser_nodes___Start____n_eof(variable[4]) /*Start::_n_eof*/ =  variable[2] /*n_eof*/;
-  return_label988: while(false);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_Start].i] = 1;
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Visitor___enter_visit(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 59;
+  fra.me.meth = LOCATE_parser_prod___Visitor___enter_visit;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:65 */
+  ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:66 */
+  CALL_parser_prod___Visitor___visit(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:67 */
+  ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[2];
+  stack_frame_head = fra.me.prev;
+  return;
+}
+val_t parser_prod___Visitor___current_node(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 70;
+  fra.me.meth = LOCATE_parser_prod___Visitor___current_node;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[0] = ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:70 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+void parser_prod___Visitor___init(val_t p0, int* init_table){
+  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Visitor].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos0]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_parser_prod___Visitor___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos0] = 1;
+  return;
+}
+void parser_prod___AModule___n_packagedecl__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 75;
+  fra.me.meth = LOCATE_parser_prod___AModule___n_packagedecl__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:77 */
+  ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:78 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:79 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 79);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 108;
+  fra.me.meth = LOCATE_parser_prod___AModule___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:110 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:111 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:112 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 112);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast APackagedecl*/;
+      /* ./parser//parser_prod.nit:113 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 113);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:114 */
+      ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:116 */
+      ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:118 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:120 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 120);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:121 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 121);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:122 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AImport, ID_AImport)) /*cast AImport*/;
+          /* ./parser//parser_prod.nit:123 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 123);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:124 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 124);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:125 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 125);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:127 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 127);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:129 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:120 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:132 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 132);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:133 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 133);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
+      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB1 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:134 */
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB1 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB1 = REGB2;
+          }
+        }
+        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast AClassdef*/;
+          /* ./parser//parser_prod.nit:135 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 135);
+            nit_exit(1);
+          }
+          REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:136 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 136);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:137 */
+          if (UNTAG_Bool(REGB1)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 137);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:139 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 139);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+        }
+        /* ./parser//parser_prod.nit:141 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:132 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label3: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AModule___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 146;
+  fra.me.meth = LOCATE_parser_prod___AModule___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:148 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast APackagedecl*/;
+    /* ./parser//parser_prod.nit:149 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 149);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:151 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 151);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:152 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:151 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:154 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 154);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:155 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:154 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AModule___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 159;
+  fra.me.meth = LOCATE_parser_prod___AModule___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:161 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast APackagedecl*/;
+    /* ./parser//parser_prod.nit:162 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 162);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:165 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 165);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:166 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:166 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:167 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 167);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:168 */
+    } else {
+      /* ./parser//parser_prod.nit:166 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:172 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 172);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:173 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:173 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:174 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 174);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:175 */
+    } else {
+      /* ./parser//parser_prod.nit:173 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AModule___empty_init(val_t p0, int* init_table){
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModule].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos1]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 83;
+  fra.me.meth = LOCATE_parser_prod___AModule___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:83 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos1] = 1;
+  return;
+}
+void parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModule].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos2]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 85;
+  fra.me.meth = LOCATE_parser_prod___AModule___init_amodule;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:91 */
+  CALL_parser_prod___AModule___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:92 */
+  ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:93 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:94 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 94);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:96 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AImport, ID_AImport)) /*cast AImport*/;
+      /* ./parser//parser_prod.nit:97 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 97);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:98 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 98);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+      /* ./parser//parser_prod.nit:99 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:96 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:101 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast AClassdef*/;
+      /* ./parser//parser_prod.nit:102 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 102);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:103 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 103);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:104 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:101 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos2] = 1;
+  return;
+}
+void parser_prod___APackagedecl___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 181;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:183 */
+  ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:184 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:185 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 185);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APackagedecl___n_kwpackage__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 188;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___n_kwpackage__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:190 */
+  ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:191 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APackagedecl___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 193;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:195 */
+  ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:196 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 218;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:220 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:221 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:222 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 222);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:223 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 223);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:224 */
+      ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:226 */
+      ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:228 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:230 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwpackage");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 230);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:231 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:232 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 232);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwpackage, ID_TKwpackage)) /*cast TKwpackage*/;
+      /* ./parser//parser_prod.nit:233 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 233);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:234 */
+      ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:236 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 236);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:238 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:240 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 240);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:241 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:242 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 242);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:243 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 243);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:244 */
+      ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:246 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 246);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:248 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APackagedecl___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 252;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:254 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:255 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 255);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:257 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwpackage");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 257);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:258 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 258);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APackagedecl___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 261;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:263 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:264 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 264);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:266 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwpackage");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 266);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:267 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 267);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APackagedecl___empty_init(val_t p0, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APackagedecl].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos3]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 199;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:199 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos3] = 1;
+  return;
+}
+void parser_prod___APackagedecl___init_apackagedecl(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APackagedecl].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos4]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 201;
+  fra.me.meth = LOCATE_parser_prod___APackagedecl___init_apackagedecl;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:207 */
+  CALL_parser_prod___APackagedecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:208 */
+  ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:209 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:210 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 210);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:212 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 212);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:213 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 213);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:214 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 214);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:215 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 215);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos4] = 1;
+  return;
+}
+void parser_prod___AStdImport___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 271;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:273 */
+  ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:274 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdImport___n_kwimport__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 276;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___n_kwimport__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:278 */
+  ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:279 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdImport___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 281;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:283 */
+  ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:284 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 304;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:306 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 306);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:307 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:308 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 308);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:309 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 309);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:310 */
+      ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:312 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 312);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:314 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:316 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 316);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:317 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:318 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 318);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
+      /* ./parser//parser_prod.nit:319 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 319);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:320 */
+      ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:322 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 322);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:324 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:326 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 326);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:327 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:328 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 328);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:329 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 329);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:330 */
+      ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:332 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 332);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:334 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdImport___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 338;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:340 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 340);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:341 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 341);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:342 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 342);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdImport___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 345;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:347 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 347);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:348 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 348);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:349 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 349);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
+  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdImport].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos5]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 287;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:287 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos5] = 1;
+  return;
+}
+void parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdImport].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos6]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 289;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___init_astdimport;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:295 */
+  CALL_parser_prod___AStdImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:296 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 296);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:297 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 297);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:298 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 298);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:299 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 299);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:300 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 300);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:301 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 301);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos6] = 1;
+  return;
+}
+void parser_prod___ANoImport___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 353;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:355 */
+  ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:356 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANoImport___n_kwimport__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 358;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___n_kwimport__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:360 */
+  ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:361 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANoImport___n_kwend__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 363;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___n_kwend__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:365 */
+  ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:366 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 386;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:388 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 388);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:389 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:390 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 390);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:391 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 391);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:392 */
+      ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:394 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 394);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:396 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:398 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 398);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:399 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:400 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 400);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
+      /* ./parser//parser_prod.nit:401 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 401);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:402 */
+      ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:404 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 404);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:406 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:408 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwend");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 408);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:409 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:410 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 410);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwend, ID_TKwend)) /*cast TKwend*/;
+      /* ./parser//parser_prod.nit:411 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 411);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:412 */
+      ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:414 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 414);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:416 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANoImport___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 420;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:422 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 422);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:423 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 423);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:424 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwend");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 424);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANoImport___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 427;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:429 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 429);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:430 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 430);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:431 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwend");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 431);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANoImport___empty_init(val_t p0, int* init_table){
+  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANoImport].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos7]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 369;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:369 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos7] = 1;
+  return;
+}
+void parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANoImport].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos8]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 371;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___init_anoimport;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:377 */
+  CALL_parser_prod___ANoImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:378 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 378);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:379 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 379);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:380 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 380);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:381 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 381);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:382 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 382);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:383 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 383);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos8] = 1;
+  return;
+}
+void parser_prod___APublicVisibility___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 443;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:443 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APublicVisibility___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 447;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:447 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APublicVisibility___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 451;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:451 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APublicVisibility___empty_init(val_t p0, int* init_table){
+  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APublicVisibility].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos9]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 436;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:436 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos9] = 1;
+  return;
+}
+void parser_prod___APublicVisibility___init_apublicvisibility(val_t p0, int* init_table){
+  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APublicVisibility].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos10]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 438;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___init_apublicvisibility;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:440 */
+  CALL_parser_prod___APublicVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos10] = 1;
+  return;
+}
+void parser_prod___APrivateVisibility___n_kwprivate__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 456;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___n_kwprivate__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:458 */
+  ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:459 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 473;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:475 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprivate");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 475);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:476 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:477 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 477);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwprivate, ID_TKwprivate)) /*cast TKwprivate*/;
+      /* ./parser//parser_prod.nit:478 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 478);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:479 */
+      ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:481 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 481);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:483 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APrivateVisibility___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 487;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:489 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprivate");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 489);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APrivateVisibility___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 492;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:494 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprivate");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 494);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APrivateVisibility___empty_init(val_t p0, int* init_table){
+  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APrivateVisibility].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos11]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 462;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:462 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos11] = 1;
+  return;
+}
+void parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p0, val_t p1, int* init_table){
+  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APrivateVisibility].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos12]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 464;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___init_aprivatevisibility;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:468 */
+  CALL_parser_prod___APrivateVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:469 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 469);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:470 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 470);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos12] = 1;
+  return;
+}
+void parser_prod___AProtectedVisibility___n_kwprotected__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 498;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___n_kwprotected__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:500 */
+  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:501 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 515;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:517 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprotected");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 517);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:518 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:519 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 519);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwprotected, ID_TKwprotected)) /*cast TKwprotected*/;
+      /* ./parser//parser_prod.nit:520 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 520);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:521 */
+      ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:523 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 523);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:525 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AProtectedVisibility___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 529;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:531 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprotected");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 531);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AProtectedVisibility___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 534;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:536 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprotected");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 536);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AProtectedVisibility___empty_init(val_t p0, int* init_table){
+  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AProtectedVisibility].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos13]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 504;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:504 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos13] = 1;
+  return;
+}
+void parser_prod___AProtectedVisibility___init_aprotectedvisibility(val_t p0, val_t p1, int* init_table){
+  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AProtectedVisibility].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos14]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 506;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___init_aprotectedvisibility;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:510 */
+  CALL_parser_prod___AProtectedVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:511 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 511);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:512 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 512);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos14] = 1;
+  return;
+}
+void parser_prod___AIntrudeVisibility___n_kwintrude__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 540;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___n_kwintrude__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:542 */
+  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:543 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 557;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:559 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwintrude");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 559);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:560 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:561 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 561);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwintrude, ID_TKwintrude)) /*cast TKwintrude*/;
+      /* ./parser//parser_prod.nit:562 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 562);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:563 */
+      ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:565 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 565);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:567 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntrudeVisibility___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 571;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:573 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwintrude");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 573);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntrudeVisibility___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 576;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:578 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwintrude");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 578);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntrudeVisibility___empty_init(val_t p0, int* init_table){
+  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntrudeVisibility].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos15]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 546;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:546 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos15] = 1;
+  return;
+}
+void parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p0, val_t p1, int* init_table){
+  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntrudeVisibility].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos16]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 548;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___init_aintrudevisibility;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:552 */
+  CALL_parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:553 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 553);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:554 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 554);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos16] = 1;
+  return;
+}
+void parser_prod___AStdClassdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 582;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:584 */
+  ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:585 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:586 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 586);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 589;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:591 */
+  ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:592 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:593 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 593);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 596;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:598 */
+  ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:599 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___n_classkind__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 601;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_classkind__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:603 */
+  ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:604 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 606;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:608 */
+  ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:609 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:610 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 610);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 661;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:663 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:664 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:665 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 665);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:666 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 666);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:667 */
+      ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:669 */
+      ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:671 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:673 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:674 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:675 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 675);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:676 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 676);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:677 */
+      ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:679 */
+      ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:681 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:683 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 683);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:684 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:685 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 685);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:686 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 686);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:687 */
+      ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:689 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 689);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:691 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:693 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_classkind");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 693);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:694 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:695 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 695);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClasskind, ID_AClasskind)) /*cast AClasskind*/;
+      /* ./parser//parser_prod.nit:696 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 696);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:697 */
+      ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:699 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 699);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:701 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:703 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:704 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:705 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 705);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+      /* ./parser//parser_prod.nit:706 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 706);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:707 */
+      ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:709 */
+      ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:711 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:713 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 713);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:714 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 714);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:715 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast AFormaldef*/;
+          /* ./parser//parser_prod.nit:716 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 716);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:717 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 717);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:718 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 718);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:720 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 720);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:722 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:713 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:725 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 725);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:726 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 726);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
+      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB1 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:727 */
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB1 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB1 = REGB2;
+          }
+        }
+        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASuperclass, ID_ASuperclass)) /*cast ASuperclass*/;
+          /* ./parser//parser_prod.nit:728 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 728);
+            nit_exit(1);
+          }
+          REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:729 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 729);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:730 */
+          if (UNTAG_Bool(REGB1)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 730);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:732 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 732);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+        }
+        /* ./parser//parser_prod.nit:734 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:725 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label3: while(0);
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:737 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 737);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:738 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 738);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:739 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+          /* ./parser//parser_prod.nit:740 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 740);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:741 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 741);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:742 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 742);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:744 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 744);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:746 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:737 */
+      goto label4;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label4: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 751;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:753 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:754 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 754);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:756 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:757 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 757);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:759 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 759);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:760 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_classkind");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 760);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:761 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+    /* ./parser//parser_prod.nit:762 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 762);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:764 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 764);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:765 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:764 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:767 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 767);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:768 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:767 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label2: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:770 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 770);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:771 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:770 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label3: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 775;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:777 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:778 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 778);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:780 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:781 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 781);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:783 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 783);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:784 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_classkind");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 784);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:785 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+    /* ./parser//parser_prod.nit:786 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 786);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:789 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 789);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:790 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:790 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:791 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 791);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:792 */
+    } else {
+      /* ./parser//parser_prod.nit:790 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:796 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 796);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:797 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:797 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:798 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 798);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:799 */
+    } else {
+      /* ./parser//parser_prod.nit:797 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:803 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 803);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:804 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:804 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:805 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 805);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:806 */
+    } else {
+      /* ./parser//parser_prod.nit:804 */
+      goto label3;
+    }
+  }
+  label3: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table){
+  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdClassdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos17]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 614;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:614 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos17] = 1;
+  return;
+}
+void parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdClassdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos18]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 616;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___init_astdclassdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  fra.me.REG[7] = p7;
+  fra.me.REG[8] = p8;
+  /* ./parser//parser_prod.nit:627 */
+  CALL_parser_prod___AStdClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:628 */
+  ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:629 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:630 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 630);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:632 */
+  ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:633 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:634 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 634);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:636 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 636);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:637 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 637);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:638 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 638);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:639 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 639);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:640 */
+  ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:641 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:642 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 642);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  fra.me.REG[6] = CALL_abstract_collection___Collection___iterator(fra.me.REG[6])(fra.me.REG[6]);
+  /* ./parser//parser_prod.nit:644 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[6])(fra.me.REG[6]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[5] = CALL_abstract_collection___Iterator___item(fra.me.REG[6])(fra.me.REG[6]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[5], COLOR_AFormaldef, ID_AFormaldef)) /*cast AFormaldef*/;
+      /* ./parser//parser_prod.nit:645 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 645);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:646 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 646);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+      /* ./parser//parser_prod.nit:647 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:644 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[6])(fra.me.REG[6]);
+  }
+  label1: while(0);
+  fra.me.REG[7] = CALL_abstract_collection___Collection___iterator(fra.me.REG[7])(fra.me.REG[7]);
+  /* ./parser//parser_prod.nit:649 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[7])(fra.me.REG[7]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[6] = CALL_abstract_collection___Iterator___item(fra.me.REG[7])(fra.me.REG[7]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_ASuperclass, ID_ASuperclass)) /*cast ASuperclass*/;
+      /* ./parser//parser_prod.nit:650 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 650);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:651 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 651);
+        nit_exit(1);
+      }
+      fra.me.REG[5] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+      /* ./parser//parser_prod.nit:652 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:649 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[7])(fra.me.REG[7]);
+  }
+  label2: while(0);
+  fra.me.REG[8] = CALL_abstract_collection___Collection___iterator(fra.me.REG[8])(fra.me.REG[8]);
+  /* ./parser//parser_prod.nit:654 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[8])(fra.me.REG[8]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[7] = CALL_abstract_collection___Iterator___item(fra.me.REG[8])(fra.me.REG[8]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[7], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+      /* ./parser//parser_prod.nit:655 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 655);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:656 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 656);
+        nit_exit(1);
+      }
+      fra.me.REG[6] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+      /* ./parser//parser_prod.nit:657 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:654 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[8])(fra.me.REG[8]);
+  }
+  label3: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos18] = 1;
+  return;
+}
+void parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 827;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:829 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 829);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:830 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 830);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:831 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+          /* ./parser//parser_prod.nit:832 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 832);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:833 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 833);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:834 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 834);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:836 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 836);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:838 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:829 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 843;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:845 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 845);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:846 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:845 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATopClassdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 850;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:853 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 853);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:854 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:854 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:855 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 855);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:856 */
+    } else {
+      /* ./parser//parser_prod.nit:854 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table){
+  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATopClassdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos19]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 813;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:813 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos19] = 1;
+  return;
+}
+void parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1, int* init_table){
+  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATopClassdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos20]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 815;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___init_atopclassdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:819 */
+  CALL_parser_prod___ATopClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:820 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+      /* ./parser//parser_prod.nit:821 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 821);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:822 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 822);
+        nit_exit(1);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:823 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:820 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos20] = 1;
+  return;
+}
+void parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 877;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:879 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 879);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:880 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 880);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:881 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+          /* ./parser//parser_prod.nit:882 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 882);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:883 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 883);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:884 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 884);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:886 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 886);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:888 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:879 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 893;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:895 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 895);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:896 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:895 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainClassdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 900;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:903 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 903);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:904 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:904 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:905 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 905);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:906 */
+    } else {
+      /* ./parser//parser_prod.nit:904 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table){
+  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainClassdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos21]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 863;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:863 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos21] = 1;
+  return;
+}
+void parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p1, int* init_table){
+  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainClassdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos22]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 865;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___init_amainclassdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:869 */
+  CALL_parser_prod___AMainClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:870 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+      /* ./parser//parser_prod.nit:871 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 871);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:872 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 872);
+        nit_exit(1);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:873 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:870 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos22] = 1;
+  return;
+}
+void parser_prod___AConcreteClasskind___n_kwclass__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 912;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___n_kwclass__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:914 */
+  ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:915 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 929;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:931 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 931);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:932 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:933 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 933);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwclass, ID_TKwclass)) /*cast TKwclass*/;
+      /* ./parser//parser_prod.nit:934 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 934);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:935 */
+      ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:937 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 937);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:939 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteClasskind___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 943;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:945 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 945);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteClasskind___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 948;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:950 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 950);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteClasskind___empty_init(val_t p0, int* init_table){
+  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteClasskind].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos23]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 918;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:918 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos23] = 1;
+  return;
+}
+void parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteClasskind].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos24]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 920;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___init_aconcreteclasskind;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:924 */
+  CALL_parser_prod___AConcreteClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:925 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 925);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:926 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 926);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos24] = 1;
+  return;
+}
+void parser_prod___AAbstractClasskind___n_kwabstract__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 954;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___n_kwabstract__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:956 */
+  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:957 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbstractClasskind___n_kwclass__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 959;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___n_kwclass__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:961 */
+  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:962 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 979;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:981 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabstract");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 981);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:982 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:983 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 983);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwabstract, ID_TKwabstract)) /*cast TKwabstract*/;
+      /* ./parser//parser_prod.nit:984 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 984);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:985 */
+      ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:987 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 987);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:989 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:991 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 991);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:992 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:993 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 993);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwclass, ID_TKwclass)) /*cast TKwclass*/;
+      /* ./parser//parser_prod.nit:994 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 994);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:995 */
+      ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:997 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 997);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:999 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbstractClasskind___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1003;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1005 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabstract");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1005);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1006 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1006);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbstractClasskind___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1009;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1011 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabstract");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1011);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1012 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1012);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbstractClasskind___empty_init(val_t p0, int* init_table){
+  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbstractClasskind].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos25]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 965;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:965 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos25] = 1;
+  return;
+}
+void parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbstractClasskind].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos26]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 967;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___init_aabstractclasskind;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:972 */
+  CALL_parser_prod___AAbstractClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:973 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 973);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:974 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 974);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:975 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 975);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:976 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 976);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos26] = 1;
+  return;
+}
+void parser_prod___AInterfaceClasskind___n_kwinterface__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1016;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___n_kwinterface__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1018 */
+  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1019 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1033;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1035 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinterface");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1035);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1036 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1037 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1037);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinterface, ID_TKwinterface)) /*cast TKwinterface*/;
+      /* ./parser//parser_prod.nit:1038 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1038);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1039 */
+      ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1041 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1041);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1043 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInterfaceClasskind___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1047;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1049 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinterface");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1049);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInterfaceClasskind___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1052;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1054 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinterface");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1054);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInterfaceClasskind___empty_init(val_t p0, int* init_table){
+  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInterfaceClasskind].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos27]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1022;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1022 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos27] = 1;
+  return;
+}
+void parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInterfaceClasskind].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos28]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1024;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1028 */
+  CALL_parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1029 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1029);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1030 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1030);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos28] = 1;
+  return;
+}
+void parser_prod___AUniversalClasskind___n_kwuniversal__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1058;
+  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___n_kwuniversal__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1060 */
+  ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1061 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUniversalClasskind___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1075;
+  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1077 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwuniversal");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1077);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1078 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1079 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1079);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwuniversal, ID_TKwuniversal)) /*cast TKwuniversal*/;
+      /* ./parser//parser_prod.nit:1080 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1080);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1081 */
+      ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1083 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1083);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1085 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUniversalClasskind___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1089;
+  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1091 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwuniversal");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1091);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUniversalClasskind___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1094;
+  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1096 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwuniversal");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1096);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUniversalClasskind___empty_init(val_t p0, int* init_table){
+  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUniversalClasskind].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos29]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1064;
+  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1064 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos29] = 1;
+  return;
+}
+void parser_prod___AUniversalClasskind___init_auniversalclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUniversalClasskind].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos30]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1066;
+  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___init_auniversalclasskind;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1070 */
+  CALL_parser_prod___AUniversalClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1071 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1071);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1072 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1072);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos30] = 1;
+  return;
+}
+void parser_prod___AFormaldef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1100;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1102 */
+  ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1103 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFormaldef___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1105;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1107 */
+  ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1108 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1109 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1109);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1129;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1131 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1131);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1132 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1133 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1133);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+      /* ./parser//parser_prod.nit:1134 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1134);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1135 */
+      ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1137 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1137);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1139 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1141 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1142 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1143 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1143);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:1144 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1144);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1145 */
+      ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1147 */
+      ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1149 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1153;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1155 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1155);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1156 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:1157 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1157);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFormaldef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1161;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1163 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1163);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1164 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:1165 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1165);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFormaldef___empty_init(val_t p0, int* init_table){
+  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFormaldef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos31]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1113;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1113 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos31] = 1;
+  return;
+}
+void parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFormaldef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos32]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1115;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___init_aformaldef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:1120 */
+  CALL_parser_prod___AFormaldef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1121 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1121);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1122 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1122);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1123 */
+  ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1124 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1125 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1125);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos32] = 1;
+  return;
+}
+void parser_prod___ASuperclass___n_kwspecial__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1170;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___n_kwspecial__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1172 */
+  ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1173 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperclass___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1175;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1177 */
+  ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1178 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1195;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1197 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwspecial");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1197);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1198 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1199 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1199);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwspecial, ID_TKwspecial)) /*cast TKwspecial*/;
+      /* ./parser//parser_prod.nit:1200 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1200);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1201 */
+      ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1203 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1203);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1205 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1207 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1207);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1208 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1209 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1209);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:1210 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1210);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1211 */
+      ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1213 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1213);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1215 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1219;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1221 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwspecial");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1221);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1222 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1222);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperclass___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1225;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1227 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwspecial");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1227);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1228 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1228);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
+  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperclass].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos33]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1181;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1181 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos33] = 1;
+  return;
+}
+void parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperclass].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos34]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1183;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___init_asuperclass;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:1188 */
+  CALL_parser_prod___ASuperclass___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1189 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1189);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1190 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1190);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1191 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1191);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1192 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1192);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos34] = 1;
+  return;
+}
+void parser_prod___AAttrPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1232;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1234 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1235 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1236 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1236);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1253;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1255 */
+  ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1256 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1257 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1257);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1260;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1262 */
+  ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1263 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_kwvar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1265;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_kwvar__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1267 */
+  ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1268 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1270;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1272 */
+  ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1273 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1275;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1277 */
+  ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1278 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1279 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1279);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_readable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1239;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_readable__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1241 */
+  ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1242 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1243 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1243);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_writable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1246;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_writable__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1248 */
+  ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1249 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1250 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1250);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1282;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1284 */
+  ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1285 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1286 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1286);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1337;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1339 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1340 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1341 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1341);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:1342 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1342);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1343 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1345 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1347 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1349 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1350 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1351 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1351);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
+      /* ./parser//parser_prod.nit:1352 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1352);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1353 */
+      ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1355 */
+      ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1357 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1359 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1360 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1361 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1361);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
+      /* ./parser//parser_prod.nit:1362 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1362);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1363 */
+      ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1365 */
+      ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1367 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1369 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1370 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1371 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1371);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:1372 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1372);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1373 */
+      ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1375 */
+      ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1377 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1379 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1379);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1380 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1381 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1381);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:1382 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1382);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1383 */
+      ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1385 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1385);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1387 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1389 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1389);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1390 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1391 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1391);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwvar, ID_TKwvar)) /*cast TKwvar*/;
+      /* ./parser//parser_prod.nit:1392 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1392);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1393 */
+      ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1395 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1395);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1397 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1399 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1399);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1400 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1401 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1401);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
+      /* ./parser//parser_prod.nit:1402 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1402);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1403 */
+      ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1405 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1405);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1407 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1409 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1410 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1411 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1411);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:1412 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1412);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1413 */
+      ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1415 */
+      ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1417 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1419 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1420 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1421 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1421);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:1422 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1422);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1423 */
+      ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1425 */
+      ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1427 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1431;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1433 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1434 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1434);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1436 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
+    /* ./parser//parser_prod.nit:1437 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1437);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1439 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
+    /* ./parser//parser_prod.nit:1440 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1440);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1442 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1443 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1443);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1445 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1445);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1446 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1446);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1447 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1447);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1448 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:1449 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1449);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1451 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:1452 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1452);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1456;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1458 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1459 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1459);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1461 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
+    /* ./parser//parser_prod.nit:1462 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1462);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1464 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
+    /* ./parser//parser_prod.nit:1465 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1465);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1467 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1468 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1468);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1470 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1470);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1471 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1471);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1472 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1472);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1473 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:1474 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1474);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1476 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:1477 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1477);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table){
+  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos35]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1290;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1290 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos35] = 1;
+  return;
+}
+void parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, int* init_table){
+  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos36]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1292;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___init_aattrpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  fra.me.REG[7] = p7;
+  fra.me.REG[8] = p8;
+  fra.me.REG[9] = p9;
+  /* ./parser//parser_prod.nit:1304 */
+  CALL_parser_prod___AAttrPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1305 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1306 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1307 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1307);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1309 */
+  ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1310 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1311 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1311);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1313 */
+  ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1314 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1315 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1315);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1317 */
+  ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1318 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1319 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1319);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1321 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1321);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1322 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1322);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1323 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1323);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1324 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1324);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[7]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1325 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1325);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[7];
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1326 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1326);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1327 */
+  ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[8];
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1328 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1329 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1329);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1331 */
+  ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[9];
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1332 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1333 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1333);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos36] = 1;
+  return;
+}
+void parser_prod___AMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1482;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1484 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1485 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1486 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1486);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1489;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1491 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1492 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1493 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1493);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1496;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1498 */
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1499 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1499);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1501;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_methid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1503 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1504 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1504);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1506;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1508 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1509 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1509);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1539;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1541 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1542 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1543 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1543);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:1544 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1544);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1545 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1547 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1549 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1551 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1552 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1553 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1553);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:1554 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1554);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1555 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1557 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1559 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1561 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1562 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1563 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1563);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:1564 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1564);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1565 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1567 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1567);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1569 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1571 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1572 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1573 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1573);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      /* ./parser//parser_prod.nit:1574 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1574);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1575 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1577 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1577);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1579 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1581 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1582 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1583 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1583);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:1584 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1584);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1585 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1587 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1587);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1589 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1593;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1595 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1596 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1596);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1598 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1599 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1599);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1601 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1602 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1603 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1606;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1608 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1609 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1609);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1611 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1612 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1612);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1614 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1615 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1616 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos37]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1512;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1512 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos37] = 1;
+  return;
+}
+void parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos38]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1514;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___init_amethpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:1522 */
+  CALL_parser_prod___AMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1523 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1524 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1525 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1525);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1527 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1528 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1529 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1529);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1531 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1531);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1532 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1532);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1533 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1533);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1534 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1534);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1535 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1535);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1536 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1536);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos38] = 1;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1620;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1622 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1623 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1624 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1624);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1627;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1629 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1630 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1631 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1631);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1634;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1636 */
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1637 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1637);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1644;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_methid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1646 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1647 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1647);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1649;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1651 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1652 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1652);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1639;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_kwmeth__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1641 */
+  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1642 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1685;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1687 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1688 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1689 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1689);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:1690 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1690);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1691 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1693 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1695 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1697 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1698 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1699 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1699);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:1700 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1700);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1701 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1703 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1705 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1707 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1708 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1709 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1709);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:1710 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1710);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1711 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1713 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1713);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1715 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1717 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1717);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1718 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1719 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1719);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
+      /* ./parser//parser_prod.nit:1720 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1720);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1721 */
+      ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1723 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1723);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1725 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1727 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1728 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1729 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1729);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      /* ./parser//parser_prod.nit:1730 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1730);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1731 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1733 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1733);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1735 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1737 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1738 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1739 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1739);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:1740 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1740);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1741 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1743 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1743);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1745 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1749;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1751 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1752 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1752);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1754 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1755 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1755);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1757 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1758 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1758);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1759 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1760 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1763;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1765 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1766 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1766);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1768 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1769 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1769);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1771 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1772 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1772);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1773 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1774 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos39]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1655;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1655 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos39] = 1;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos40]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1657;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:1666 */
+  CALL_parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1667 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1668 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1669 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1669);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1671 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1672 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1673 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1673);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1675 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1675);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1676 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1676);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1677 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1677);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1678 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1678);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1679 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1679);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1680 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1680);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1681 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1681);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1682 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1682);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos40] = 1;
+  return;
+}
+void parser_prod___AInternMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1778;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1780 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1781 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1782 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1782);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1785;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1787 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1788 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1789 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1789);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1792;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1794 */
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1795 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1795);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1802;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_methid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1804 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1805 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1805);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1807;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1809 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1810 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1810);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1797;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_kwmeth__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1799 */
+  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1800 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1843;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1845 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1846 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1847 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1847);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:1848 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1848);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1849 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1851 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1853 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1855 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1856 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1857 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1857);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:1858 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1858);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1859 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1861 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1863 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1865 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1866 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1867 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1867);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:1868 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1868);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1869 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1871 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1871);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1873 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1875 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1875);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1876 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1877 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1877);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
+      /* ./parser//parser_prod.nit:1878 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1878);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1879 */
+      ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1881 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1881);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1883 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1885 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1886 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1887 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1887);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      /* ./parser//parser_prod.nit:1888 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1888);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1889 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1891 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1891);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1893 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:1895 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1896 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:1897 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1897);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:1898 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1898);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:1899 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1901 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1901);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:1903 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1907;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1909 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1910 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1910);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1912 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1913 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1913);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1915 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1916 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1916);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1917 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1918 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1921;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1923 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:1924 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1924);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1926 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:1927 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1927);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1929 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1930 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1930);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1931 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1932 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInternMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInternMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos41]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1813;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1813 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos41] = 1;
+  return;
+}
+void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInternMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos42]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1815;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___init_ainternmethpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:1824 */
+  CALL_parser_prod___AInternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1825 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1826 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1827 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1827);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1829 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1830 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1831 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1831);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1833 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1833);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1834 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1834);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1835 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1835);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1836 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1836);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1837 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1837);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1838 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1838);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1839 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1839);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1840 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1840);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos42] = 1;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1936;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1938 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1939 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1940 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1940);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1943;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1945 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1946 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1947 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1947);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1950;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1952 */
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1953 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1953);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1960;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_methid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1962 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1963 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1963);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1965;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1967 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1968 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1968);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1955;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_kwmeth__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1957 */
+  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1958 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___n_extern__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1970;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_extern__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1972 */
+  ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1973 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1974 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1974);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2013;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2015 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2016 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2017 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2017);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:2018 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2018);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2019 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2021 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2023 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2025 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2026 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2027 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2027);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2028 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2028);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2029 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2031 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2033 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2035 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2036 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2037 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2037);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:2038 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2038);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2039 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2041 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2041);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2043 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2045 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2045);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2046 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2047 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2047);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
+      /* ./parser//parser_prod.nit:2048 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2048);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2049 */
+      ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2051 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2051);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2053 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2055 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2056 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2057 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2057);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      /* ./parser//parser_prod.nit:2058 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2058);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2059 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2061 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2061);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2063 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2065 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2066 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2067 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2067);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:2068 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2068);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2069 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2071 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2071);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2073 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2075 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2076 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2077 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2077);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
+      /* ./parser//parser_prod.nit:2078 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2078);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2079 */
+      ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2081 */
+      ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2083 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2087;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2089 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2090 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2090);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2092 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2093 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2093);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2095 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2096 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2096);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2097 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2098 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2099 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TString, ID_TString)) /*cast TString*/;
+    /* ./parser//parser_prod.nit:2100 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2100);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2104;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2106 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2107 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2107);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2109 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2110 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2110);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2112 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2113 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2113);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2114 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2115 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2116 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TString, ID_TString)) /*cast TString*/;
+    /* ./parser//parser_prod.nit:2117 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2117);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos43]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1978;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1978 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos43] = 1;
+  return;
+}
+void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos44]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1980;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___init_aexternmethpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  fra.me.REG[7] = p7;
+  /* ./parser//parser_prod.nit:1990 */
+  CALL_parser_prod___AExternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1991 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1992 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1993 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1993);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1995 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:1996 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:1997 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1997);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:1999 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1999);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2000 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2000);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2001 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2001);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2002 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2002);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2003 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2003);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2004 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2004);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2005 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2005);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2006 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2006);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2007 */
+  ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[7];
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2008 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2009 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2009);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos44] = 1;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2122;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2124 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2125 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2126 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2126);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2129;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2131 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2132 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2133 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2133);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2136;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2138 */
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2139 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2139);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2146;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_methid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2148 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2149 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2149);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2151;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2153 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2154 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2154);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2141;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_kwmeth__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2143 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2144 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2144);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2156;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2158 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2159 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2160 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2160);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2199;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2201 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2202 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2203 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2203);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:2204 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2204);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2205 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2207 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2209 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2211 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2212 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2213 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2213);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2214 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2214);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2215 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2217 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2219 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2221 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2222 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2223 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2223);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:2224 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2224);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2225 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2227 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2227);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2229 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2231 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2232 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2233 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2233);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
+      /* ./parser//parser_prod.nit:2234 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2234);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2235 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2237 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2237);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2239 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2241 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2242 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2243 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2243);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      /* ./parser//parser_prod.nit:2244 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2244);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2245 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2247 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2247);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2249 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2251 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2252 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2253 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2253);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:2254 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2254);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2255 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2257 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2257);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2259 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2261 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2262 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2263 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2263);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:2264 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2264);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2265 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2267 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2269 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2273;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2275 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2276 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2276);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2278 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2279 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2279);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2281 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2282 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2283 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2284 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2285 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:2286 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2286);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2290;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2292 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2293 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2293);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2295 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2296 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2296);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2298 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2299 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2300 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2301 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2302 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:2303 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2303);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos45]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2164;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2164 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos45] = 1;
+  return;
+}
+void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos46]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2166;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  fra.me.REG[7] = p7;
+  /* ./parser//parser_prod.nit:2176 */
+  CALL_parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2177 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2178 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2179 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2179);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:2181 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2182 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2183 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2183);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2185 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2185);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2186 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2186);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2187 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2187);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2188 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2188);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2189 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2189);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2190 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2190);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2191 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2191);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2192 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2192);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2193 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2194 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2195 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2195);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos46] = 1;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2308;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2310 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2311 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2312 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2312);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2315;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2317 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2318 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2319 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2319);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2322;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2324 */
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2325 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2325);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_methid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2332;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_methid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2334 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2335 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2336 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2336);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2339;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2341 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2342 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2342);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2344;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2346 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2347 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2348 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2348);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___n_kwinit__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2327;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_kwinit__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2329 */
+  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2330 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2389;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2391 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2392 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2393 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2393);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:2394 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2394);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2395 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2397 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2399 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2401 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2402 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2403 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2403);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2404 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2404);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2405 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2407 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2409 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2411 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2412 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2413 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2413);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:2414 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2414);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2415 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2417 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2417);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2419 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2421 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2421);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2422 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2423 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2423);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
+      /* ./parser//parser_prod.nit:2424 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2424);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2425 */
+      ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2427 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2427);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2429 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2431 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2432 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2433 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2433);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      /* ./parser//parser_prod.nit:2434 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2434);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2435 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2437 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2439 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2441 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2442 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2443 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2443);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:2444 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2444);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2445 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2447 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2447);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2449 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2451 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2452 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2453 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2453);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:2454 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2454);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2455 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2457 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2459 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2463;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2465 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2466 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2466);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2468 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2469 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2469);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2471 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2472 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2472);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2473 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+    /* ./parser//parser_prod.nit:2474 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2474);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2476 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2477 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:2478 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2478);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2482;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2484 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2485 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2485);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2487 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2488 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2488);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2490 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2491 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2491);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2492 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+    /* ./parser//parser_prod.nit:2493 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2493);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2495 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2496 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:2497 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2497);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* init_table){
+  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos47]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2352;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2352 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos47] = 1;
+  return;
+}
+void parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos48]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2354;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  fra.me.REG[7] = p7;
+  /* ./parser//parser_prod.nit:2364 */
+  CALL_parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2365 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2366 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2367 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2367);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:2369 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2370 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2371 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2371);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2373 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2373);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2374 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2374);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2375 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2375);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2376 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2376);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2377 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2378 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2379 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2379);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2381 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2381);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2382 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2382);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2383 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2384 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2385 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2385);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos48] = 1;
+  return;
+}
+void parser_prod___AMainMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2502;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2504 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2505 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2506 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2506);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainMethPropdef___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2509;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2511 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2512 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2513 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2513);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2535;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2537 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2538 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2539 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2539);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2540 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2540);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2541 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2543 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2545 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2547 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2548 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2549 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2549);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:2550 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2550);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2551 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2553 */
+      ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2555 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2559;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2561 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2562 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2562);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2564 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:2565 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2565);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainMethPropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2569;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2571 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2572 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2572);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2574 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:2575 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2575);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos49]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2517;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2517 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos49] = 1;
+  return;
+}
+void parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos50]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2519;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___init_amainmethpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2524 */
+  CALL_parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2525 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2526 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2527 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2527);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:2529 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2530 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2531 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2531);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos50] = 1;
+  return;
+}
+void parser_prod___ATypePropdef___n_doc__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2580;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_doc__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2582 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2583 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2584 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2584);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2587;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2589 */
+  ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2590 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2591 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2591);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___n_visibility__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2594;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_visibility__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2596 */
+  ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2597 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___n_kwtype__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2599;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_kwtype__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2601 */
+  ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2602 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2604;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2606 */
+  ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2607 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2609;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2611 */
+  ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2612 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2645;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2647 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2648 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2649 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2649);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      /* ./parser//parser_prod.nit:2650 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2650);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2651 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2653 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2655 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2657 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2658 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2659 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2659);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2660 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2660);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2661 */
+      ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2663 */
+      ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2665 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2667 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2667);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2668 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2669 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2669);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      /* ./parser//parser_prod.nit:2670 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2670);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2671 */
+      ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2673 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2673);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2675 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2677 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtype");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2677);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2678 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2679 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2679);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwtype, ID_TKwtype)) /*cast TKwtype*/;
+      /* ./parser//parser_prod.nit:2680 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2680);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2681 */
+      ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2683 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2683);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2685 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2687 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2687);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2688 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2689 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2689);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+      /* ./parser//parser_prod.nit:2690 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2690);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2691 */
+      ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2693 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2693);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2695 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2697 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2697);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2698 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2699 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2699);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:2700 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2700);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2701 */
+      ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2703 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2703);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2705 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2709;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2711 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2712 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2712);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2714 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2715 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2715);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2717 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2717);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2718 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtype");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2718);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2719 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2719);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2720 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2720);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2723;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2725 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    /* ./parser//parser_prod.nit:2726 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2726);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2728 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2729 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2729);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2731 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2731);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2732 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtype");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2732);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2733 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2733);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2734 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2734);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table){
+  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos51]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2615;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2615 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos51] = 1;
+  return;
+}
+void parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos52]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2617;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___init_atypepropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:2626 */
+  CALL_parser_prod___ATypePropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2627 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2628 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2629 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2629);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:2631 */
+  ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2632 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2633 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2633);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2635 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2635);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2636 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2636);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2637 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2637);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2638 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2638);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2639 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2639);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2640 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2640);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2641 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2641);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2642 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2642);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos52] = 1;
+  return;
+}
+void parser_prod___AReadAble___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2738;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2740 */
+  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2741 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2742 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2742);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReadAble___n_kwreadable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2745;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___n_kwreadable__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2747 */
+  ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2748 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2767;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2769 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2770 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2771 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2771);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2772 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2772);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2773 */
+      ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2775 */
+      ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2777 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2779 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwreadable");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2779);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2780 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2781 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2781);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreadable, ID_TKwreadable)) /*cast TKwreadable*/;
+      /* ./parser//parser_prod.nit:2782 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2782);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2783 */
+      ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2785 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2785);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2787 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2791;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2793 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2794 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2794);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2796 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwreadable");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2796);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReadAble___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2799;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2801 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2802 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2802);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2804 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwreadable");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2804);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
+  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos53]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2751;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2751 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos53] = 1;
+  return;
+}
+void parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos54]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2753;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___init_areadable;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2758 */
+  CALL_parser_prod___AReadAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2759 */
+  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2760 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2761 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2761);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2763 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2763);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2764 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2764);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos54] = 1;
+  return;
+}
+void parser_prod___AWriteAble___n_kwredef__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2808;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___n_kwredef__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2810 */
+  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2811 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2812 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2812);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWriteAble___n_kwwritable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2815;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___n_kwwritable__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2817 */
+  ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2818 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2837;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:2839 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2840 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2841 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2841);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      /* ./parser//parser_prod.nit:2842 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2842);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2843 */
+      ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2845 */
+      ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2847 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2849 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwritable");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2849);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2850 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2851 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2851);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwwritable, ID_TKwwritable)) /*cast TKwwritable*/;
+      /* ./parser//parser_prod.nit:2852 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2852);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2853 */
+      ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2855 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2855);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2857 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2861;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2863 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2864 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2864);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2866 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwritable");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2866);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWriteAble___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2869;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2871 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    /* ./parser//parser_prod.nit:2872 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2872);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2874 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwritable");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2874);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
+  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos55]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2821;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2821 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos55] = 1;
+  return;
+}
+void parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos56]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2823;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___init_awriteable;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2828 */
+  CALL_parser_prod___AWriteAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2829 */
+  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2830 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2831 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2831);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2833 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2833);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2834 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2834);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos56] = 1;
+  return;
+}
+void parser_prod___AIdMethid___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2878;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2880 */
+  ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2881 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2895;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2897 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2897);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2898 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2899 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2899);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:2900 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2900);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2901 */
+      ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2903 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2903);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2905 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIdMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2909;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2911 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2911);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIdMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2914;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2916 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2916);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
+  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos57]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2884;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2884 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos57] = 1;
+  return;
+}
+void parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int* init_table){
+  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos58]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2886;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___init_aidmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2890 */
+  CALL_parser_prod___AIdMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2891 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2891);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2892 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2892);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos58] = 1;
+  return;
+}
+void parser_prod___APlusMethid___n_plus__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2920;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___n_plus__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2922 */
+  ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2923 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2937;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2939 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_plus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2939);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2940 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2941 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2941);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPlus, ID_TPlus)) /*cast TPlus*/;
+      /* ./parser//parser_prod.nit:2942 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2942);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2943 */
+      ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2945 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2945);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2947 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2951;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2953 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_plus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2953);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2956;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2958 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_plus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2958);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
+  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos59]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2926;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2926 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos59] = 1;
+  return;
+}
+void parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, int* init_table){
+  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos60]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2928;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___init_aplusmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2932 */
+  CALL_parser_prod___APlusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2933 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2933);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2934 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2934);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos60] = 1;
+  return;
+}
+void parser_prod___AMinusMethid___n_minus__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2962;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___n_minus__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2964 */
+  ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2965 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2979;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2981 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2981);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:2982 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:2983 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2983);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
+      /* ./parser//parser_prod.nit:2984 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2984);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:2985 */
+      ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2987 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2987);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:2989 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2993;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2995 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2995);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2998;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3000 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3000);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table){
+  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos61]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2968;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:2968 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos61] = 1;
+  return;
+}
+void parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1, int* init_table){
+  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos62]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 2970;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___init_aminusmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:2974 */
+  CALL_parser_prod___AMinusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:2975 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2975);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:2976 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2976);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos62] = 1;
+  return;
+}
+void parser_prod___AStarMethid___n_star__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3004;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___n_star__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3006 */
+  ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3007 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3021;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3023 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_star");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3023);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3024 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3025 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3025);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStar, ID_TStar)) /*cast TStar*/;
+      /* ./parser//parser_prod.nit:3026 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3026);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3027 */
+      ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3029 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3029);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3031 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3035;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3037 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_star");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3037);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3040;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3042 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_star");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3042);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
+  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos63]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3010;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3010 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos63] = 1;
+  return;
+}
+void parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, int* init_table){
+  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos64]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3012;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___init_astarmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3016 */
+  CALL_parser_prod___AStarMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3017 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3017);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3018 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3018);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos64] = 1;
+  return;
+}
+void parser_prod___ASlashMethid___n_slash__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3046;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___n_slash__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3048 */
+  ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3049 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3063;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3065 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_slash");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3065);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3066 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3067 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3067);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TSlash, ID_TSlash)) /*cast TSlash*/;
+      /* ./parser//parser_prod.nit:3068 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3068);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3069 */
+      ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3071 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3071);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3073 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3077;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3079 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_slash");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3079);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3082;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3084 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_slash");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3084);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table){
+  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos65]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3052;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3052 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos65] = 1;
+  return;
+}
+void parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1, int* init_table){
+  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos66]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3054;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___init_aslashmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3058 */
+  CALL_parser_prod___ASlashMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3059 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3059);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3060 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3060);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos66] = 1;
+  return;
+}
+void parser_prod___APercentMethid___n_percent__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3088;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___n_percent__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3090 */
+  ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3091 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3105;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3107 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_percent");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3107);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3108 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3109 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3109);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPercent, ID_TPercent)) /*cast TPercent*/;
+      /* ./parser//parser_prod.nit:3110 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3110);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3111 */
+      ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3113 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3113);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3115 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3119;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3121 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_percent");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3121);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3124;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3126 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_percent");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3126);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentMethid___empty_init(val_t p0, int* init_table){
+  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos67]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3094;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3094 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos67] = 1;
+  return;
+}
+void parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t p1, int* init_table){
+  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos68]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3096;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___init_apercentmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3100 */
+  CALL_parser_prod___APercentMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3101 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3101);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3102 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3102);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos68] = 1;
+  return;
+}
+void parser_prod___AEqMethid___n_eq__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3130;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___n_eq__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3132 */
+  ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3133 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3147;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3149 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_eq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3149);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3150 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3151 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3151);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TEq, ID_TEq)) /*cast TEq*/;
+      /* ./parser//parser_prod.nit:3152 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3152);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3153 */
+      ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3155 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3155);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3157 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3161;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3163 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_eq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3163);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3166;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3168 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_eq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3168);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
+  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos69]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3136;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3136 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos69] = 1;
+  return;
+}
+void parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int* init_table){
+  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos70]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3138;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___init_aeqmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3142 */
+  CALL_parser_prod___AEqMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3143 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3143);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3144 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3144);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos70] = 1;
+  return;
+}
+void parser_prod___ANeMethid___n_ne__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3172;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___n_ne__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3174 */
+  ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3175 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3189;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3191 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ne");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3191);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3192 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3193 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3193);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TNe, ID_TNe)) /*cast TNe*/;
+      /* ./parser//parser_prod.nit:3194 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3194);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3195 */
+      ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3197 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3197);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3199 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3203;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3205 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ne");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3205);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3208;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3210 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ne");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3210);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
+  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos71]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3178;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3178 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos71] = 1;
+  return;
+}
+void parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int* init_table){
+  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos72]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3180;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___init_anemethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3184 */
+  CALL_parser_prod___ANeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3185 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3185);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3186 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3186);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos72] = 1;
+  return;
+}
+void parser_prod___ALeMethid___n_le__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3214;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___n_le__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3216 */
+  ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3217 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3231;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3233 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_le");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3233);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3234 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3235 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3235);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLe, ID_TLe)) /*cast TLe*/;
+      /* ./parser//parser_prod.nit:3236 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3236);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3237 */
+      ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3239 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3239);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3241 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3245;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3247 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_le");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3247);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3250;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3252 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_le");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3252);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
+  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos73]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3220;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3220 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos73] = 1;
+  return;
+}
+void parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int* init_table){
+  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos74]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3222;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___init_alemethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3226 */
+  CALL_parser_prod___ALeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3227 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3227);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3228 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3228);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos74] = 1;
+  return;
+}
+void parser_prod___AGeMethid___n_ge__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3256;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___n_ge__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3258 */
+  ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3259 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3273;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3275 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ge");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3275);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3276 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3277 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3277);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGe, ID_TGe)) /*cast TGe*/;
+      /* ./parser//parser_prod.nit:3278 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3278);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3279 */
+      ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3281 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3281);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3283 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3287;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3289 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ge");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3289);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3292;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3294 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ge");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3294);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
+  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos75]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3262;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3262 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos75] = 1;
+  return;
+}
+void parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int* init_table){
+  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos76]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3264;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___init_agemethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3268 */
+  CALL_parser_prod___AGeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3269 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3269);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3270 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3270);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos76] = 1;
+  return;
+}
+void parser_prod___ALtMethid___n_lt__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3298;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___n_lt__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3300 */
+  ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3301 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3315;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3317 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_lt");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3317);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3318 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3319 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3319);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLt, ID_TLt)) /*cast TLt*/;
+      /* ./parser//parser_prod.nit:3320 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3320);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3321 */
+      ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3323 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3323);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3325 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3329;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3331 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_lt");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3331);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3334;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3336 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_lt");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3336);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
+  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos77]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3304;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3304 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos77] = 1;
+  return;
+}
+void parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int* init_table){
+  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos78]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3306;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___init_altmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3310 */
+  CALL_parser_prod___ALtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3311 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3311);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3312 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3312);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos78] = 1;
+  return;
+}
+void parser_prod___AGtMethid___n_gt__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3340;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___n_gt__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3342 */
+  ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3343 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3357;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3359 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_gt");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3359);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3360 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3361 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3361);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGt, ID_TGt)) /*cast TGt*/;
+      /* ./parser//parser_prod.nit:3362 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3362);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3363 */
+      ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3365 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3365);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3367 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3371;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3373 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_gt");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3373);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3376;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3378 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_gt");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3378);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
+  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos79]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3346;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3346 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos79] = 1;
+  return;
+}
+void parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int* init_table){
+  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos80]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3348;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___init_agtmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3352 */
+  CALL_parser_prod___AGtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3353 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3353);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3354 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3354);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos80] = 1;
+  return;
+}
+void parser_prod___ABraMethid___n_obra__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3382;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___n_obra__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3384 */
+  ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3385 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraMethid___n_cbra__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3387;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___n_cbra__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3389 */
+  ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3390 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3407;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3409 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3409);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3410 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3411 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3411);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TObra, ID_TObra)) /*cast TObra*/;
+      /* ./parser//parser_prod.nit:3412 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3412);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3413 */
+      ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3415 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3415);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3417 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3419 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3419);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3420 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3421 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3421);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
+      /* ./parser//parser_prod.nit:3422 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3422);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3423 */
+      ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3425 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3425);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3427 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3431;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3433 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3433);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3434 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3434);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3437;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3439 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3439);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3440 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3440);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
+  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos81]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3393;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3393 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos81] = 1;
+  return;
+}
+void parser_prod___ABraMethid___init_abramethid(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos82]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3395;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___init_abramethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:3400 */
+  CALL_parser_prod___ABraMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3401 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3401);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3402 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3402);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3403 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3403);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3404 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3404);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos82] = 1;
+  return;
+}
+void parser_prod___AStarshipMethid___n_starship__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3444;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___n_starship__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3446 */
+  ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3447 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3461;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3463 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_starship");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3463);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3464 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3465 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3465);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStarship, ID_TStarship)) /*cast TStarship*/;
+      /* ./parser//parser_prod.nit:3466 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3466);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3467 */
+      ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3469 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3469);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3471 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3475;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3477 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_starship");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3477);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3480;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3482 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_starship");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3482);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_table){
+  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos83]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3450;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3450 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos83] = 1;
+  return;
+}
+void parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val_t p1, int* init_table){
+  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos84]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3452;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___init_astarshipmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3456 */
+  CALL_parser_prod___AStarshipMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3457 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3457);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3458 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3458);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos84] = 1;
+  return;
+}
+void parser_prod___AAssignMethid___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3486;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3488 */
+  ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3489 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssignMethid___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3491;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3493 */
+  ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3494 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3511;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3513 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3513);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3514 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3515 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3515);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:3516 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3516);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3517 */
+      ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3519 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3519);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3521 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3523 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3523);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3524 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3525 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3525);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:3526 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3526);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3527 */
+      ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3529 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3529);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3531 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssignMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3535;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3537 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3537);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3538 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3538);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssignMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3541;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3543 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3543);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3544 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3544);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table){
+  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos85]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3497;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3497 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos85] = 1;
+  return;
+}
+void parser_prod___AAssignMethid___init_aassignmethid(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos86]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3499;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___init_aassignmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:3504 */
+  CALL_parser_prod___AAssignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3505 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3505);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3506 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3506);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3507 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3507);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3508 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3508);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos86] = 1;
+  return;
+}
+void parser_prod___ABraassignMethid___n_obra__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3548;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___n_obra__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3550 */
+  ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3551 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraassignMethid___n_cbra__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3553;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___n_cbra__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3555 */
+  ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3556 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraassignMethid___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3558;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3560 */
+  ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3561 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3581;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3583 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3583);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3584 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3585 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3585);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TObra, ID_TObra)) /*cast TObra*/;
+      /* ./parser//parser_prod.nit:3586 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3586);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3587 */
+      ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3589 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3589);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3591 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3593 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3593);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3594 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3595 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3595);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
+      /* ./parser//parser_prod.nit:3596 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3596);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3597 */
+      ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3599 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3599);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3601 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3603 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3603);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3604 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3605 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3605);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:3606 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3606);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3607 */
+      ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3609 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3609);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3611 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraassignMethid___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3615;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3617 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3617);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3618 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3618);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3619 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3619);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraassignMethid___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3622;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3624 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3624);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3625 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3625);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3626 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3626);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_table){
+  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos87]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3564;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3564 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos87] = 1;
+  return;
+}
+void parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos88]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3566;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___init_abraassignmethid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:3572 */
+  CALL_parser_prod___ABraassignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3573 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3573);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3574 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3574);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3575 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3575);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3576 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3576);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3577 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3577);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3578 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3578);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos88] = 1;
+  return;
+}
+void parser_prod___ASignature___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3630;
+  fra.me.meth = LOCATE_parser_prod___ASignature___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3632 */
+  ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3633 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3634 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3634);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3663;
+  fra.me.meth = LOCATE_parser_prod___ASignature___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3665 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3665);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:3666 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3666);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:3667 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast AParam*/;
+          /* ./parser//parser_prod.nit:3668 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3668);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:3669 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3669);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:3670 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3670);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:3672 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3672);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:3674 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:3665 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:3677 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(false);
+      REGB1 = REGB0;
+    } else {
+      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB1 = REGB0;
+    }
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3678 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3679 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3679);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:3680 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3680);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3681 */
+      ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3683 */
+      ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:3685 */
+    goto label1;
+  }
+  REGB1 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3687 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3687);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:3688 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3688);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
+      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB1 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:3689 */
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB1 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB1 = REGB2;
+          }
+        }
+        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast AClosureDecl*/;
+          /* ./parser//parser_prod.nit:3690 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3690);
+            nit_exit(1);
+          }
+          REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:3691 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3691);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:3692 */
+          if (UNTAG_Bool(REGB1)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3692);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:3694 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3694);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+        }
+        /* ./parser//parser_prod.nit:3696 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:3687 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label3: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASignature___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3701;
+  fra.me.meth = LOCATE_parser_prod___ASignature___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3703 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3703);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:3704 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:3703 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3706 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:3707 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3707);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3709 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3709);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3710 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:3709 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASignature___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3714;
+  fra.me.meth = LOCATE_parser_prod___ASignature___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3717 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3717);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:3718 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:3718 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:3719 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3719);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:3720 */
+    } else {
+      /* ./parser//parser_prod.nit:3718 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3723 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:3724 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3724);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3727 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3727);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:3728 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:3728 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:3729 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3729);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:3730 */
+    } else {
+      /* ./parser//parser_prod.nit:3728 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASignature___empty_init(val_t p0, int* init_table){
+  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos89]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3638;
+  fra.me.meth = LOCATE_parser_prod___ASignature___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3638 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos89] = 1;
+  return;
+}
+void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos90]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3640;
+  fra.me.meth = LOCATE_parser_prod___ASignature___init_asignature;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:3646 */
+  CALL_parser_prod___ASignature___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:3647 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_AParam, ID_AParam)) /*cast AParam*/;
+      /* ./parser//parser_prod.nit:3648 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3648);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:3649 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_params");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3649);
+        nit_exit(1);
+      }
+      fra.me.REG[5] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+      /* ./parser//parser_prod.nit:3650 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:3647 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  /* ./parser//parser_prod.nit:3652 */
+  ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3653 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3654 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3654);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:3656 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast AClosureDecl*/;
+      /* ./parser//parser_prod.nit:3657 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3657);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:3658 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3658);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:3659 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:3656 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos90] = 1;
+  return;
+}
+void parser_prod___AParam___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3736;
+  fra.me.meth = LOCATE_parser_prod___AParam___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3738 */
+  ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3739 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParam___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3741;
+  fra.me.meth = LOCATE_parser_prod___AParam___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3743 */
+  ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3744 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3745 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3745);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParam___n_dotdotdot__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3748;
+  fra.me.meth = LOCATE_parser_prod___AParam___n_dotdotdot__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3750 */
+  ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3751 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3752 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3752);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3777;
+  fra.me.meth = LOCATE_parser_prod___AParam___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3779 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3779);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3780 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3781 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3781);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:3782 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3782);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3783 */
+      ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3785 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3785);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3787 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:3789 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3790 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3791 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3791);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:3792 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3792);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3793 */
+      ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3795 */
+      ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:3797 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:3799 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3800 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3801 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3801);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
+      /* ./parser//parser_prod.nit:3802 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3802);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3803 */
+      ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3805 */
+      ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:3807 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParam___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3811;
+  fra.me.meth = LOCATE_parser_prod___AParam___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3813 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3813);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3814 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:3815 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3815);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3817 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
+    /* ./parser//parser_prod.nit:3818 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3818);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParam___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3822;
+  fra.me.meth = LOCATE_parser_prod___AParam___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3824 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3824);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3825 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:3826 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3826);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3828 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
+    /* ./parser//parser_prod.nit:3829 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3829);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParam___empty_init(val_t p0, int* init_table){
+  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos91]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3756;
+  fra.me.meth = LOCATE_parser_prod___AParam___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3756 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos91] = 1;
+  return;
+}
+void parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos92]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3758;
+  fra.me.meth = LOCATE_parser_prod___AParam___init_aparam;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:3764 */
+  CALL_parser_prod___AParam___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3765 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3765);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3766 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3766);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3767 */
+  ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3768 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3769 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3769);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:3771 */
+  ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3772 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3773 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3773);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos92] = 1;
+  return;
+}
+void parser_prod___AClosureDecl___n_kwbreak__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3834;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_kwbreak__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3836 */
+  ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3837 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3838 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3838);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___n_bang__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3841;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_bang__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3843 */
+  ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3844 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3846;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3848 */
+  ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3849 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___n_signature__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3851;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_signature__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3853 */
+  ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3854 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3856;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3858 */
+  ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3859 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3860 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3860);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3891;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:3893 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3894 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3895 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3895);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
+      /* ./parser//parser_prod.nit:3896 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3896);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3897 */
+      ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3899 */
+      ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:3901 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3903 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3903);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3904 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3905 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3905);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TBang, ID_TBang)) /*cast TBang*/;
+      /* ./parser//parser_prod.nit:3906 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3906);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3907 */
+      ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3909 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3909);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3911 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3913 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3913);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3914 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3915 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3915);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:3916 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3916);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3917 */
+      ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3919 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3919);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3921 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3923 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_signature");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3923);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3924 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3925 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3925);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      /* ./parser//parser_prod.nit:3926 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3926);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3927 */
+      ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3929 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3929);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:3931 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:3933 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3934 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:3935 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3935);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:3936 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3936);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:3937 */
+      ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:3939 */
+      ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:3941 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3945;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3947 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
+    /* ./parser//parser_prod.nit:3948 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3948);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3950 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3950);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3951 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3951);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3952 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_signature");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3952);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3953 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:3954 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3954);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3958;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3960 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
+    /* ./parser//parser_prod.nit:3961 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3961);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3963 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3963);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3964 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3964);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3965 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_signature");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3965);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3966 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:3967 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3967);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table){
+  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos93]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3864;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3864 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos93] = 1;
+  return;
+}
+void parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos94]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3866;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___init_aclosuredecl;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:3874 */
+  CALL_parser_prod___AClosureDecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3875 */
+  ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3876 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3877 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3877);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3879 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3879);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3880 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3880);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3881 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3881);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3882 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3882);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3883 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3883);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3884 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3884);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3885 */
+  ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3886 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3887 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3887);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos94] = 1;
+  return;
+}
+void parser_prod___AType___n_kwnullable__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3972;
+  fra.me.meth = LOCATE_parser_prod___AType___n_kwnullable__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3974 */
+  ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3975 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3976 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3976);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AType___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3979;
+  fra.me.meth = LOCATE_parser_prod___AType___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3981 */
+  ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3982 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4007;
+  fra.me.meth = LOCATE_parser_prod___AType___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4009 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4010 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4011 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4011);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
+      /* ./parser//parser_prod.nit:4012 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4012);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4013 */
+      ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4015 */
+      ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4017 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4019 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4019);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AType____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4020 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4021 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4021);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+      /* ./parser//parser_prod.nit:4022 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4022);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4023 */
+      ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4025 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4025);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4027 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4029 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4029);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:4030 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4030);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:4031 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+          /* ./parser//parser_prod.nit:4032 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4032);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:4033 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4033);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:4034 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4034);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:4036 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4036);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:4038 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:4029 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AType___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4043;
+  fra.me.meth = LOCATE_parser_prod___AType___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4045 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
+    /* ./parser//parser_prod.nit:4046 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4046);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4048 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4048);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AType____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4049 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4049);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4050 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:4049 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AType___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4054;
+  fra.me.meth = LOCATE_parser_prod___AType___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4056 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
+    /* ./parser//parser_prod.nit:4057 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4057);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4059 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4059);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AType____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4061 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4061);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:4062 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:4062 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:4063 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4063);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:4064 */
+    } else {
+      /* ./parser//parser_prod.nit:4062 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AType___empty_init(val_t p0, int* init_table){
+  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos95]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3985;
+  fra.me.meth = LOCATE_parser_prod___AType___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:3985 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos95] = 1;
+  return;
+}
+void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos96]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 3987;
+  fra.me.meth = LOCATE_parser_prod___AType___init_atype;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:3993 */
+  CALL_parser_prod___AType___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3994 */
+  ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3995 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:3996 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3996);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:3998 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3998);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:3999 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3999);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:4000 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:4001 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4001);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:4002 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_types");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4002);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:4003 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:4000 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos96] = 1;
+  return;
+}
+void parser_prod___ALabel___n_kwlabel__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4070;
+  fra.me.meth = LOCATE_parser_prod___ALabel___n_kwlabel__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4072 */
+  ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4073 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALabel___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4075;
+  fra.me.meth = LOCATE_parser_prod___ALabel___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4077 */
+  ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4078 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4095;
+  fra.me.meth = LOCATE_parser_prod___ALabel___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4097 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwlabel");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4097);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4098 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4099 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4099);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwlabel, ID_TKwlabel)) /*cast TKwlabel*/;
+      /* ./parser//parser_prod.nit:4100 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4100);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4101 */
+      ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4103 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4103);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4105 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4107 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4107);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4108 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4109 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4109);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:4110 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4110);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4111 */
+      ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4113 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4113);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4115 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALabel___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4119;
+  fra.me.meth = LOCATE_parser_prod___ALabel___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4121 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwlabel");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4121);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4122 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4122);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALabel___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4125;
+  fra.me.meth = LOCATE_parser_prod___ALabel___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4127 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwlabel");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4127);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4128 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4128);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALabel___empty_init(val_t p0, int* init_table){
+  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos97]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4081;
+  fra.me.meth = LOCATE_parser_prod___ALabel___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4081 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos97] = 1;
+  return;
+}
+void parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos98]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4083;
+  fra.me.meth = LOCATE_parser_prod___ALabel___init_alabel;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:4088 */
+  CALL_parser_prod___ALabel___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4089 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4089);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4090 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4090);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4091 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4091);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4092 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4092);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos98] = 1;
+  return;
+}
+void parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4147;
+  fra.me.meth = LOCATE_parser_prod___ABlockExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4149 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4149);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:4150 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4150);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:4151 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:4152 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4152);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:4153 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4153);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:4154 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4154);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:4156 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4156);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:4158 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:4149 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4163;
+  fra.me.meth = LOCATE_parser_prod___ABlockExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4165 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4165);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4166 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:4165 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABlockExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4170;
+  fra.me.meth = LOCATE_parser_prod___ABlockExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4173 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4173);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:4174 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:4174 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:4175 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4175);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:4176 */
+    } else {
+      /* ./parser//parser_prod.nit:4174 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
+  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos99]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4133;
+  fra.me.meth = LOCATE_parser_prod___ABlockExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4133 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos99] = 1;
+  return;
+}
+void parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_table){
+  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos100]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4135;
+  fra.me.meth = LOCATE_parser_prod___ABlockExpr___init_ablockexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4139 */
+  CALL_parser_prod___ABlockExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:4140 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4141 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4141);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:4142 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4142);
+        nit_exit(1);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:4143 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:4140 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos100] = 1;
+  return;
+}
+void parser_prod___AVardeclExpr___n_kwvar__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4182;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_kwvar__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4184 */
+  ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4185 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4187;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4189 */
+  ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4190 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4192;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4194 */
+  ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4195 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4196 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4196);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4199;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4201 */
+  ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4202 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4203 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4203);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4206;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4208 */
+  ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4209 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4210 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4210);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4243;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4245 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4245);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4246 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4247 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4247);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwvar, ID_TKwvar)) /*cast TKwvar*/;
+      /* ./parser//parser_prod.nit:4248 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4248);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4249 */
+      ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4251 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4251);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4253 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4255 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4255);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4256 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4257 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4257);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:4258 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4258);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4259 */
+      ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4261 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4261);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4263 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4265 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4266 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4267 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4267);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:4268 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4268);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4269 */
+      ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4271 */
+      ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4273 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4275 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4276 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4277 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4277);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:4278 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4278);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4279 */
+      ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4281 */
+      ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4283 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4285 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4286 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4287 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4287);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4288 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4288);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4289 */
+      ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4291 */
+      ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4293 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4297;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4299 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4299);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4300 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4300);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4301 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:4302 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4302);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4304 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+    /* ./parser//parser_prod.nit:4305 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4305);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4307 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4308 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4308);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4312;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4314 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4314);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4315 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4315);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4316 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+    /* ./parser//parser_prod.nit:4317 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4317);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4319 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+    /* ./parser//parser_prod.nit:4320 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4320);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4322 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4323 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4323);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table){
+  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos101]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4214;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4214 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos101] = 1;
+  return;
+}
+void parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos102]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4216;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___init_avardeclexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:4224 */
+  CALL_parser_prod___AVardeclExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4225 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4225);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4226 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4226);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4227 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4227);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4228 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4228);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4229 */
+  ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4230 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4231 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4231);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4233 */
+  ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4234 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4235 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4235);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4237 */
+  ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4238 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4239 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4239);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos102] = 1;
+  return;
+}
+void parser_prod___AReturnExpr___n_kwreturn__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4328;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___n_kwreturn__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4330 */
+  ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4331 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4332 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4332);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReturnExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4335;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4337 */
+  ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4338 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4339 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4339);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4361;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4363 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4364 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4365 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4365);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
+      /* ./parser//parser_prod.nit:4366 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4366);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4367 */
+      ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4369 */
+      ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4371 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4373 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4374 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4375 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4375);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4376 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4376);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4377 */
+      ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4379 */
+      ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4381 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4385;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4387 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
+    /* ./parser//parser_prod.nit:4388 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4388);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4390 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4391 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4391);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReturnExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4395;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4397 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
+    /* ./parser//parser_prod.nit:4398 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4398);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4400 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4401 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4401);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
+  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos103]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4343;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4343 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos103] = 1;
+  return;
+}
+void parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos104]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4345;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___init_areturnexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:4350 */
+  CALL_parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4351 */
+  ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4352 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4353 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4353);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4355 */
+  ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4356 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4357 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4357);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos104] = 1;
+  return;
+}
+void parser_prod___ABreakExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4411;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4413 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4414 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4415 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4415);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakExpr___n_kwbreak__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4406;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___n_kwbreak__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4408 */
+  ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4409 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4418;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4420 */
+  ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4421 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4422 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4422);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4447;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4449 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4449);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4450 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4451 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4451);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
+      /* ./parser//parser_prod.nit:4452 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4452);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4453 */
+      ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4455 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4455);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4457 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4459 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4460 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4461 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4461);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:4462 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4462);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4463 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4465 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4467 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4469 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4470 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4471 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4471);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4472 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4472);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4473 */
+      ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4475 */
+      ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4477 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4481;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4483 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4483);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4484 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:4485 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4485);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4487 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4488 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4488);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4492;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4494 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4494);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4495 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:4496 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4496);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4498 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4499 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4499);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
+  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos105]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4426;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4426 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos105] = 1;
+  return;
+}
+void parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos106]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4428;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___init_abreakexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:4434 */
+  CALL_parser_prod___ABreakExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4435 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4435);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4436 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4436);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4437 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4438 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4439 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4439);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4441 */
+  ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4442 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4443 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4443);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos106] = 1;
+  return;
+}
+void parser_prod___AAbortExpr___n_kwabort__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4504;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___n_kwabort__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4506 */
+  ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4507 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4521;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4523 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabort");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4523);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4524 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4525 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4525);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwabort, ID_TKwabort)) /*cast TKwabort*/;
+      /* ./parser//parser_prod.nit:4526 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4526);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4527 */
+      ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4529 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4529);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4531 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbortExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4535;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4537 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabort");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4537);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbortExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4540;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4542 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabort");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4542);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
+  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos107]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4510;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4510 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos107] = 1;
+  return;
+}
+void parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int* init_table){
+  int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos108]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4512;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___init_aabortexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4516 */
+  CALL_parser_prod___AAbortExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4517 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4517);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4518 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4518);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos108] = 1;
+  return;
+}
+void parser_prod___AContinueExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4553;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4555 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4556 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4557 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4557);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AContinueExpr___n_kwcontinue__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4546;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___n_kwcontinue__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4548 */
+  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4549 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4550 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4550);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AContinueExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4560;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4562 */
+  ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4563 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4564 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4564);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4591;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4593 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4594 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4595 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4595);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
+      /* ./parser//parser_prod.nit:4596 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4596);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4597 */
+      ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4599 */
+      ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4601 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4603 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4604 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4605 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4605);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:4606 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4606);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4607 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4609 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4611 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4613 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4614 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4615 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4615);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4616 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4616);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4617 */
+      ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4619 */
+      ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4621 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4625;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4627 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
+    /* ./parser//parser_prod.nit:4628 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4628);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4630 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:4631 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4631);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4633 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4634 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4634);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AContinueExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4638;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4640 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
+    /* ./parser//parser_prod.nit:4641 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4641);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4643 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:4644 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4644);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4646 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4647 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4647);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table){
+  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos109]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4568;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4568 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos109] = 1;
+  return;
+}
+void parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos110]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4570;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___init_acontinueexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:4576 */
+  CALL_parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4577 */
+  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4578 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4579 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4579);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4581 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4582 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4583 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4583);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4585 */
+  ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4586 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4587 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4587);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos110] = 1;
+  return;
+}
+void parser_prod___ADoExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4664;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4666 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4667 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4668 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4668);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoExpr___n_kwdo__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4652;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___n_kwdo__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4654 */
+  ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4655 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4657;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4659 */
+  ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4660 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4661 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4661);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4693;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4695 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4695);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4696 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4697 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4697);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
+      /* ./parser//parser_prod.nit:4698 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4698);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4699 */
+      ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4701 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4701);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4703 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4705 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4706 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4707 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4707);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4708 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4708);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4709 */
+      ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4711 */
+      ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4713 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4715 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4716 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4717 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4717);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:4718 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4718);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4719 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4721 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4723 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4727;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4729 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4729);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4730 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4731 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4731);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4733 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:4734 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4734);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4738;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4740 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4740);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4741 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4742 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4742);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4744 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:4745 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4745);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
+  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos111]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4672;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4672 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos111] = 1;
+  return;
+}
+void parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos112]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4674;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___init_adoexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:4680 */
+  CALL_parser_prod___ADoExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4681 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4681);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4682 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4682);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4683 */
+  ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4684 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4685 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4685);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4687 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4688 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4689 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4689);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos112] = 1;
+  return;
+}
+void parser_prod___AIfExpr___n_kwif__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4750;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_kwif__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4752 */
+  ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4753 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4755;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4757 */
+  ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4758 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___n_then__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4760;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_then__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4762 */
+  ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4763 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4764 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4764);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___n_else__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4767;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_else__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4769 */
+  ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4770 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4771 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4771);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4799;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4801 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4801);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4802 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4803 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4803);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
+      /* ./parser//parser_prod.nit:4804 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4804);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4805 */
+      ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4807 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4807);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4809 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4811 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4811);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4812 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4813 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4813);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4814 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4814);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4815 */
+      ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4817 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4817);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4819 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4821 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4822 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4823 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4823);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4824 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4824);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4825 */
+      ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4827 */
+      ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4829 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:4831 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4832 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4833 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4833);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4834 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4834);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4835 */
+      ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4837 */
+      ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4839 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4843;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4845 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4845);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4846 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4846);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4847 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4848 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4848);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4850 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4851 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4851);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4855;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4857 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4857);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4858 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4858);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4859 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4860 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4860);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4862 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:4863 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4863);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
+  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos113]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4775;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4775 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos113] = 1;
+  return;
+}
+void parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos114]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4777;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___init_aifexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:4784 */
+  CALL_parser_prod___AIfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4785 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4785);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4786 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4786);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4787 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4787);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4788 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4788);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4789 */
+  ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4790 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4791 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4791);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:4793 */
+  ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4794 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4795 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4795);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos114] = 1;
+  return;
+}
+void parser_prod___AIfexprExpr___n_kwif__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4868;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_kwif__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4870 */
+  ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4871 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4873;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4875 */
+  ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4876 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___n_kwthen__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4878;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_kwthen__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4880 */
+  ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4881 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___n_then__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4883;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_then__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4885 */
+  ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4886 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___n_kwelse__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4888;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_kwelse__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4890 */
+  ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4891 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___n_else__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4893;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_else__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:4895 */
+  ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4896 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4925;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4927 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4927);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4928 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4929 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4929);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
+      /* ./parser//parser_prod.nit:4930 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4930);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4931 */
+      ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4933 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4933);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4935 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4937 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4937);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4938 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4939 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4939);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4940 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4940);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4941 */
+      ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4943 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4943);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4945 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4947 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwthen");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4947);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4948 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4949 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4949);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwthen, ID_TKwthen)) /*cast TKwthen*/;
+      /* ./parser//parser_prod.nit:4950 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4950);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4951 */
+      ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4953 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4953);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4955 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4957 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_then");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4957);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4958 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4959 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4959);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4960 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4960);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4961 */
+      ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4963 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4963);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4965 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4967 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwelse");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4967);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4968 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4969 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4969);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwelse, ID_TKwelse)) /*cast TKwelse*/;
+      /* ./parser//parser_prod.nit:4970 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4970);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4971 */
+      ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4973 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4973);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4975 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4977 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_else");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4977);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:4978 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:4979 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4979);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:4980 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4980);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:4981 */
+      ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4983 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4983);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:4985 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4989;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4991 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4991);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4992 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4992);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4993 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwthen");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4993);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4994 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_then");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4994);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4995 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwelse");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4995);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4996 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_else");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4996);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4999;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5001 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5001);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5002 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5002);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5003 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwthen");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5003);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5004 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_then");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5004);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5005 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwelse");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5005);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5006 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_else");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5006);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
+  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos115]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4899;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:4899 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos115] = 1;
+  return;
+}
+void parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos116]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 4901;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___init_aifexprexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:4910 */
+  CALL_parser_prod___AIfexprExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4911 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4911);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4912 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4912);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4913 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4913);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4914 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4914);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4915 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4915);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4916 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4916);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4917 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4917);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4918 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4918);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4919 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4919);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4920 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4920);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:4921 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4921);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:4922 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4922);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos116] = 1;
+  return;
+}
+void parser_prod___AWhileExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5032;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5034 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5035 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5036 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5036);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___n_kwwhile__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5010;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_kwwhile__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5012 */
+  ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5013 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5015;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5017 */
+  ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5018 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___n_kwdo__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5020;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_kwdo__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5022 */
+  ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5023 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5025;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5027 */
+  ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5028 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5029 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5029);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5067;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5069 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwhile");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5069);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5070 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5071 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5071);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwwhile, ID_TKwwhile)) /*cast TKwwhile*/;
+      /* ./parser//parser_prod.nit:5072 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5072);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5073 */
+      ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5075 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5075);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5077 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5079 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5079);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5080 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5081 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5081);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5082 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5082);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5083 */
+      ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5085 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5085);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5087 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5089 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5089);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5090 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5091 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5091);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
+      /* ./parser//parser_prod.nit:5092 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5092);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5093 */
+      ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5095 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5095);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5097 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5099 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5100 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5101 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5101);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5102 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5102);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5103 */
+      ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5105 */
+      ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5107 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5109 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5110 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5111 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5111);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:5112 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5112);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5113 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5115 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5117 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5121;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5123 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwhile");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5123);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5124 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5124);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5125 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5125);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5126 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5127 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5127);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5129 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:5130 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5130);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5134;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5136 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwhile");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5136);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5137 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5137);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5138 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5138);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5139 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5140 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5140);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5142 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:5143 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5143);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
+  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos117]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5040;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5040 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos117] = 1;
+  return;
+}
+void parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos118]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5042;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___init_awhileexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:5050 */
+  CALL_parser_prod___AWhileExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5051 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5051);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5052 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5052);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5053 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5053);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5054 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5054);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5055 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5055);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5056 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5056);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5057 */
+  ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5058 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5059 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5059);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:5061 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5062 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5063 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5063);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos118] = 1;
+  return;
+}
+void parser_prod___ALoopExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5160;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5162 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5163 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5164 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5164);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALoopExpr___n_kwloop__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5148;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___n_kwloop__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5150 */
+  ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5151 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALoopExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5153;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5155 */
+  ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5156 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5157 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5157);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5189;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5191 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwloop");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5191);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5192 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5193 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5193);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast TKwloop*/;
+      /* ./parser//parser_prod.nit:5194 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5194);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5195 */
+      ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5197 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5197);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5199 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5201 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5202 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5203 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5203);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5204 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5204);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5205 */
+      ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5207 */
+      ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5209 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5211 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5212 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5213 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5213);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:5214 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5214);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5215 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5217 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5219 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5223;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5225 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwloop");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5225);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5226 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5227 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5227);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5229 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:5230 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5230);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALoopExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5234;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5236 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwloop");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5236);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5237 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5238 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5238);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5240 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:5241 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5241);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
+  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos119]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5168;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5168 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos119] = 1;
+  return;
+}
+void parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos120]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5170;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___init_aloopexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:5176 */
+  CALL_parser_prod___ALoopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5177 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5177);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5178 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5178);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5179 */
+  ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5180 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5181 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5181);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:5183 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5184 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5185 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5185);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos120] = 1;
+  return;
+}
+void parser_prod___AForExpr___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5273;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5275 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5276 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5277 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5277);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___n_kwfor__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5246;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___n_kwfor__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5248 */
+  ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5249 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5251;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5253 */
+  ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5254 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5256;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5258 */
+  ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5259 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___n_kwdo__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5261;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___n_kwdo__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5263 */
+  ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5264 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___n_block__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5266;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___n_block__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5268 */
+  ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5269 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5270 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5270);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5311;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5313 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfor");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5313);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5314 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5315 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5315);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwfor, ID_TKwfor)) /*cast TKwfor*/;
+      /* ./parser//parser_prod.nit:5316 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5316);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5317 */
+      ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5319 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5319);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5321 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5323 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5323);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5324 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5325 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5325);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:5326 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5326);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5327 */
+      ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5329 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5329);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5331 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5333 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5333);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5334 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5335 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5335);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5336 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5336);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5337 */
+      ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5339 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5339);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5341 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5343 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5343);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5344 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5345 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5345);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
+      /* ./parser//parser_prod.nit:5346 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5346);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5347 */
+      ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5349 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5349);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5351 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5353 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5354 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5355 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5355);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5356 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5356);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5357 */
+      ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5359 */
+      ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5361 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5363 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5364 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5365 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5365);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:5366 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5366);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5367 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5369 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5371 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5375;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5377 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfor");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5377);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5378 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5378);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5379 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5379);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5380 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5380);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5381 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5382 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5382);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5384 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:5385 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5385);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5389;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5391 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfor");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5391);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5392 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5392);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5393 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5393);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5394 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5394);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5395 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5396 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5396);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5398 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:5399 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5399);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
+  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos121]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5281;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5281 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos121] = 1;
+  return;
+}
+void parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos122]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5283;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___init_aforexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:5292 */
+  CALL_parser_prod___AForExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5293 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5293);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5294 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5294);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5295 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5295);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5296 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5296);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5297 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5297);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5298 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5298);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5299 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5299);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5300 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5300);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5301 */
+  ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5302 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5303 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5303);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:5305 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5306 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5307 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5307);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos122] = 1;
+  return;
+}
+void parser_prod___AAssertExpr___n_kwassert__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5404;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_kwassert__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5406 */
+  ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5407 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5409;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5411 */
+  ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5412 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5413 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5413);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5416;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5418 */
+  ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5419 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___n_else__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5421;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_else__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5423 */
+  ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5424 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5425 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5425);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5453;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5455 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwassert");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5455);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5456 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5457 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5457);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwassert, ID_TKwassert)) /*cast TKwassert*/;
+      /* ./parser//parser_prod.nit:5458 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5458);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5459 */
+      ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5461 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5461);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5463 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5465 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5466 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5467 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5467);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:5468 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5468);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5469 */
+      ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5471 */
+      ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5473 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5475 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5475);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5476 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5477 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5477);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5478 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5478);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5479 */
+      ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5481 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5481);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5483 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:5485 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5486 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5487 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5487);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5488 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5488);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5489 */
+      ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5491 */
+      ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5493 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5497;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5499 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwassert");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5499);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5500 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+    /* ./parser//parser_prod.nit:5501 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5501);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5503 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5503);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5504 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5505 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5505);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5509;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5511 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwassert");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5511);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5512 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+    /* ./parser//parser_prod.nit:5513 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5513);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5515 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5515);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5516 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:5517 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5517);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
+  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos123]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5429;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5429 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos123] = 1;
+  return;
+}
+void parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos124]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5431;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___init_aassertexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:5438 */
+  CALL_parser_prod___AAssertExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5439 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5439);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5440 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5440);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5441 */
+  ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5442 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5443 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5443);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5445 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5445);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5446 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5446);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5447 */
+  ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5448 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5449 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5449);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos124] = 1;
+  return;
+}
+void parser_prod___AOnceExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5527;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5529 */
+  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5530 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOnceExpr___n_kwonce__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5522;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___n_kwonce__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5524 */
+  ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5525 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5547;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5549 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwonce");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5549);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5550 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5551 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5551);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwonce, ID_TKwonce)) /*cast TKwonce*/;
+      /* ./parser//parser_prod.nit:5552 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5552);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5553 */
+      ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5555 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5555);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5557 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5559 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5559);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5560 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5561 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5561);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5562 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5562);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5563 */
+      ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5565 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5565);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5567 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOnceExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5571;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5573 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwonce");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5573);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5574 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5574);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOnceExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5577;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5579 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwonce");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5579);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5580 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5580);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
+  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos125]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5533;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5533 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos125] = 1;
+  return;
+}
+void parser_prod___AOnceExpr___init_aonceexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos126]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5535;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___init_aonceexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5540 */
+  CALL_parser_prod___AOnceExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5541 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5541);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5542 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5542);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5543 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5543);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5544 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5544);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos126] = 1;
+  return;
+}
+void parser_prod___ASendExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5584;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5586 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5587 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5601;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5603 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5603);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5604 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5605 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5605);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5606 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5606);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5607 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5609 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5609);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5611 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASendExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5615;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5617 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5617);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASendExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5620;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5622 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5622);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
+  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos127]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5590;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5590 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos127] = 1;
+  return;
+}
+void parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int* init_table){
+  int itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos128]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5592;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___init_asendexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5596 */
+  CALL_parser_prod___ASendExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5597 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5597);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5598 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5598);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos128] = 1;
+  return;
+}
+void parser_prod___ABinopExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5626;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5628 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5629 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABinopExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5631;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5633 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5634 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5651;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5653 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5653);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5654 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5655 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5655);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5656 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5656);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5657 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5659 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5659);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5661 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5663 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5663);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5664 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5665 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5665);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5666 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5666);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5667 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5669 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5669);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5671 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABinopExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5675;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5677 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5677);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5678 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5678);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABinopExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5681;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5683 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5683);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5684 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5684);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
+  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos129]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5637;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5637 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos129] = 1;
+  return;
+}
+void parser_prod___ABinopExpr___init_abinopexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos130]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5639;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___init_abinopexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5644 */
+  CALL_parser_prod___ABinopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5645 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5645);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5646 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5646);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5647 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5647);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5648 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5648);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos130] = 1;
+  return;
+}
+void parser_prod___AOrExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5688;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5690 */
+  ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5691 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5693;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5695 */
+  ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5696 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5713;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5715 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5715);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5716 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5717 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5717);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5718 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5718);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5719 */
+      ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5721 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5721);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5723 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5725 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5725);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5726 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5727 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5727);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5728 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5728);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5729 */
+      ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5731 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5731);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5733 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5737;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5739 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5739);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5740 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5740);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5743;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5745 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5745);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5746 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5746);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
+  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos131]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5699;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5699 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos131] = 1;
+  return;
+}
+void parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos132]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5701;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___init_aorexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5706 */
+  CALL_parser_prod___AOrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5707 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5707);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5708 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5708);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5709 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5709);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5710 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5710);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos132] = 1;
+  return;
+}
+void parser_prod___AAndExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5750;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5752 */
+  ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5753 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAndExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5755;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5757 */
+  ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5758 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5775;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5777 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5777);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5778 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5779 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5779);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5780 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5780);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5781 */
+      ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5783 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5783);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5785 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5787 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5787);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5788 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5789 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5789);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5790 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5790);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5791 */
+      ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5793 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5793);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5795 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAndExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5799;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5801 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5801);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5802 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5802);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAndExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5805;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5807 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5807);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5808 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5808);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
+  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos133]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5761;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5761 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos133] = 1;
+  return;
+}
+void parser_prod___AAndExpr___init_aandexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos134]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5763;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___init_aandexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5768 */
+  CALL_parser_prod___AAndExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5769 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5769);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5770 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5770);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5771 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5771);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5772 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5772);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos134] = 1;
+  return;
+}
+void parser_prod___ANotExpr___n_kwnot__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5812;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___n_kwnot__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5814 */
+  ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5815 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANotExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5817;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5819 */
+  ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5820 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5837;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5839 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5839);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5840 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5841 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5841);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
+      /* ./parser//parser_prod.nit:5842 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5842);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5843 */
+      ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5845 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5845);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5847 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5849 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5849);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5850 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5851 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5851);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5852 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5852);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5853 */
+      ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5855 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5855);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5857 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5861;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5863 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5863);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5864 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5864);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANotExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5867;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5869 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5869);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5870 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5870);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
+  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos135]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5823;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5823 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos135] = 1;
+  return;
+}
+void parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos136]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5825;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___init_anotexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5830 */
+  CALL_parser_prod___ANotExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5831 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5831);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5832 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5832);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5833 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5833);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5834 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5834);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos136] = 1;
+  return;
+}
+void parser_prod___AEqExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5874;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5876 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5877 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5879;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5881 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5882 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5899;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5901 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5901);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5902 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5903 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5903);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5904 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5904);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5905 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5907 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5907);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5909 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5911 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5911);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5912 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5913 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5913);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5914 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5914);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5915 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5917 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5917);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5919 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5923;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5925 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5925);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5926 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5926);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5929;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5931 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5931);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5932 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5932);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
+  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos137]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5885;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5885 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos137] = 1;
+  return;
+}
+void parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos138]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5887;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___init_aeqexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5892 */
+  CALL_parser_prod___AEqExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5893 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5893);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5894 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5894);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5895 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5895);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5896 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5896);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos138] = 1;
+  return;
+}
+void parser_prod___AEeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5936;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5938 */
+  ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5939 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5941;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:5943 */
+  ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5944 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5961;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5963 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5963);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5964 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5965 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5965);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5966 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5966);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5967 */
+      ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5969 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5969);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5971 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5973 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5973);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:5974 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:5975 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5975);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:5976 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5976);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:5977 */
+      ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5979 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5979);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:5981 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5985;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5987 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5987);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5988 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5988);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5991;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5993 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5993);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5994 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5994);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
+  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos139]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5947;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:5947 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos139] = 1;
+  return;
+}
+void parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos140]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5949;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___init_aeeexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5954 */
+  CALL_parser_prod___AEeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5955 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5955);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5956 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5956);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:5957 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5957);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:5958 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5958);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos140] = 1;
+  return;
+}
+void parser_prod___ANeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5998;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6000 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6001 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6003;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6005 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6006 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6023;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6025 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6025);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6026 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6027 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6027);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6028 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6028);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6029 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6031 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6031);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6033 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6035 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6035);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6036 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6037 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6037);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6038 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6038);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6039 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6041 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6041);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6043 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6047;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6049 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6049);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6050 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6050);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6053;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6055 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6055);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6056 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6056);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
+  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos141]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6009;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6009 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos141] = 1;
+  return;
+}
+void parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos142]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6011;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___init_aneexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6016 */
+  CALL_parser_prod___ANeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6017 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6017);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6018 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6018);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6019 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6019);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6020 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6020);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos142] = 1;
+  return;
+}
+void parser_prod___ALtExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6060;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6062 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6063 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6065;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6067 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6068 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6085;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6087 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6087);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6088 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6089 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6089);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6090 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6090);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6091 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6093 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6093);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6095 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6097 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6097);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6098 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6099 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6099);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6100 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6100);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6101 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6103 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6103);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6105 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6109;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6111 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6111);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6112 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6112);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6115;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6117 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6117);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6118 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6118);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
+  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos143]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6071;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6071 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos143] = 1;
+  return;
+}
+void parser_prod___ALtExpr___init_altexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos144]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6073;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___init_altexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6078 */
+  CALL_parser_prod___ALtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6079 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6079);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6080 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6080);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6081 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6081);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6082 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6082);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos144] = 1;
+  return;
+}
+void parser_prod___ALeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6122;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6124 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6125 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6127;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6129 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6130 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6147;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6149 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6149);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6150 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6151 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6151);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6152 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6152);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6153 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6155 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6155);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6157 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6159 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6159);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6160 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6161 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6161);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6162 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6162);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6163 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6165 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6165);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6167 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6171;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6173 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6173);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6174 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6174);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6177;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6179 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6179);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6180 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6180);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
+  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos145]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6133;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6133 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos145] = 1;
+  return;
+}
+void parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos146]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6135;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___init_aleexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6140 */
+  CALL_parser_prod___ALeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6141 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6141);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6142 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6142);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6143 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6143);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6144 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6144);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos146] = 1;
+  return;
+}
+void parser_prod___AGtExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6184;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6186 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6187 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6189;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6191 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6192 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6209;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6211 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6211);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6212 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6213 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6213);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6214 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6214);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6215 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6217 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6217);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6219 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6221 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6221);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6222 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6223 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6223);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6224 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6224);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6225 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6227 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6227);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6229 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6233;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6235 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6235);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6236 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6236);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6239;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6241 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6241);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6242 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6242);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
+  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos147]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6195;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6195 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos147] = 1;
+  return;
+}
+void parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos148]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6197;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___init_agtexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6202 */
+  CALL_parser_prod___AGtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6203 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6203);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6204 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6204);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6205 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6205);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6206 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6206);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos148] = 1;
+  return;
+}
+void parser_prod___AGeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6246;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6248 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6249 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6251;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6253 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6254 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6271;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6273 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6273);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6274 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6275 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6275);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6276 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6276);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6277 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6279 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6279);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6281 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6283 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6283);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6284 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6285 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6285);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6286 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6286);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6287 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6289 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6289);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6291 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6295;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6297 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6297);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6298 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6298);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6301;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6303 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6303);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6304 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6304);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
+  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos149]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6257;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6257 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos149] = 1;
+  return;
+}
+void parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos150]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6259;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___init_ageexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6264 */
+  CALL_parser_prod___AGeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6265 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6265);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6266 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6266);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6267 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6267);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6268 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6268);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos150] = 1;
+  return;
+}
+void parser_prod___AIsaExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6308;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6310 */
+  ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6311 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIsaExpr___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6313;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6315 */
+  ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6316 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6333;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6335 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6335);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6336 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6337 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6337);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6338 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6338);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6339 */
+      ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6341 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6341);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6343 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6345 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6345);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6346 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6347 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6347);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:6348 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6348);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6349 */
+      ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6351 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6351);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6353 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6357;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6359 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6359);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6360 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6360);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIsaExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6363;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6365 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6365);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6366 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6366);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
+  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos151]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6319;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6319 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos151] = 1;
+  return;
+}
+void parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos152]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6321;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___init_aisaexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6326 */
+  CALL_parser_prod___AIsaExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6327 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6327);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6328 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6328);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6329 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6329);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6330 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6330);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos152] = 1;
+  return;
+}
+void parser_prod___APlusExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6370;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6372 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6373 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6375;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6377 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6378 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6395;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6397 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6397);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6398 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6399 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6399);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6400 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6400);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6401 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6403 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6403);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6405 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6407 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6407);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6408 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6409 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6409);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6410 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6410);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6411 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6413 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6413);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6415 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6419;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6421 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6421);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6422 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6422);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6425;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6427 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6427);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6428 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6428);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
+  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos153]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6381;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6381 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos153] = 1;
+  return;
+}
+void parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos154]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6383;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___init_aplusexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6388 */
+  CALL_parser_prod___APlusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6389 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6389);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6390 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6390);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6391 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6391);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6392 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6392);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos154] = 1;
+  return;
+}
+void parser_prod___AMinusExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6432;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6434 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6435 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6437;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6439 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6440 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6457;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6459 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6459);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6460 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6461 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6461);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6462 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6462);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6463 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6465 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6465);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6467 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6469 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6469);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6470 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6471 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6471);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6472 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6472);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6473 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6475 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6475);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6477 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6481;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6483 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6483);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6484 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6484);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6487;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6489 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6489);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6490 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6490);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
+  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos155]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6443;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6443 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos155] = 1;
+  return;
+}
+void parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos156]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6445;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___init_aminusexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6450 */
+  CALL_parser_prod___AMinusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6451 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6451);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6452 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6452);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6453 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6453);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6454 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6454);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos156] = 1;
+  return;
+}
+void parser_prod___AStarshipExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6494;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6496 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6497 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6499;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6501 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6502 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6519;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6521 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6521);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6522 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6523 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6523);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6524 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6524);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6525 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6527 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6527);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6529 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6531 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6531);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6532 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6533 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6533);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6534 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6534);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6535 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6537 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6537);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6539 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6543;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6545 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6545);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6546 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6546);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6549;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6551 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6551);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6552 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6552);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table){
+  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos157]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6505;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6505 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos157] = 1;
+  return;
+}
+void parser_prod___AStarshipExpr___init_astarshipexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos158]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6507;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___init_astarshipexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6512 */
+  CALL_parser_prod___AStarshipExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6513 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6513);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6514 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6514);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6515 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6515);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6516 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6516);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos158] = 1;
+  return;
+}
+void parser_prod___AStarExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6556;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6558 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6559 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6561;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6563 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6564 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6581;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6583 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6583);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6584 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6585 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6585);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6586 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6586);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6587 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6589 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6589);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6591 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6593 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6593);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6594 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6595 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6595);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6596 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6596);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6597 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6599 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6599);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6601 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6605;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6607 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6607);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6608 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6608);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6611;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6613 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6613);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6614 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6614);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
+  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos159]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6567;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6567 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos159] = 1;
+  return;
+}
+void parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos160]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6569;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___init_astarexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6574 */
+  CALL_parser_prod___AStarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6575 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6575);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6576 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6576);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6577 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6577);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6578 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6578);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos160] = 1;
+  return;
+}
+void parser_prod___ASlashExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6618;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6620 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6621 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6623;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6625 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6626 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6643;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6645 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6645);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6646 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6647 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6647);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6648 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6648);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6649 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6651 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6651);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6653 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6655 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6655);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6656 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6657 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6657);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6658 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6658);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6659 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6661 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6661);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6663 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6667;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6669 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6669);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6670 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6670);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6673;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6675 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6675);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6676 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6676);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
+  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos161]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6629;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6629 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos161] = 1;
+  return;
+}
+void parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos162]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6631;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___init_aslashexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6636 */
+  CALL_parser_prod___ASlashExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6637 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6637);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6638 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6638);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6639 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6639);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6640 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6640);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos162] = 1;
+  return;
+}
+void parser_prod___APercentExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6680;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6682 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6683 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6685;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6687 */
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6688 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6705;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6707 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6707);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6708 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6709 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6709);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6710 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6710);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6711 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6713 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6713);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6715 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6717 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6717);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6718 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6719 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6719);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6720 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6720);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6721 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6723 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6723);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6725 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6729;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6731 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6731);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6732 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6732);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6735;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6737 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6737);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6738 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6738);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentExpr___empty_init(val_t p0, int* init_table){
+  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos163]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6691;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6691 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos163] = 1;
+  return;
+}
+void parser_prod___APercentExpr___init_apercentexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos164]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6693;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___init_apercentexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6698 */
+  CALL_parser_prod___APercentExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6699 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6699);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6700 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6700);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6701 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6701);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6702 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6702);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos164] = 1;
+  return;
+}
+void parser_prod___AUminusExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6747;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6749 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6750 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUminusExpr___n_minus__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6742;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___n_minus__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6744 */
+  ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6745 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6767;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6769 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6769);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6770 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6771 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6771);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
+      /* ./parser//parser_prod.nit:6772 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6772);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6773 */
+      ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6775 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6775);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6777 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6779 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6779);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6780 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6781 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6781);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6782 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6782);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6783 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6785 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6785);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6787 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6791;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6793 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6793);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6794 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6794);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUminusExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6797;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6799 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6799);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6800 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6800);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
+  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos165]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6753;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6753 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos165] = 1;
+  return;
+}
+void parser_prod___AUminusExpr___init_auminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos166]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6755;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___init_auminusexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6760 */
+  CALL_parser_prod___AUminusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6761 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6761);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6762 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6762);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6763 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6763);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6764 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6764);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos166] = 1;
+  return;
+}
+void parser_prod___ANewExpr___n_kwnew__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6804;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___n_kwnew__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6806 */
+  ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6807 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANewExpr___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6809;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6811 */
+  ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6812 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANewExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6814;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6816 */
+  ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6817 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6818 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6818);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6847;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6849 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnew");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6849);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6850 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6851 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6851);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnew, ID_TKwnew)) /*cast TKwnew*/;
+      /* ./parser//parser_prod.nit:6852 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6852);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6853 */
+      ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6855 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6855);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6857 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6859 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6859);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6860 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6861 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6861);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:6862 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6862);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6863 */
+      ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6865 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6865);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6867 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:6869 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6870 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6871 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6871);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:6872 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6872);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6873 */
+      ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6875 */
+      ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:6877 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6879 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6879);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:6880 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6880);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:6881 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:6882 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6882);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:6883 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6883);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:6884 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6884);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:6886 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6886);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:6888 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:6879 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6893;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6895 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnew");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6895);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6896 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6896);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6897 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+    /* ./parser//parser_prod.nit:6898 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6898);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6900 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6900);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6901 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:6900 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANewExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6905;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6907 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnew");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6907);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6908 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6908);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6909 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+    /* ./parser//parser_prod.nit:6910 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6910);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6913 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6913);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:6914 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:6914 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:6915 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6915);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:6916 */
+    } else {
+      /* ./parser//parser_prod.nit:6914 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
+  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos167]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6822;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6822 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos167] = 1;
+  return;
+}
+void parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos168]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6824;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___init_anewexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:6831 */
+  CALL_parser_prod___ANewExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6832 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6832);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6833 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6833);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6834 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6834);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6835 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6835);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6836 */
+  ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6837 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6838 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6838);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  }
+  fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[4])(fra.me.REG[4]);
+  /* ./parser//parser_prod.nit:6840 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[4])(fra.me.REG[4]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[4])(fra.me.REG[4]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6841 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6841);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:6842 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6842);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+      /* ./parser//parser_prod.nit:6843 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:6840 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos168] = 1;
+  return;
+}
+void parser_prod___AAttrExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6922;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6924 */
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6925 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6927;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6929 */
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6930 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6947;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6949 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6949);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6950 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6951 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6951);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:6952 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6952);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6953 */
+      ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6955 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6955);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6957 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6959 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6959);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:6960 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:6961 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6961);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
+      /* ./parser//parser_prod.nit:6962 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6962);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:6963 */
+      ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:6965 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6965);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:6967 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6971;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6973 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6973);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6974 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6974);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6977;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6979 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6979);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6980 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6980);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
+  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos169]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6933;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:6933 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos169] = 1;
+  return;
+}
+void parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos170]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6935;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___init_aattrexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6940 */
+  CALL_parser_prod___AAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6941 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6941);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6942 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6942);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:6943 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6943);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:6944 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6944);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos170] = 1;
+  return;
+}
+void parser_prod___AAttrAssignExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6984;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6986 */
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6987 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6989;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6991 */
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6992 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6994;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:6996 */
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6997 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 6999;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7001 */
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7002 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7025;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7027 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7027);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7028 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7029 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7029);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7030 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7030);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7031 */
+      ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7033 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7033);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7035 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7037 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7037);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7038 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7039 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7039);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
+      /* ./parser//parser_prod.nit:7040 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7040);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7041 */
+      ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7043 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7043);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7045 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7047 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7047);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7048 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7049 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7049);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:7050 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7050);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7051 */
+      ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7053 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7053);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7055 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7057 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7057);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7058 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7059 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7059);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7060 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7060);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7061 */
+      ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7063 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7063);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7065 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7069;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7071 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7071);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7072 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7072);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7073 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7073);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7074 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7074);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7077;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7079 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7079);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7080 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7080);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7081 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7081);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7082 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7082);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos171]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7005;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7005 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos171] = 1;
+  return;
+}
+void parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos172]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7007;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___init_aattrassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:7014 */
+  CALL_parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7015 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7015);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7016 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7016);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7017 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7017);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7018 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7018);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7019 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7019);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7020 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7020);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7021 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7021);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7022 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7022);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos172] = 1;
+  return;
+}
+void parser_prod___AAttrReassignExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7086;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7088 */
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7089 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7091;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7093 */
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7094 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7096;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_assign_op__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7098 */
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7099 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7101;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7103 */
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7104 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7127;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7129 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7129);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7130 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7131 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7131);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7132 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7132);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7133 */
+      ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7135 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7135);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7137 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7139 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7139);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7140 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7141 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7141);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
+      /* ./parser//parser_prod.nit:7142 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7142);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7143 */
+      ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7145 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7145);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7147 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7149 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7149);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7150 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7151 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7151);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
+      /* ./parser//parser_prod.nit:7152 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7152);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7153 */
+      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7155 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7155);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7157 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7159 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7159);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7160 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7161 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7161);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7162 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7162);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7163 */
+      ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7165 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7165);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7167 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7171;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7173 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7173);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7174 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7174);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7175 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7175);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7176 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7176);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7179;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7181 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7181);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7182 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7182);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7183 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7183);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7184 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7184);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_table){
+  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos173]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7107;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7107 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos173] = 1;
+  return;
+}
+void parser_prod___AAttrReassignExpr___init_aattrreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos174]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7109;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:7116 */
+  CALL_parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7117 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7117);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7118 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7118);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7119 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7119);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7120 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7120);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7121 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7121);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7122 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7122);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7123 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7123);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7124 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7124);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos174] = 1;
+  return;
+}
+void parser_prod___ACallExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7188;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7190 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7191 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7193;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7195 */
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7196 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7225;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7227 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7227);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7228 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7229 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7229);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7230 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7230);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7231 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7233 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7233);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7235 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7237 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7237);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7238 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7239 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7239);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:7240 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7240);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7241 */
+      ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7243 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7243);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7245 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7247 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7247);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7248 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7248);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7249 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7250 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7250);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7251 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7251);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7252 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7252);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7254 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7254);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7256 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7247 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7259 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7259);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7260 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7260);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
+      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB1 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7261 */
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB1 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB1 = REGB2;
+          }
+        }
+        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
+          /* ./parser//parser_prod.nit:7262 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7262);
+            nit_exit(1);
+          }
+          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7263 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7263);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7264 */
+          if (UNTAG_Bool(REGB1)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7264);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7266 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7266);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+        }
+        /* ./parser//parser_prod.nit:7268 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7259 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label3: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7273;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7275 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7275);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7276 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7276);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7277 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7277);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7278 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:7277 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7280 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7280);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7281 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:7280 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7285;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7287 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7287);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7288 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7288);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7290 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7290);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7291 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7291 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7292 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7292);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7293 */
+    } else {
+      /* ./parser//parser_prod.nit:7291 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7297 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7297);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7298 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7298 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7299 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7299);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7300 */
+    } else {
+      /* ./parser//parser_prod.nit:7298 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
+  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos175]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7199;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7199 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos175] = 1;
+  return;
+}
+void parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos176]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7201;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___init_acallexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:7208 */
+  CALL_parser_prod___ACallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7209 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7209);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7210 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7210);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7211 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7211);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7212 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7212);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:7213 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7214 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7214);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7215 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7215);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7216 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7213 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[4])(fra.me.REG[4]);
+  /* ./parser//parser_prod.nit:7218 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[4])(fra.me.REG[4]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[4])(fra.me.REG[4]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
+      /* ./parser//parser_prod.nit:7219 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7219);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7220 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7220);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+      /* ./parser//parser_prod.nit:7221 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7218 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos176] = 1;
+  return;
+}
+void parser_prod___ACallAssignExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7306;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7308 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7309 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7311;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7313 */
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7314 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7316;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7318 */
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7319 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7321;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7323 */
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7324 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7353;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7355 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7355);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7356 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7357 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7357);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7358 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7358);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7359 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7361 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7361);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7363 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7365 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7365);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7366 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7367 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7367);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:7368 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7368);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7369 */
+      ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7371 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7371);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7373 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7375 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7375);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7376 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7376);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7377 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7378 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7378);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7379 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7379);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7380 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7380);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7382 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7382);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7384 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7375 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7387 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7387);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7388 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7389 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7389);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:7390 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7390);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7391 */
+      ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7393 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7393);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7395 */
+    goto label1;
+  }
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7397 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7397);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7398 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7399 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7399);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7400 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7400);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7401 */
+      ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7403 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7403);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7405 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7409;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7411 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7411);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7412 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7412);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7413 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7413);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7414 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:7413 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7416 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7416);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7417 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7417);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7420;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7422 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7422);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7423 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7423);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7425 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7425);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7426 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7426 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7427 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7427);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7428 */
+    } else {
+      /* ./parser//parser_prod.nit:7426 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7431 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7431);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7432 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7432);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos177]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7327;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7327 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos177] = 1;
+  return;
+}
+void parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos178]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7329;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:7337 */
+  CALL_parser_prod___ACallAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7338 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7338);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7339 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7339);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7340 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7340);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7341 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7341);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:7342 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7343 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7343);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7344 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7344);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7345 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7342 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7347 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7347);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7348 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7348);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7349 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7349);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7350 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7350);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos178] = 1;
+  return;
+}
+void parser_prod___ACallReassignExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7436;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7438 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7439 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7441;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7443 */
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7444 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7446;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_assign_op__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7448 */
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7449 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7451;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7453 */
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7454 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7483;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7485 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7485);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7486 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7487 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7487);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7488 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7488);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7489 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7491 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7491);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7493 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7495 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7495);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7496 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7497 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7497);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:7498 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7498);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7499 */
+      ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7501 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7501);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7503 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7505 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7505);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7506 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7506);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7507 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7508 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7508);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7509 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7509);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7510 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7510);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7512 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7512);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7514 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7505 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7517 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7517);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7518 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7519 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7519);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
+      /* ./parser//parser_prod.nit:7520 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7520);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7521 */
+      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7523 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7523);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7525 */
+    goto label1;
+  }
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7527 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7527);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7528 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7529 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7529);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7530 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7530);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7531 */
+      ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7533 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7533);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7535 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7539;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7541 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7541);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7542 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7542);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7543 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7543);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7544 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:7543 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7546 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7546);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7547 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7547);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7550;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7552 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7552);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7553 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7553);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7555 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7555);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7556 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7556 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7557 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7557);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7558 */
+    } else {
+      /* ./parser//parser_prod.nit:7556 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7561 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7561);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7562 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7562);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_table){
+  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos179]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7457;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7457 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos179] = 1;
+  return;
+}
+void parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos180]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7459;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:7467 */
+  CALL_parser_prod___ACallReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7468 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7468);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7469 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7469);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7470 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7470);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7471 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7471);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:7472 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7473 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7473);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7474 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7474);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7475 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7472 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7477 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7477);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7478 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7478);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7479 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7479);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7480 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7480);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos180] = 1;
+  return;
+}
+void parser_prod___ASuperExpr___n_qualified__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7566;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___n_qualified__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7568 */
+  ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7569 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7570 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7570);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperExpr___n_kwsuper__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7573;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___n_kwsuper__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7575 */
+  ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7576 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7601;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:7603 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7604 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7605 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7605);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AQualified, ID_AQualified)) /*cast AQualified*/;
+      /* ./parser//parser_prod.nit:7606 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7606);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7607 */
+      ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7609 */
+      ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:7611 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7613 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwsuper");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7613);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7614 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7615 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7615);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwsuper, ID_TKwsuper)) /*cast TKwsuper*/;
+      /* ./parser//parser_prod.nit:7616 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7616);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7617 */
+      ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7619 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7619);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7621 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7623 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7623);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7624 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7624);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7625 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7626 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7626);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7627 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7627);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7628 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7628);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7630 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7630);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7632 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7623 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7637;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7639 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AQualified, ID_AQualified)) /*cast AQualified*/;
+    /* ./parser//parser_prod.nit:7640 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7640);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7642 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwsuper");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7642);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7643 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7643);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7644 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:7643 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7648;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7650 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AQualified, ID_AQualified)) /*cast AQualified*/;
+    /* ./parser//parser_prod.nit:7651 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7651);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7653 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwsuper");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7653);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7655 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7655);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7656 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7656 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7657 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7657);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7658 */
+    } else {
+      /* ./parser//parser_prod.nit:7656 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
+  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos181]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7579;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7579 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos181] = 1;
+  return;
+}
+void parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos182]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7581;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___init_asuperexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:7587 */
+  CALL_parser_prod___ASuperExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7588 */
+  ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7589 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7590 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7590);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7592 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7592);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7593 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7593);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:7594 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7595 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7595);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7596 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7596);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7597 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7594 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos182] = 1;
+  return;
+}
+void parser_prod___AInitExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7664;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7666 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7667 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitExpr___n_kwinit__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7669;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___n_kwinit__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7671 */
+  ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7672 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7695;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7697 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7697);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7698 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7699 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7699);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7700 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7700);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7701 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7703 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7703);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7705 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7707 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7707);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7708 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7709 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7709);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
+      /* ./parser//parser_prod.nit:7710 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7710);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7711 */
+      ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7713 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7713);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7715 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7717 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7717);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7718 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7718);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7719 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7720 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7720);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7721 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7721);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7722 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7722);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7724 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7724);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7726 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7717 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7731;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7733 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7733);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7734 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7734);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7735 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7735);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7736 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:7735 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7740;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7742 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7742);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7743 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7743);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7745 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7745);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7746 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7746 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7747 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7747);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7748 */
+    } else {
+      /* ./parser//parser_prod.nit:7746 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
+  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos183]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7675;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7675 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos183] = 1;
+  return;
+}
+void parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos184]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7677;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___init_ainitexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:7683 */
+  CALL_parser_prod___AInitExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7684 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7684);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7685 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7685);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7686 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7686);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7687 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7687);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:7688 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7689 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7689);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7690 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7690);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7691 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7688 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos184] = 1;
+  return;
+}
+void parser_prod___ABraExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7754;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7756 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7757 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7783;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7785 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7785);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7786 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7787 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7787);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7788 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7788);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7789 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7791 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7791);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7793 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7795 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7795);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7796 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7796);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7797 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7798 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7798);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7799 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7799);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7800 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7800);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7802 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7802);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7804 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7795 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7807 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7807);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7808 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7808);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
+      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB1 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7809 */
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB1 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB1 = REGB2;
+          }
+        }
+        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
+          /* ./parser//parser_prod.nit:7810 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7810);
+            nit_exit(1);
+          }
+          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7811 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7811);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7812 */
+          if (UNTAG_Bool(REGB1)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7812);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7814 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7814);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+        }
+        /* ./parser//parser_prod.nit:7816 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7807 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label3: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7821;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7823 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7823);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7824 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7824);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7825 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:7824 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7827 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7827);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7828 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:7827 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7832;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7834 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7834);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7836 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7836);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7837 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7837 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7838 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7838);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7839 */
+    } else {
+      /* ./parser//parser_prod.nit:7837 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7843 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7843);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7844 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7844 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7845 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7845);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7846 */
+    } else {
+      /* ./parser//parser_prod.nit:7844 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
+  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos185]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7760;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7760 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos185] = 1;
+  return;
+}
+void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos186]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7762;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___init_abraexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:7768 */
+  CALL_parser_prod___ABraExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7769 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7769);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7770 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7770);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7771 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7772 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7772);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7773 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7773);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+      /* ./parser//parser_prod.nit:7774 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7771 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:7776 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
+      /* ./parser//parser_prod.nit:7777 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7777);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7778 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7778);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7779 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7776 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos186] = 1;
+  return;
+}
+void parser_prod___ABraAssignExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7852;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7854 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7855 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraAssignExpr___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7857;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7859 */
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7860 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraAssignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7862;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7864 */
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7865 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7891;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7893 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7893);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7894 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7895 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7895);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7896 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7896);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7897 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7899 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7899);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7901 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7903 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7903);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7904 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7904);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:7905 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:7906 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7906);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7907 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7907);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:7908 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7908);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:7910 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7910);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:7912 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:7903 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7915 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7915);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7916 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7917 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7917);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:7918 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7918);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7919 */
+      ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7921 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7921);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7923 */
+    goto label1;
+  }
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7925 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7925);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:7926 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:7927 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7927);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7928 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7928);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:7929 */
+      ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7931 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7931);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:7933 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraAssignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7937;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7939 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7939);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7940 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7940);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:7941 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:7940 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7943 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7943);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7944 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7944);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraAssignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7947;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7949 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7949);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7951 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7951);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7952 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:7952 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7953 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7953);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:7954 */
+    } else {
+      /* ./parser//parser_prod.nit:7952 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7957 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7957);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7958 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7958);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos187]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7868;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7868 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos187] = 1;
+  return;
+}
+void parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos188]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7870;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:7877 */
+  CALL_parser_prod___ABraAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7878 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7878);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7879 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7879);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7880 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7881 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7881);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7882 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7882);
+        nit_exit(1);
+      }
+      fra.me.REG[5] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
+      /* ./parser//parser_prod.nit:7883 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7880 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7885 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7885);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7886 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7886);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7887 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7887);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7888 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7888);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos188] = 1;
+  return;
+}
+void parser_prod___ABraReassignExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7962;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7964 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7965 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7967;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___n_assign_op__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7969 */
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7970 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraReassignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7972;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7974 */
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7975 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8001;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8003 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8003);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8004 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8005 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8005);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8006 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8006);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8007 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8009 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8009);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8011 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8013 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8013);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8014 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8014);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:8015 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:8016 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8016);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8017 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8017);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:8018 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8018);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8020 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8020);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:8022 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:8013 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8025 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8025);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8026 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8027 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8027);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
+      /* ./parser//parser_prod.nit:8028 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8028);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8029 */
+      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8031 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8031);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8033 */
+    goto label1;
+  }
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8035 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8035);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB1 = REGB0;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8036 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8037 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8037);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8038 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8038);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8039 */
+      ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8041 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8041);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8043 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraReassignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8047;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8049 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8049);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8050 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8050);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:8051 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:8050 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8053 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8053);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8054 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8054);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraReassignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8057;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8059 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8059);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8061 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8061);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:8062 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:8062 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8063 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8063);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:8064 */
+    } else {
+      /* ./parser//parser_prod.nit:8062 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8067 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8067);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8068 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8068);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_table){
+  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos189]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7978;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:7978 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos189] = 1;
+  return;
+}
+void parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos190]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7980;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:7987 */
+  CALL_parser_prod___ABraReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7988 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7988);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7989 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7989);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:7990 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:7991 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7991);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:7992 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7992);
+        nit_exit(1);
+      }
+      fra.me.REG[5] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
+      /* ./parser//parser_prod.nit:7993 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:7990 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7995 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7995);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7996 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7996);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:7997 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7997);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:7998 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7998);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos190] = 1;
+  return;
+}
+void parser_prod___AClosureCallExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8072;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8074 */
+  ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8075 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8101;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8103 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8103);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8104 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8105 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8105);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:8106 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8106);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8107 */
+      ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8109 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8109);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8111 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8113 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8113);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8114 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8114);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:8115 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:8116 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8116);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8117 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8117);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:8118 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8118);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8120 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8120);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:8122 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:8113 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  REGB1 = TAG_Int(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8125 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8125);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8126 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8126);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
+      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB1 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:8127 */
+        if (UNTAG_Bool(REGB1)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB1 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB1 = REGB2;
+          }
+        }
+        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
+          /* ./parser//parser_prod.nit:8128 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8128);
+            nit_exit(1);
+          }
+          REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8129 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8129);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
+          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:8130 */
+          if (UNTAG_Bool(REGB1)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8130);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8132 */
+          if (UNTAG_Bool(REGB1)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8132);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+        }
+        /* ./parser//parser_prod.nit:8134 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:8125 */
+      goto label3;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label3: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8139;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8141 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8141);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8142 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8142);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:8143 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:8142 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8145 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8145);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:8146 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:8145 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureCallExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8150;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8152 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8152);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8154 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8154);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:8155 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:8155 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8156 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8156);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:8157 */
+    } else {
+      /* ./parser//parser_prod.nit:8155 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8161 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8161);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:8162 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:8162 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8163 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8163);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:8164 */
+    } else {
+      /* ./parser//parser_prod.nit:8162 */
+      goto label2;
+    }
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_table){
+  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos191]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8078;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8078 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos191] = 1;
+  return;
+}
+void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos192]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8080;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___init_aclosurecallexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:8086 */
+  CALL_parser_prod___AClosureCallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8087 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8087);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8088 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8088);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:8089 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8090 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8090);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8091 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8091);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+      /* ./parser//parser_prod.nit:8092 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:8089 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:8094 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
+      /* ./parser//parser_prod.nit:8095 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8095);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8096 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8096);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:8097 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:8094 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos192] = 1;
+  return;
+}
+void parser_prod___AVarExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8170;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8172 */
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8173 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8187;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8189 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8189);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8190 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8191 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8191);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:8192 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8192);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8193 */
+      ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8195 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8195);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8197 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8201;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8203 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8203);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8206;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8208 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8208);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
+  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos193]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8176;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8176 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos193] = 1;
+  return;
+}
+void parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* init_table){
+  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos194]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8178;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___init_avarexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8182 */
+  CALL_parser_prod___AVarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8183 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8183);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8184 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8184);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos194] = 1;
+  return;
+}
+void parser_prod___AVarAssignExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8212;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8214 */
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8215 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarAssignExpr___n_assign__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8217;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___n_assign__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8219 */
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8220 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarAssignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8222;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8224 */
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8225 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8245;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8247 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8247);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8248 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8249 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8249);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:8250 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8250);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8251 */
+      ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8253 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8253);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8255 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8257 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8257);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8258 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8259 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8259);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
+      /* ./parser//parser_prod.nit:8260 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8260);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8261 */
+      ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8263 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8263);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8265 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8267 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8267);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8268 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8269 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8269);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8270 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8270);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8271 */
+      ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8273 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8273);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8275 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarAssignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8279;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8281 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8281);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8282 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8282);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8283 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8283);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarAssignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8286;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8288 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8288);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8289 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8289);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8290 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8290);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos195]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8228;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8228 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos195] = 1;
+  return;
+}
+void parser_prod___AVarAssignExpr___init_avarassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos196]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8230;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___init_avarassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:8236 */
+  CALL_parser_prod___AVarAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8237 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8237);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8238 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8238);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8239 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8239);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8240 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8240);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8241 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8241);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8242 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8242);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos196] = 1;
+  return;
+}
+void parser_prod___AVarReassignExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8294;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8296 */
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8297 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8299;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___n_assign_op__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8301 */
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8302 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarReassignExpr___n_value__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8304;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___n_value__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8306 */
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8307 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8327;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8329 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8329);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8330 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8331 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8331);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:8332 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8332);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8333 */
+      ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8335 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8335);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8337 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8339 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8339);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8340 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8341 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8341);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
+      /* ./parser//parser_prod.nit:8342 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8342);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8343 */
+      ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8345 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8345);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8347 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8349 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8349);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8350 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8351 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8351);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8352 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8352);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8353 */
+      ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8355 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8355);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8357 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarReassignExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8361;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8363 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8363);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8364 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8364);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8365 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8365);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarReassignExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8368;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8370 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8370);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8371 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8371);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8372 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8372);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_table){
+  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos197]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8310;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8310 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos197] = 1;
+  return;
+}
+void parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos198]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8312;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___init_avarreassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:8318 */
+  CALL_parser_prod___AVarReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8319 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8319);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8320 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8320);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8321 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8321);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8322 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8322);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8323 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8323);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8324 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8324);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos198] = 1;
+  return;
+}
+void parser_prod___ARangeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8376;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8378 */
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8379 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ARangeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8381;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8383 */
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8384 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8401;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8403 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8403);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8404 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8405 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8405);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8406 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8406);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8407 */
+      ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8409 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8409);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8411 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8413 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8413);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8414 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8415 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8415);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8416 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8416);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8417 */
+      ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8419 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8419);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8421 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8425;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8427 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8427);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8428 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8428);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ARangeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8431;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8433 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8433);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8434 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8434);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
+  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos199]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8387;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8387 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos199] = 1;
+  return;
+}
+void parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos200]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8389;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___init_arangeexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:8394 */
+  CALL_parser_prod___ARangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8395 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8395);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8396 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8396);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8397 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8397);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8398 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8398);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos200] = 1;
+  return;
+}
+void parser_prod___ACrangeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8438;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8440 */
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8441 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACrangeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8443;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8445 */
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8446 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8463;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8465 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8465);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8466 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8467 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8467);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8468 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8468);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8469 */
+      ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8471 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8471);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8473 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8475 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8475);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8476 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8477 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8477);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8478 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8478);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8479 */
+      ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8481 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8481);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8483 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACrangeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8487;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8489 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8489);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8490 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8490);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACrangeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8493;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8495 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8495);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8496 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8496);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
+  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos201]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8449;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8449 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos201] = 1;
+  return;
+}
+void parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos202]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8451;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___init_acrangeexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:8456 */
+  CALL_parser_prod___ACrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8457 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8457);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8458 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8458);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8459 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8459);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8460 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8460);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos202] = 1;
+  return;
+}
+void parser_prod___AOrangeExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8500;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8502 */
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8503 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrangeExpr___n_expr2__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8505;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___n_expr2__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8507 */
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8508 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8525;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8527 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8527);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8528 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8529 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8529);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8530 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8530);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8531 */
+      ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8533 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8533);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8535 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8537 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8537);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8538 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8539 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8539);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8540 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8540);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8541 */
+      ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8543 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8543);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8545 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8549;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8551 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8551);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8552 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8552);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrangeExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8555;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8557 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8557);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8558 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8558);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
+  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos203]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8511;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8511 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos203] = 1;
+  return;
+}
+void parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos204]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8513;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___init_aorangeexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:8518 */
+  CALL_parser_prod___AOrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8519 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8519);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8520 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8520);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8521 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8521);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8522 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8522);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos204] = 1;
+  return;
+}
+void parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8577;
+  fra.me.meth = LOCATE_parser_prod___AArrayExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8579 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8579);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8580 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8580);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:8581 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:8582 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8582);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8583 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8583);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:8584 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8584);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:8586 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8586);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:8588 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:8579 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AArrayExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8593;
+  fra.me.meth = LOCATE_parser_prod___AArrayExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8595 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8595);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:8596 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:8595 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AArrayExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8600;
+  fra.me.meth = LOCATE_parser_prod___AArrayExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8603 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8603);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:8604 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:8604 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8605 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8605);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:8606 */
+    } else {
+      /* ./parser//parser_prod.nit:8604 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
+  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos205]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8563;
+  fra.me.meth = LOCATE_parser_prod___AArrayExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8563 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos205] = 1;
+  return;
+}
+void parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_table){
+  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos206]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8565;
+  fra.me.meth = LOCATE_parser_prod___AArrayExpr___init_aarrayexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8569 */
+  CALL_parser_prod___AArrayExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:8570 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:8571 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8571);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:8572 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8572);
+        nit_exit(1);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:8573 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:8570 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos206] = 1;
+  return;
+}
+void parser_prod___ASelfExpr___n_kwself__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8612;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___n_kwself__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8614 */
+  ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8615 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8615);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8629;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:8631 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8632 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8633 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8633);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast TKwself*/;
+      /* ./parser//parser_prod.nit:8634 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8634);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8635 */
+      ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8637 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8637);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8639 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASelfExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8643;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[0] = ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:8645 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASelfExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8648;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[0] = ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:8650 */
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
+  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos207]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8618;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8618 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos207] = 1;
+  return;
+}
+void parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_table){
+  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos208]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8620;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___init_aselfexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8624 */
+  CALL_parser_prod___ASelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8625 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8625);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8626 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8626);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos208] = 1;
+  return;
+}
+void parser_prod___AImplicitSelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8662;
+  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:8662 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8666;
+  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8666 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AImplicitSelfExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8670;
+  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8670 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_table){
+  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos209]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8655;
+  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8655 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos209] = 1;
+  return;
+}
+void parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0, int* init_table){
+  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos210]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8657;
+  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8659 */
+  CALL_parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos210] = 1;
+  return;
+}
+void parser_prod___ATrueExpr___n_kwtrue__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8675;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___n_kwtrue__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8677 */
+  ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8678 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8692;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8694 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtrue");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8694);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8695 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8696 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8696);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast TKwtrue*/;
+      /* ./parser//parser_prod.nit:8697 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8697);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8698 */
+      ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8700 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8700);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8702 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8706;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8708 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtrue");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8708);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATrueExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8711;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8713 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtrue");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8713);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
+  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos211]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8681;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8681 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos211] = 1;
+  return;
+}
+void parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_table){
+  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos212]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8683;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___init_atrueexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8687 */
+  CALL_parser_prod___ATrueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8688 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8688);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8689 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8689);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos212] = 1;
+  return;
+}
+void parser_prod___AFalseExpr___n_kwfalse__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8717;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___n_kwfalse__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8719 */
+  ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8720 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8734;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8736 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfalse");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8736);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8737 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8738 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8738);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast TKwfalse*/;
+      /* ./parser//parser_prod.nit:8739 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8739);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8740 */
+      ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8742 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8742);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8744 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8748;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8750 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfalse");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8750);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFalseExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8753;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8755 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfalse");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8755);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
+  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos213]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8723;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8723 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos213] = 1;
+  return;
+}
+void parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_table){
+  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos214]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8725;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___init_afalseexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8729 */
+  CALL_parser_prod___AFalseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8730 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8730);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8731 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8731);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos214] = 1;
+  return;
+}
+void parser_prod___ANullExpr___n_kwnull__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8759;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___n_kwnull__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8761 */
+  ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8762 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8776;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8778 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8778);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8779 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8780 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8780);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
+      /* ./parser//parser_prod.nit:8781 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8781);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8782 */
+      ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8784 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8784);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8786 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANullExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8790;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8792 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8792);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANullExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8795;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8797 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8797);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
+  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos215]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8765;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8765 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos215] = 1;
+  return;
+}
+void parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_table){
+  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos216]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8767;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___init_anullexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8771 */
+  CALL_parser_prod___ANullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8772 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8772);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8773 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8773);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos216] = 1;
+  return;
+}
+void parser_prod___AIntExpr___n_number__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8801;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___n_number__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8803 */
+  ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8804 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8818;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8820 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_number");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8820);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8821 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8822 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8822);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast TNumber*/;
+      /* ./parser//parser_prod.nit:8823 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8823);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8824 */
+      ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8826 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8826);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8828 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8832;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8834 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_number");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8834);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8837;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8839 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_number");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8839);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
+  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos217]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8807;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8807 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos217] = 1;
+  return;
+}
+void parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, int* init_table){
+  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos218]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8809;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___init_aintexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8813 */
+  CALL_parser_prod___AIntExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8814 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8814);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8815 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8815);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos218] = 1;
+  return;
+}
+void parser_prod___AFloatExpr___n_float__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8843;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___n_float__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8845 */
+  ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8846 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8860;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8862 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_float");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8862);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8863 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8864 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8864);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast TFloat*/;
+      /* ./parser//parser_prod.nit:8865 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8865);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8866 */
+      ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8868 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8868);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8870 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8874;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8876 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_float");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8876);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFloatExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8879;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8881 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_float");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8881);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
+  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos219]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8849;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8849 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos219] = 1;
+  return;
+}
+void parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_table){
+  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos220]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8851;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___init_afloatexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8855 */
+  CALL_parser_prod___AFloatExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8856 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8856);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8857 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8857);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos220] = 1;
+  return;
+}
+void parser_prod___ACharExpr___n_char__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8885;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___n_char__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8887 */
+  ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8888 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8902;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8904 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_char");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8904);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8905 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8906 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8906);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast TChar*/;
+      /* ./parser//parser_prod.nit:8907 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8907);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8908 */
+      ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8910 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8910);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8912 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACharExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8916;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8918 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_char");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8918);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACharExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8921;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8923 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_char");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8923);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
+  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos221]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8891;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8891 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos221] = 1;
+  return;
+}
+void parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_table){
+  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos222]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8893;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___init_acharexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8897 */
+  CALL_parser_prod___ACharExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8898 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8898);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8899 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8899);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos222] = 1;
+  return;
+}
+void parser_prod___AStringExpr___n_string__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8927;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___n_string__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8929 */
+  ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8930 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8944;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8946 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8946);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8947 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8948 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8948);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
+      /* ./parser//parser_prod.nit:8949 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8949);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8950 */
+      ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8952 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8952);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8954 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStringExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8958;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8960 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8960);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStringExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8963;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8965 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8965);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos223]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8933;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8933 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos223] = 1;
+  return;
+}
+void parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_table){
+  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos224]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8935;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___init_astringexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8939 */
+  CALL_parser_prod___AStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8940 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8940);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8941 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8941);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos224] = 1;
+  return;
+}
+void parser_prod___AStartStringExpr___n_string__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8969;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___n_string__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8971 */
+  ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:8972 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8986;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8988 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8988);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:8989 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:8990 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8990);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStartString, ID_TStartString)) /*cast TStartString*/;
+      /* ./parser//parser_prod.nit:8991 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8991);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:8992 */
+      ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:8994 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8994);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:8996 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStartStringExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9000;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9002 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9002);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStartStringExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9005;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9007 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9007);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos225]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8975;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:8975 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos225] = 1;
+  return;
+}
+void parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, val_t p1, int* init_table){
+  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos226]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 8977;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___init_astartstringexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:8981 */
+  CALL_parser_prod___AStartStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:8982 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8982);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:8983 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8983);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos226] = 1;
+  return;
+}
+void parser_prod___AMidStringExpr___n_string__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9011;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___n_string__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9013 */
+  ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9014 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9028;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9030 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9030);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9031 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9032 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9032);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMidString, ID_TMidString)) /*cast TMidString*/;
+      /* ./parser//parser_prod.nit:9033 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9033);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9034 */
+      ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9036 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9036);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9038 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMidStringExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9042;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9044 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9044);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMidStringExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9047;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9049 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9049);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos227]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9017;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9017 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos227] = 1;
+  return;
+}
+void parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t p1, int* init_table){
+  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos228]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9019;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___init_amidstringexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9023 */
+  CALL_parser_prod___AMidStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9024 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9024);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9025 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9025);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos228] = 1;
+  return;
+}
+void parser_prod___AEndStringExpr___n_string__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9053;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___n_string__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9055 */
+  ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9056 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9070;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9072 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9072);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9073 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9074 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9074);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TEndString, ID_TEndString)) /*cast TEndString*/;
+      /* ./parser//parser_prod.nit:9075 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9075);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9076 */
+      ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9078 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9078);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9080 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEndStringExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9084;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9086 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9086);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEndStringExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9089;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9091 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9091);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos229]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9059;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9059 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos229] = 1;
+  return;
+}
+void parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t p1, int* init_table){
+  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos230]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9061;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___init_aendstringexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9065 */
+  CALL_parser_prod___AEndStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9066 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9066);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9067 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9067);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos230] = 1;
+  return;
+}
+void parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9110;
+  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9112 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9112);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9113 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9113);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:9114 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+          /* ./parser//parser_prod.nit:9115 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9115);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9116 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9116);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:9117 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9117);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9119 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9119);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:9121 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:9112 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9126;
+  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9128 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9128);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:9129 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:9128 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperstringExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9133;
+  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9136 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9136);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:9137 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:9137 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9138 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9138);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:9139 */
+    } else {
+      /* ./parser//parser_prod.nit:9137 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_table){
+  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos231]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9096;
+  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9096 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos231] = 1;
+  return;
+}
+void parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, int* init_table){
+  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos232]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9098;
+  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9102 */
+  CALL_parser_prod___ASuperstringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:9103 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:9104 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9104);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9105 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9105);
+        nit_exit(1);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:9106 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:9103 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos232] = 1;
+  return;
+}
+void parser_prod___AParExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9145;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9147 */
+  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9148 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9162;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9164 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9164);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9165 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9166 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9166);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:9167 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9167);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9168 */
+      ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9170 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9170);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9172 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9176;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9178 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9178);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9181;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9183 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9183);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
+  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos233]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9151;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9151 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos233] = 1;
+  return;
+}
+void parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, int* init_table){
+  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos234]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9153;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___init_aparexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9157 */
+  CALL_parser_prod___AParExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9158 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9158);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9159 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9159);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos234] = 1;
+  return;
+}
+void parser_prod___AAsCastExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9187;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9189 */
+  ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9190 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsCastExpr___n_kwas__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9192;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___n_kwas__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9194 */
+  ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9195 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsCastExpr___n_type__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9197;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___n_type__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9199 */
+  ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9200 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9220;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9222 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9222);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9223 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9224 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9224);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:9225 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9225);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9226 */
+      ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9228 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9228);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9230 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9232 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9232);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9233 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9234 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9234);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
+      /* ./parser//parser_prod.nit:9235 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9235);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9236 */
+      ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9238 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9238);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9240 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9242 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9242);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9243 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9244 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9244);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      /* ./parser//parser_prod.nit:9245 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9245);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9246 */
+      ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9248 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9248);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9250 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9254;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9256 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9256);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9257 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9257);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9258 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9258);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsCastExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9261;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9263 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9263);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9264 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9264);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9265 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9265);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
+  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos235]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9203;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9203 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos235] = 1;
+  return;
+}
+void parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos236]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9205;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___init_aascastexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:9211 */
+  CALL_parser_prod___AAsCastExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9212 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9212);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9213 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9213);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9214 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9214);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9215 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9215);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9216 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9216);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9217 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9217);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos236] = 1;
+  return;
+}
+void parser_prod___AAsNotnullExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9269;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9271 */
+  ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9272 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___n_kwas__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9274;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_kwas__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9276 */
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9277 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___n_kwnot__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9279;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_kwnot__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9281 */
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9282 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___n_kwnull__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9284;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_kwnull__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9286 */
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9287 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9310;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9312 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9312);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9313 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9314 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9314);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:9315 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9315);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9316 */
+      ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9318 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9318);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9320 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9322 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9322);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9323 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9324 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9324);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
+      /* ./parser//parser_prod.nit:9325 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9325);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9326 */
+      ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9328 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9328);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9330 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9332 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9332);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9333 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9334 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9334);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
+      /* ./parser//parser_prod.nit:9335 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9335);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9336 */
+      ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9338 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9338);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9340 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9342 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9342);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9343 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9344 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9344);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
+      /* ./parser//parser_prod.nit:9345 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9345);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9346 */
+      ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9348 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9348);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9350 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9354;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9356 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9356);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9357 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9357);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9358 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9358);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9359 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9359);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9362;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9364 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9364);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9365 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9365);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9366 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9366);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9367 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9367);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_table){
+  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos237]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9290;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9290 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos237] = 1;
+  return;
+}
+void parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
+  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos238]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9292;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:9299 */
+  CALL_parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9300 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9300);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9301 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9301);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9302 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9302);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9303 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9303);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9304 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9304);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9305 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9305);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9306 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9306);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9307 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9307);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos238] = 1;
+  return;
+}
+void parser_prod___AIssetAttrExpr___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9376;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9378 */
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9379 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIssetAttrExpr___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9381;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9383 */
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9384 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIssetAttrExpr___n_kwisset__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9371;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___n_kwisset__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9373 */
+  ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9374 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9404;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9406 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwisset");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9406);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9407 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9408 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9408);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwisset, ID_TKwisset)) /*cast TKwisset*/;
+      /* ./parser//parser_prod.nit:9409 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9409);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9410 */
+      ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9412 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9412);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9414 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9416 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9416);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9417 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9418 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9418);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:9419 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9419);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9420 */
+      ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9422 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9422);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9424 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9426 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9426);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9427 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9428 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9428);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
+      /* ./parser//parser_prod.nit:9429 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9429);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9430 */
+      ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9432 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9432);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9434 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9438;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9440 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwisset");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9440);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9441 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9441);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9442 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9442);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIssetAttrExpr___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9445;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9447 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwisset");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9447);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9448 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9448);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9449 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9449);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_table){
+  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos239]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9387;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9387 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos239] = 1;
+  return;
+}
+void parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos240]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9389;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___init_aissetattrexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:9395 */
+  CALL_parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9396 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9396);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9397 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9397);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9398 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9398);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9399 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9399);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9400 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9400);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9401 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9401);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos240] = 1;
+  return;
+}
+void parser_prod___APlusAssignOp___n_pluseq__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9453;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___n_pluseq__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9455 */
+  ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9456 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9470;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9472 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_pluseq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9472);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9473 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9474 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9474);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPluseq, ID_TPluseq)) /*cast TPluseq*/;
+      /* ./parser//parser_prod.nit:9475 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9475);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9476 */
+      ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9478 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9478);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9480 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusAssignOp___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9484;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9486 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_pluseq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9486);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusAssignOp___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9489;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9491 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_pluseq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9491);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table){
+  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos241]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9459;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9459 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos241] = 1;
+  return;
+}
+void parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p1, int* init_table){
+  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos242]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9461;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___init_aplusassignop;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9465 */
+  CALL_parser_prod___APlusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9466 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9466);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9467 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9467);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos242] = 1;
+  return;
+}
+void parser_prod___AMinusAssignOp___n_minuseq__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9495;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___n_minuseq__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9497 */
+  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9498 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9512;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9514 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minuseq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9514);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9515 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9516 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9516);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinuseq, ID_TMinuseq)) /*cast TMinuseq*/;
+      /* ./parser//parser_prod.nit:9517 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9517);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9518 */
+      ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9520 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9520);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9522 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusAssignOp___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9526;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9528 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minuseq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9528);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusAssignOp___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9531;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9533 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_minuseq");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9533);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_table){
+  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos243]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9501;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9501 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos243] = 1;
+  return;
+}
+void parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t p1, int* init_table){
+  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos244]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9503;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___init_aminusassignop;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9507 */
+  CALL_parser_prod___AMinusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9508 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9508);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9509 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9509);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos244] = 1;
+  return;
+}
+void parser_prod___AClosureDef___n_label__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9561;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_label__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9563 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9564 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9565 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9565);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___n_bang__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9537;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_bang__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9539 */
+  ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9540 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9542;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9544 */
+  ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9545 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___n_kwdo__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9547;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_kwdo__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9549 */
+  ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9550 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9551 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9551);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___n_expr__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9554;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_expr__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9556 */
+  ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9557 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9558 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9558);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9604;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9606 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9606);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9607 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9608 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9608);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TBang, ID_TBang)) /*cast TBang*/;
+      /* ./parser//parser_prod.nit:9609 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9609);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9610 */
+      ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9612 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9612);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9614 */
+    goto label1;
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9616 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9616);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9617 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9618 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9618);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureId, ID_AClosureId)) /*cast AClosureId*/;
+      /* ./parser//parser_prod.nit:9619 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9619);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9620 */
+      ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9622 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9622);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9624 */
+    goto label1;
+  }
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9626 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9626);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9627 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9627);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:9628 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+          /* ./parser//parser_prod.nit:9629 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9629);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9630 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9630);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:9631 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9631);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9633 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9633);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:9635 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:9626 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:9638 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(false);
+      REGB1 = REGB0;
+    } else {
+      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB1 = REGB0;
+    }
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9639 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9640 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9640);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
+      /* ./parser//parser_prod.nit:9641 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9641);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9642 */
+      ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9644 */
+      ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:9646 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:9648 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(false);
+      REGB1 = REGB0;
+    } else {
+      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB1 = REGB0;
+    }
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9649 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9650 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9650);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+      /* ./parser//parser_prod.nit:9651 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9651);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9652 */
+      ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9654 */
+      ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:9656 */
+    goto label1;
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:9658 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(false);
+      REGB1 = REGB0;
+    } else {
+      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB1 = REGB0;
+    }
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9659 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9660 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9660);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+      /* ./parser//parser_prod.nit:9661 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9661);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9662 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9664 */
+      ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:9666 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9670;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9672 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9672);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9673 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9673);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9674 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9674);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:9675 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:9674 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9677 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
+    /* ./parser//parser_prod.nit:9678 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9678);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9680 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:9681 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9681);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9683 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:9684 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9684);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9688;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9690 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9690);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9691 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9691);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9693 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9693);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:9694 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:9694 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9695 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9695);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:9696 */
+    } else {
+      /* ./parser//parser_prod.nit:9694 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9699 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
+    /* ./parser//parser_prod.nit:9700 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9700);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9702 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
+    /* ./parser//parser_prod.nit:9703 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9703);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9705 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
+    /* ./parser//parser_prod.nit:9706 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9706);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
+  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos245]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9569;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9569 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos245] = 1;
+  return;
+}
+void parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos246]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9571;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___init_aclosuredef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:9580 */
+  CALL_parser_prod___AClosureDef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9581 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9581);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9582 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9582);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9583 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9583);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9584 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9584);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./parser//parser_prod.nit:9585 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:9586 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9586);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9587 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9587);
+        nit_exit(1);
+      }
+      fra.me.REG[1] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:9588 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:9585 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label1: while(0);
+  /* ./parser//parser_prod.nit:9590 */
+  ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9591 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9592 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9592);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:9594 */
+  ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[5];
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9595 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9596 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9596);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:9598 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9599 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9600 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9600);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos246] = 1;
+  return;
+}
+void parser_prod___ASimpleClosureId___n_id__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9711;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___n_id__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9713 */
+  ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9714 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9728;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9730 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9730);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9731 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9732 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9732);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:9733 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9733);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9734 */
+      ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9736 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9736);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9738 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9742;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9744 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9744);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASimpleClosureId___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9747;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9749 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9749);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASimpleClosureId___empty_init(val_t p0, int* init_table){
+  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos247]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9717;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9717 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos247] = 1;
+  return;
+}
+void parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, val_t p1, int* init_table){
+  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos248]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9719;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___init_asimpleclosureid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9723 */
+  CALL_parser_prod___ASimpleClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9724 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9724);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9725 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9725);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos248] = 1;
+  return;
+}
+void parser_prod___ABreakClosureId___n_kwbreak__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9753;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___n_kwbreak__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9755 */
+  ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9756 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9770;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9772 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9772);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9773 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9774 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9774);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
+      /* ./parser//parser_prod.nit:9775 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9775);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9776 */
+      ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9778 */
+      fprintf(stderr, "Aborted");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9778);
+      nit_exit(1);
+    }
+    /* ./parser//parser_prod.nit:9780 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9784;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9786 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9786);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakClosureId___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9789;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9791 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9791);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakClosureId___empty_init(val_t p0, int* init_table){
+  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos249]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9759;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9759 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos249] = 1;
+  return;
+}
+void parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val_t p1, int* init_table){
+  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos250]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9761;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___init_abreakclosureid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9765 */
+  CALL_parser_prod___ABreakClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9766 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Cast failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9766);
+    nit_exit(1);
+  }
+  ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9767 */
+  if (UNTAG_Bool(REGB0)) {
+    fprintf(stderr, "Reciever is null");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9767);
+    nit_exit(1);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos250] = 1;
+  return;
+}
+void parser_prod___AQualified___n_classid__eq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9795;
+  fra.me.meth = LOCATE_parser_prod___AQualified___n_classid__eq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9797 */
+  ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9798 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9799 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9799);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9822;
+  fra.me.meth = LOCATE_parser_prod___AQualified___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9824 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9824);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9825 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9825);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:9826 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+          /* ./parser//parser_prod.nit:9827 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9827);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9828 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9828);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:9829 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9829);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9831 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9831);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:9833 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:9824 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
+  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:9836 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(false);
+      REGB1 = REGB0;
+    } else {
+      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB1 = REGB0;
+    }
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9837 */
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(false);
+        REGB1 = REGB0;
+      } else {
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB1 = REGB0;
+      }
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9838 */
+      if (UNTAG_Bool(REGB1)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9838);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+      /* ./parser//parser_prod.nit:9839 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9839);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9840 */
+      ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:9842 */
+      ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:9844 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AQualified___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9848;
+  fra.me.meth = LOCATE_parser_prod___AQualified___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9850 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9850);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:9851 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./parser//parser_prod.nit:9850 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  }
+  label1: while(0);
+  fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9853 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+    /* ./parser//parser_prod.nit:9854 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9854);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AQualified___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9858;
+  fra.me.meth = LOCATE_parser_prod___AQualified___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9861 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9861);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:9862 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:9862 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9863 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9863);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:9864 */
+    } else {
+      /* ./parser//parser_prod.nit:9862 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9867 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
+    /* ./parser//parser_prod.nit:9868 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9868);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AQualified___empty_init(val_t p0, int* init_table){
+  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos251]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9803;
+  fra.me.meth = LOCATE_parser_prod___AQualified___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9803 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos251] = 1;
+  return;
+}
+void parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  if (init_table[itpos252]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9805;
+  fra.me.meth = LOCATE_parser_prod___AQualified___init_aqualified;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:9810 */
+  CALL_parser_prod___AQualified___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:9811 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast TId*/;
+      /* ./parser//parser_prod.nit:9812 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9812);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9813 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_id");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9813);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+      /* ./parser//parser_prod.nit:9814 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:9811 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  /* ./parser//parser_prod.nit:9816 */
+  ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9817 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9818 */
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9818);
+      nit_exit(1);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos252] = 1;
+  return;
+}
+void parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9888;
+  fra.me.meth = LOCATE_parser_prod___ADoc___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9890 */
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9890);
+    nit_exit(1);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
+  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  while(1) {
+    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9891 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9891);
+        nit_exit(1);
+      }
+      fra.me.REG[4] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
+      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          REGB2 = TAG_Bool(false);
+          REGB0 = REGB2;
+        } else {
+          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+          REGB0 = REGB2;
+        }
+      }
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        /* ./parser//parser_prod.nit:9892 */
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB2)) {
+            REGB2 = TAG_Bool(false);
+            REGB0 = REGB2;
+          } else {
+            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB0 = REGB2;
+          }
+        }
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast TComment*/;
+          /* ./parser//parser_prod.nit:9893 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Assert failed");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9893);
+            nit_exit(1);
+          }
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9894 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9894);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
+          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          /* ./parser//parser_prod.nit:9895 */
+          if (UNTAG_Bool(REGB0)) {
+            fprintf(stderr, "Reciever is null");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9895);
+            nit_exit(1);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+          /* ./parser//parser_prod.nit:9897 */
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9897);
+            nit_exit(1);
+          }
+          fra.me.REG[4] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+        }
+        /* ./parser//parser_prod.nit:9899 */
+        goto label1;
+      }
+    } else {
+      /* ./parser//parser_prod.nit:9890 */
+      goto label2;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  }
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoc___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9904;
+  fra.me.meth = LOCATE_parser_prod___ADoc___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9906 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9906);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:9907 */
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    } else {
+      /* ./parser//parser_prod.nit:9906 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoc___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9911;
+  fra.me.meth = LOCATE_parser_prod___ADoc___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9914 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9914);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:9915 */
+  while(1) {
+    REGB1 = TAG_Int(0);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+    /* ./parser//parser_prod.nit:9915 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9916 */
+      if (UNTAG_Bool(REGB1)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9916);
+        nit_exit(1);
+      }
+      fra.me.REG[2] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
+      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:9917 */
+    } else {
+      /* ./parser//parser_prod.nit:9915 */
+      goto label1;
+    }
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ADoc___empty_init(val_t p0, int* init_table){
+  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos253]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9874;
+  fra.me.meth = LOCATE_parser_prod___ADoc___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:9874 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos253] = 1;
+  return;
+}
+void parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table){
+  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos254]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9876;
+  fra.me.meth = LOCATE_parser_prod___ADoc___init_adoc;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:9880 */
+  CALL_parser_prod___ADoc___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:9881 */
+  while(1) {
+    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast TComment*/;
+      /* ./parser//parser_prod.nit:9882 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9882);
+        nit_exit(1);
+      }
+      REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+      /* ./parser//parser_prod.nit:9883 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9883);
+        nit_exit(1);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
+      /* ./parser//parser_prod.nit:9884 */
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    } else {
+      /* ./parser//parser_prod.nit:9881 */
+      goto label1;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos254] = 1;
+  return;
+}
+void parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9932;
+  fra.me.meth = LOCATE_parser_prod___Start___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  /* ./parser//parser_prod.nit:9934 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    /* ./parser//parser_prod.nit:9935 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
+      }
+    }
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      /* ./parser//parser_prod.nit:9937 */
+      if (UNTAG_Bool(REGB0)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9937);
+        nit_exit(1);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModule, ID_AModule)) /*cast AModule*/;
+      /* ./parser//parser_prod.nit:9938 */
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        fprintf(stderr, "Assert failed");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9938);
+        nit_exit(1);
+      }
+      /* ./parser//parser_prod.nit:9939 */
+      ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[2];
+    }
+    /* ./parser//parser_prod.nit:9941 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+    /* ./parser//parser_prod.nit:9942 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Start___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9946;
+  fra.me.meth = LOCATE_parser_prod___Start___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9948 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModule, ID_AModule)) /*cast AModule*/;
+    /* ./parser//parser_prod.nit:9949 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9949);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  REGB0 = TAG_Bool(ATTR_parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9951 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_eof");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9951);
+    nit_exit(1);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Start___visit_all_reverse(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9954;
+  fra.me.meth = LOCATE_parser_prod___Start___visit_all_reverse;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(ATTR_parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
+  /* ./parser//parser_prod.nit:9956 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_n_eof");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9956);
+    nit_exit(1);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  /* ./parser//parser_prod.nit:9957 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[0] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AModule, ID_AModule)) /*cast AModule*/;
+    /* ./parser//parser_prod.nit:9958 */
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      fprintf(stderr, "Cast failed");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9958);
+      nit_exit(1);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___Start___init(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Start].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  if (init_table[itpos255]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 9924;
+  fra.me.meth = LOCATE_parser_prod___Start___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:9928 */
+  ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:9929 */
+  ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]) = fra.me.REG[2];
+  stack_frame_head = fra.me.prev;
+  init_table[itpos255] = 1;
   return;
 }