void global___instantiated_type_analysis___Program___with_each_live_local_classes(val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
  fun_t CREG[1];
  val_t tmp;
  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
  fra.me.file = LOCATE_global___instantiated_type_analysis;
  fra.me.line = 47;
  fra.me.meth = LOCATE_global___instantiated_type_analysis___Program___with_each_live_local_classes;
  fra.me.has_broke = 0;
  fra.me.REG_size = 3;
  fra.me.nitni_local_ref_head = NULL;
  fra.me.REG[0] = NIT_NULL;
  fra.me.REG[1] = NIT_NULL;
  fra.me.REG[2] = NIT_NULL;
  fra.me.closure_ctx = closctx_param;
  fra.me.closure_funs = CREG;
  fra.me.REG[0] = p0;
  CREG[0] = clos_fun0;
  /* global/instantiated_type_analysis.nit:47 */
  fra.me.REG[1] = fra.me.REG[0];
  /* global/instantiated_type_analysis.nit:51 */
  fra.me.REG[2] = CALL_program___Program___main_module(fra.me.REG[1])(fra.me.REG[1]);
  fra.me.REG[2] = CALL_metamodel___abstractmetamodel___MMModule___local_classes(fra.me.REG[2])(fra.me.REG[2]);
  CALL_standard___collection___abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_global___instantiated_type_analysis___Program___with_each_live_local_classes_1));
  switch ((&(fra.me))->has_broke) {
    case 0: break;
    case 1: (&(fra.me))->has_broke = 0; goto label3;
  }
  label3: while(0);
  stack_frame_head = fra.me.prev;
  return;
}
void global___instantiated_type_analysis___Program___dump_instantiated_types(val_t p0, val_t p1){
  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
  val_t REGB0;
  val_t tmp;
  static val_t once_value_1; /* Once value */
  static val_t once_value_2; /* Once value */
  static val_t once_value_3; /* Once value */
  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
  fra.me.file = LOCATE_global___instantiated_type_analysis;
  fra.me.line = 26;
  fra.me.meth = LOCATE_global___instantiated_type_analysis___Program___dump_instantiated_types;
  fra.me.has_broke = 0;
  fra.me.REG_size = 4;
  fra.me.nitni_local_ref_head = NULL;
  fra.me.REG[0] = NIT_NULL;
  fra.me.REG[1] = NIT_NULL;
  fra.me.REG[2] = NIT_NULL;
  fra.me.REG[3] = NIT_NULL;
  fra.me.REG[0] = p0;
  fra.me.REG[1] = p1;
  /* global/instantiated_type_analysis.nit:28 */
  REGB0 = TAG_Int(5);
  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
  if (!once_value_1) {
    fra.me.REG[3] = BOX_NativeString("");
    REGB0 = TAG_Int(0);
    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
    once_value_1 = fra.me.REG[3];
    register_static_object(&once_value_1);
  } else fra.me.REG[3] = once_value_1;
  fra.me.REG[3] = fra.me.REG[3];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  if (!once_value_2) {
    fra.me.REG[1] = BOX_NativeString("/");
    REGB0 = TAG_Int(1);
    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
    once_value_2 = fra.me.REG[1];
    register_static_object(&once_value_2);
  } else fra.me.REG[1] = once_value_2;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  fra.me.REG[1] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
  fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMModule___name(fra.me.REG[1])(fra.me.REG[1]);
  fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  if (!once_value_3) {
    fra.me.REG[1] = BOX_NativeString(".instantiated_types.log");
    REGB0 = TAG_Int(23);
    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
    once_value_3 = fra.me.REG[1];
    register_static_object(&once_value_3);
  } else fra.me.REG[1] = once_value_3;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
  fra.me.REG[2] = NEW_OFStream_standard___file___OFStream___open(fra.me.REG[2]);
  CALL_program___Program___with_each_live_local_classes(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_global___instantiated_type_analysis___Program___dump_instantiated_types_4));
  /* global/instantiated_type_analysis.nit:32 */
  CALL_standard___stream___IOS___close(fra.me.REG[2])(fra.me.REG[2]);
  stack_frame_head = fra.me.prev;
  return;
}
示例#3
0
void global___cha_analysis___ChaVisitor___visit_icode(val_t p0, val_t p1){
  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
  val_t REGB0;
  val_t REGB1;
  val_t tmp;
  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
  fra.me.file = LOCATE_global___cha_analysis;
  fra.me.line = 94;
  fra.me.meth = LOCATE_global___cha_analysis___ChaVisitor___visit_icode;
  fra.me.has_broke = 0;
  fra.me.REG_size = 7;
  fra.me.nitni_local_ref_head = NULL;
  fra.me.REG[0] = NIT_NULL;
  fra.me.REG[1] = NIT_NULL;
  fra.me.REG[2] = NIT_NULL;
  fra.me.REG[3] = NIT_NULL;
  fra.me.REG[4] = NIT_NULL;
  fra.me.REG[5] = NIT_NULL;
  fra.me.REG[6] = NIT_NULL;
  fra.me.REG[0] = p0;
  fra.me.REG[1] = p1;
  /* global/cha_analysis.nit:94 */
  fra.me.REG[2] = fra.me.REG[0];
  fra.me.REG[3] = fra.me.REG[1];
  /* global/cha_analysis.nit:96 */
  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___IStaticCall, ID_icode___icode_base___IStaticCall)) /*cast IStaticCall*/;
  if (UNTAG_Bool(REGB0)) {
    /* global/cha_analysis.nit:98 */
    fra.me.REG[4] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
      nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 98);
    }
    fra.me.REG[5] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
      nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 98);
    }
    fra.me.REG[6] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
    fra.me.REG[6] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[6])(fra.me.REG[6]);
    REGB0 = TAG_Bool(true);
    REGB1 = TAG_Bool(false);
    CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6], REGB0, REGB1);
  } else {
    /* global/cha_analysis.nit:99 */
    REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___INew, ID_icode___icode_base___INew)) /*cast INew*/;
    if (UNTAG_Bool(REGB1)) {
      /* global/cha_analysis.nit:101 */
      REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
      if (UNTAG_Bool(REGB1)) {
        nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 101);
      }
      fra.me.REG[6] = CALL_icode___icode_base___INew___stype(fra.me.REG[3])(fra.me.REG[3]);
      /* global/cha_analysis.nit:102 */
      fra.me.REG[5] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
      fra.me.REG[5] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[5])(fra.me.REG[5]);
      fra.me.REG[5] = CALL_program___Program___main_module(fra.me.REG[5])(fra.me.REG[5]);
      fra.me.REG[5] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
      fra.me.REG[5] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[5])(fra.me.REG[5]);
      /* global/cha_analysis.nit:103 */
      fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass___global(fra.me.REG[5])(fra.me.REG[5]);
      REGB1 = CALL_metamodel___abstractmetamodel___MMGlobalClass___is_extern(fra.me.REG[6])(fra.me.REG[6]);
      REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
      if (UNTAG_Bool(REGB1)) {
        /* global/cha_analysis.nit:104 */
        REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
        if (UNTAG_Bool(REGB1)) {
          nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 104);
        }
        fra.me.REG[6] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
        fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalProperty___global(fra.me.REG[6])(fra.me.REG[6]);
        fra.me.REG[6] = CALL_metamodel___abstractmetamodel___MMLocalClass_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
        REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_metamodel___abstractmetamodel___MMMethod, ID_metamodel___abstractmetamodel___MMMethod)) /*cast MMMethod*/;
        if (UNTAG_Bool(REGB1)) {
        } else {
          nit_abort("Cast failed", NULL, LOCATE_global___cha_analysis, 104);
        }
        /* global/cha_analysis.nit:105 */
        fra.me.REG[5] = CALL_program___MMLocalClass___new_instance_iroutine(fra.me.REG[5])(fra.me.REG[5]);
        fra.me.REG[6] = CALL_standard___collection___abstract_collection___MapRead_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
        /* global/cha_analysis.nit:106 */
        fra.me.REG[5] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
        REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
        if (UNTAG_Bool(REGB1)) {
          nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 106);
        }
        fra.me.REG[4] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
        REGB1 = TAG_Bool(false);
        REGB0 = TAG_Bool(false);
        CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], REGB1, REGB0);
      }
    } else {
      /* global/cha_analysis.nit:108 */
      REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___ISuper, ID_icode___icode_base___ISuper)) /*cast ISuper*/;
      if (UNTAG_Bool(REGB0)) {
        /* global/cha_analysis.nit:109 */
        fra.me.REG[6] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
        REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
        if (UNTAG_Bool(REGB0)) {
          nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 109);
        }
        fra.me.REG[4] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
        REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
        if (UNTAG_Bool(REGB0)) {
          nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 109);
        }
        fra.me.REG[5] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
        fra.me.REG[5] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[5])(fra.me.REG[5]);
        REGB0 = TAG_Bool(false);
        REGB1 = TAG_Bool(true);
        CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4], fra.me.REG[5], REGB0, REGB1);
      } else {
        /* global/cha_analysis.nit:110 */
        REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___ICall, ID_icode___icode_base___ICall)) /*cast ICall*/;
        if (UNTAG_Bool(REGB1)) {
          /* global/cha_analysis.nit:111 */
          fra.me.REG[5] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
          REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
          if (UNTAG_Bool(REGB1)) {
            nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 111);
          }
          fra.me.REG[4] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
          REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
          if (UNTAG_Bool(REGB1)) {
            nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 111);
          }
          fra.me.REG[6] = CALL_icode___icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
          fra.me.REG[6] = CALL_icode___icode_base___MMMethod___iroutine(fra.me.REG[6])(fra.me.REG[6]);
          REGB1 = TAG_Bool(false);
          REGB0 = TAG_Bool(false);
          CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], REGB1, REGB0);
        } else {
          /* global/cha_analysis.nit:112 */
          REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___ICheckInstance, ID_icode___icode_base___ICheckInstance)) /*cast ICheckInstance*/;
          if (UNTAG_Bool(REGB0)) {
            /* global/cha_analysis.nit:113 */
            REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
            if (UNTAG_Bool(REGB0)) {
              nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 113);
            }
            fra.me.REG[6] = CALL_icode___icode_base___ICheckInstance___stype(fra.me.REG[3])(fra.me.REG[3]);
            /* global/cha_analysis.nit:114 */
            fra.me.REG[4] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
            fra.me.REG[4] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[4])(fra.me.REG[4]);
            fra.me.REG[4] = CALL_program___Program___main_module(fra.me.REG[4])(fra.me.REG[4]);
            fra.me.REG[4] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
            fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[4])(fra.me.REG[4]);
            /* global/cha_analysis.nit:115 */
            fra.me.REG[4] = CALL_program___MMLocalClass___checknew_iroutine(fra.me.REG[4])(fra.me.REG[4]);
            /* global/cha_analysis.nit:116 */
            fra.me.REG[6] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
            REGB0 = TAG_Bool(true);
            REGB1 = TAG_Bool(false);
            CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[6])(fra.me.REG[6], NIT_NULL, fra.me.REG[4], REGB0, REGB1);
          } else {
            /* global/cha_analysis.nit:117 */
            REGB1 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_icode___icode_base___IInitAttributes, ID_icode___icode_base___IInitAttributes)) /*cast IInitAttributes*/;
            if (UNTAG_Bool(REGB1)) {
              /* global/cha_analysis.nit:118 */
              REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
              if (UNTAG_Bool(REGB1)) {
		nit_abort("Reciever is null", NULL, LOCATE_global___cha_analysis, 118);
              }
              fra.me.REG[3] = CALL_icode___icode_base___IInitAttributes___stype(fra.me.REG[3])(fra.me.REG[3]);
              /* global/cha_analysis.nit:119 */
              fra.me.REG[4] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
              fra.me.REG[4] = CALL_global___cha_analysis___ChaBuilder___program(fra.me.REG[4])(fra.me.REG[4]);
              fra.me.REG[4] = CALL_program___Program___main_module(fra.me.REG[4])(fra.me.REG[4]);
              fra.me.REG[4] = CALL_metamodel___static_type___MMType___for_module(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
              fra.me.REG[4] = CALL_metamodel___static_type___MMType___local_class(fra.me.REG[4])(fra.me.REG[4]);
              /* global/cha_analysis.nit:120 */
              fra.me.REG[4] = CALL_program___MMLocalClass___init_var_iroutine(fra.me.REG[4])(fra.me.REG[4]);
              /* global/cha_analysis.nit:121 */
              fra.me.REG[2] = CALL_global___cha_analysis___ChaVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
              REGB1 = TAG_Bool(true);
              REGB0 = TAG_Bool(false);
              CALL_global___cha_analysis___ChaBuilder___add_search(fra.me.REG[2])(fra.me.REG[2], NIT_NULL, fra.me.REG[4], REGB1, REGB0);
            }
          }
        }
      }
    }
  }
  /* global/cha_analysis.nit:123 */
  CALL_SUPER_global___cha_analysis___ChaVisitor___visit_icode(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
  stack_frame_head = fra.me.prev;
  return;
}
void global___remove_out_of_init_get_test___Program___dump_out_of_init_information(val_t p0, val_t p1){
  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
  val_t REGB0;
  val_t tmp;
  static val_t once_value_1; /* Once value */
  static val_t once_value_2; /* Once value */
  static val_t once_value_3; /* Once value */
  static val_t once_value_5; /* Once value */
  static val_t once_value_6; /* Once value */
  static val_t once_value_7; /* Once value */
  static val_t once_value_8; /* Once value */
  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
  fra.me.file = LOCATE_global___remove_out_of_init_get_test;
  fra.me.line = 39;
  fra.me.meth = LOCATE_global___remove_out_of_init_get_test___Program___dump_out_of_init_information;
  fra.me.has_broke = 0;
  fra.me.REG_size = 5;
  fra.me.nitni_local_ref_head = NULL;
  fra.me.REG[0] = NIT_NULL;
  fra.me.REG[1] = NIT_NULL;
  fra.me.REG[2] = NIT_NULL;
  fra.me.REG[3] = NIT_NULL;
  fra.me.REG[4] = NIT_NULL;
  fra.me.REG[0] = p0;
  fra.me.REG[1] = p1;
  /* global/remove_out_of_init_get_test.nit:41 */
  REGB0 = TAG_Int(5);
  fra.me.REG[2] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
  if (!once_value_1) {
    fra.me.REG[3] = BOX_NativeString("");
    REGB0 = TAG_Int(0);
    fra.me.REG[3] = NEW_String_standard___string___String___with_native(fra.me.REG[3], REGB0);
    once_value_1 = fra.me.REG[3];
    register_static_object(&once_value_1);
  } else fra.me.REG[3] = once_value_1;
  fra.me.REG[3] = fra.me.REG[3];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  if (!once_value_2) {
    fra.me.REG[1] = BOX_NativeString("/");
    REGB0 = TAG_Int(1);
    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
    once_value_2 = fra.me.REG[1];
    register_static_object(&once_value_2);
  } else fra.me.REG[1] = once_value_2;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  fra.me.REG[1] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
  fra.me.REG[1] = CALL_metamodel___abstractmetamodel___MMModule___name(fra.me.REG[1])(fra.me.REG[1]);
  fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  if (!once_value_3) {
    fra.me.REG[1] = BOX_NativeString(".out_of_init_opt.log");
    REGB0 = TAG_Int(20);
    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
    once_value_3 = fra.me.REG[1];
    register_static_object(&once_value_3);
  } else fra.me.REG[1] = once_value_3;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
  fra.me.REG[2] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
  fra.me.REG[2] = NEW_OFStream_standard___file___OFStream___open(fra.me.REG[2]);
  /* global/remove_out_of_init_get_test.nit:42 */
  REGB0 = TAG_Int(0);
  fra.me.REG[1] = REGB0;
  CALL_program___Program___with_each_iroutines(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_global___remove_out_of_init_get_test___Program___dump_out_of_init_information_4));
  /* global/remove_out_of_init_get_test.nit:50 */
  REGB0 = TAG_Int(3);
  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
  if (!once_value_5) {
    fra.me.REG[4] = BOX_NativeString("Nb. optimized isset: ");
    REGB0 = TAG_Int(21);
    fra.me.REG[4] = NEW_String_standard___string___String___with_native(fra.me.REG[4], REGB0);
    once_value_5 = fra.me.REG[4];
    register_static_object(&once_value_5);
  } else fra.me.REG[4] = once_value_5;
  fra.me.REG[4] = fra.me.REG[4];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
  REGB0 = CALL_global___remove_out_of_init_get_test___Program___nb_optimized_isset(fra.me.REG[0])(fra.me.REG[0]);
  fra.me.REG[0] = CALL_standard___string___Object___to_s(REGB0)(REGB0);
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
  if (!once_value_6) {
    fra.me.REG[0] = BOX_NativeString("\n");
    REGB0 = TAG_Int(1);
    fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB0);
    once_value_6 = fra.me.REG[0];
    register_static_object(&once_value_6);
  } else fra.me.REG[0] = once_value_6;
  fra.me.REG[0] = fra.me.REG[0];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
  fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
  CALL_standard___stream___OStream___write(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
  /* global/remove_out_of_init_get_test.nit:51 */
  REGB0 = TAG_Int(3);
  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
  if (!once_value_7) {
    fra.me.REG[0] = BOX_NativeString("Nb. not optimized: ");
    REGB0 = TAG_Int(19);
    fra.me.REG[0] = NEW_String_standard___string___String___with_native(fra.me.REG[0], REGB0);
    once_value_7 = fra.me.REG[0];
    register_static_object(&once_value_7);
  } else fra.me.REG[0] = once_value_7;
  fra.me.REG[0] = fra.me.REG[0];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
  fra.me.REG[1] = CALL_standard___string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
  if (!once_value_8) {
    fra.me.REG[1] = BOX_NativeString("\n");
    REGB0 = TAG_Int(1);
    fra.me.REG[1] = NEW_String_standard___string___String___with_native(fra.me.REG[1], REGB0);
    once_value_8 = fra.me.REG[1];
    register_static_object(&once_value_8);
  } else fra.me.REG[1] = once_value_8;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
  fra.me.REG[3] = CALL_standard___string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
  CALL_standard___stream___OStream___write(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
  /* global/remove_out_of_init_get_test.nit:53 */
  CALL_standard___stream___IOS___close(fra.me.REG[2])(fra.me.REG[2]);
  stack_frame_head = fra.me.prev;
  return;
}
void reachable_method_analysis___Program___dump_reachable_methods(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 tmp;
  static val_t once_value_1; /* Once value */
  static val_t once_value_2; /* Once value */
  static val_t once_value_3; /* Once value */
  static val_t once_value_4; /* Once value */
  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
  fra.me.file = LOCATE_reachable_method_analysis;
  fra.me.line = 27;
  fra.me.meth = LOCATE_reachable_method_analysis___Program___dump_reachable_methods;
  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;
  /* ./analysis//reachable_method_analysis.nit:29 */
  REGB0 = TAG_Int(7);
  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
  if (!once_value_1) {
    fra.me.REG[4] = BOX_NativeString("");
    REGB0 = TAG_Int(0);
    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
    once_value_1 = fra.me.REG[4];
    register_static_object(&once_value_1);
  } else fra.me.REG[4] = once_value_1;
  fra.me.REG[4] = fra.me.REG[4];
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
  if (!once_value_2) {
    fra.me.REG[1] = BOX_NativeString("/");
    REGB0 = TAG_Int(1);
    fra.me.REG[1] = NEW_String_string___String___with_native(fra.me.REG[1], REGB0);
    once_value_2 = fra.me.REG[1];
    register_static_object(&once_value_2);
  } else fra.me.REG[1] = once_value_2;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
  fra.me.REG[1] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
  fra.me.REG[1] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[1])(fra.me.REG[1]);
  fra.me.REG[1] = CALL_string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
  if (!once_value_3) {
    fra.me.REG[1] = BOX_NativeString(".reachable_methods.");
    REGB0 = TAG_Int(19);
    fra.me.REG[1] = NEW_String_string___String___with_native(fra.me.REG[1], REGB0);
    once_value_3 = fra.me.REG[1];
    register_static_object(&once_value_3);
  } else fra.me.REG[1] = once_value_3;
  fra.me.REG[1] = fra.me.REG[1];
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
  if (!once_value_4) {
    fra.me.REG[2] = BOX_NativeString(".log");
    REGB0 = TAG_Int(4);
    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
    once_value_4 = fra.me.REG[2];
    register_static_object(&once_value_4);
  } else fra.me.REG[2] = once_value_4;
  fra.me.REG[2] = fra.me.REG[2];
  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
  fra.me.REG[3] = NEW_OFStream_file___OFStream___open(fra.me.REG[3]);
  CALL_program___Program___with_each_methods(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_reachable_method_analysis___Program___dump_reachable_methods_5));
  /* ./analysis//reachable_method_analysis.nit:35 */
  CALL_stream___IOS___close(fra.me.REG[3])(fra.me.REG[3]);
  stack_frame_head = fra.me.prev;
  return;
}
void reachable_as_init_impl___RAIVisitor___visit_icode(val_t p0, val_t p1){
  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
  val_t REGB0;
  val_t tmp;
  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
  fra.me.file = LOCATE_reachable_as_init_impl;
  fra.me.line = 59;
  fra.me.meth = LOCATE_reachable_as_init_impl___RAIVisitor___visit_icode;
  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;
  /* ./analysis//reachable_as_init_impl.nit:59 */
  fra.me.REG[2] = fra.me.REG[0];
  fra.me.REG[3] = fra.me.REG[1];
  /* ./analysis//reachable_as_init_impl.nit:61 */
  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_INew, ID_INew)) /*cast INew*/;
  if (UNTAG_Bool(REGB0)) {
    /* ./analysis//reachable_as_init_impl.nit:63 */
    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
      nit_abort("Reciever is null", NULL, LOCATE_reachable_as_init_impl, 63);
    }
    fra.me.REG[4] = CALL_icode_base___INew___stype(fra.me.REG[3])(fra.me.REG[3]);
    /* ./analysis//reachable_as_init_impl.nit:64 */
    fra.me.REG[5] = CALL_reachable_as_init_impl___RAIVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
    fra.me.REG[5] = CALL_reachable_as_init_impl___ReachableAsInitBuilder___program(fra.me.REG[5])(fra.me.REG[5]);
    fra.me.REG[5] = CALL_program___Program___main_module(fra.me.REG[5])(fra.me.REG[5]);
    fra.me.REG[5] = CALL_static_type___MMType___for_module(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
    fra.me.REG[5] = CALL_static_type___MMType___local_class(fra.me.REG[5])(fra.me.REG[5]);
    /* ./analysis//reachable_as_init_impl.nit:65 */
    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
      nit_abort("Reciever is null", NULL, LOCATE_reachable_as_init_impl, 65);
    }
    fra.me.REG[3] = CALL_icode_base___IAbsCall___property(fra.me.REG[3])(fra.me.REG[3]);
    fra.me.REG[3] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
    fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
    if (UNTAG_Bool(REGB0)) {
    } else {
      nit_abort("Cast failed", NULL, LOCATE_reachable_as_init_impl, 65);
    }
    /* ./analysis//reachable_as_init_impl.nit:66 */
    fra.me.REG[4] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[3])(fra.me.REG[3]);
    REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[4])(fra.me.REG[4]);
    if (UNTAG_Bool(REGB0)) {
    } else {
      nit_abort("Assert failed", NULL, LOCATE_reachable_as_init_impl, 66);
    }
    /* ./analysis//reachable_as_init_impl.nit:67 */
    fra.me.REG[4] = CALL_reachable_as_init_impl___RAIVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
    fra.me.REG[4] = CALL_reachable_as_init_impl___ReachableAsInitBuilder___context(fra.me.REG[4])(fra.me.REG[4]);
    REGB0 = TAG_Bool(ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[4])!=NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
    } else {
      nit_abort("Uninitialized attribute %s", "_methods", LOCATE_reachable_as_init_impl, 67);
    }
    fra.me.REG[4] = ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[4]);
    REGB0 = CALL_abstract_collection___MapRead___has_key(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
    if (UNTAG_Bool(REGB0)) {
      fra.me.REG[4] = CALL_reachable_as_init_impl___RAIVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
      fra.me.REG[4] = CALL_reachable_as_init_impl___ReachableAsInitBuilder___context(fra.me.REG[4])(fra.me.REG[4]);
      REGB0 = TAG_Bool(ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[4])!=NIT_NULL);
      if (UNTAG_Bool(REGB0)) {
      } else {
        nit_abort("Uninitialized attribute %s", "_methods", LOCATE_reachable_as_init_impl, 67);
      }
      fra.me.REG[4] = ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[4]);
      fra.me.REG[6] = NEW_List_list___List___init();
      CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
    }
    /* ./analysis//reachable_as_init_impl.nit:68 */
    fra.me.REG[6] = CALL_reachable_as_init_impl___RAIVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
    fra.me.REG[6] = CALL_reachable_as_init_impl___ReachableAsInitBuilder___context(fra.me.REG[6])(fra.me.REG[6]);
    REGB0 = TAG_Bool(ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[6])!=NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
    } else {
      nit_abort("Uninitialized attribute %s", "_methods", LOCATE_reachable_as_init_impl, 68);
    }
    fra.me.REG[6] = ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[6]);
    fra.me.REG[6] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
    if (UNTAG_Bool(REGB0)) {
      nit_abort("Reciever is null", NULL, LOCATE_reachable_as_init_impl, 68);
    }
    REGB0 = CALL_abstract_collection___Collection___has(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
    if (UNTAG_Bool(REGB0)) {
      fra.me.REG[2] = CALL_reachable_as_init_impl___RAIVisitor___builder(fra.me.REG[2])(fra.me.REG[2]);
      fra.me.REG[2] = CALL_reachable_as_init_impl___ReachableAsInitBuilder___context(fra.me.REG[2])(fra.me.REG[2]);
      REGB0 = TAG_Bool(ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[2])!=NIT_NULL);
      if (UNTAG_Bool(REGB0)) {
      } else {
        nit_abort("Uninitialized attribute %s", "_methods", LOCATE_reachable_as_init_impl, 68);
      }
      fra.me.REG[2] = ATTR_reachable_as_init_impl___ReachableAsInitAnalysisImpl____methods(fra.me.REG[2]);
      fra.me.REG[5] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[5]);
      REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
      if (UNTAG_Bool(REGB0)) {
        nit_abort("Reciever is null", NULL, LOCATE_reachable_as_init_impl, 68);
      }
      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
    }
  }
  /* ./analysis//reachable_as_init_impl.nit:70 */
  CALL_SUPER_reachable_as_init_impl___RAIVisitor___visit_icode(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
  stack_frame_head = fra.me.prev;
  return;
}