c_src: update
[nit.git] / c_src / compiling_global._sep.c
index 19d0bb3..28720fa 100644 (file)
@@ -1,76 +1,24 @@
 /* This C file is generated by NIT to compile module compiling_global. */
 #include "compiling_global._sep.h"
-val_t compiling_global___GlobalCompilerVisitor___program(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 25;
-  fra.me.meth = LOCATE_compiling_global___GlobalCompilerVisitor___program;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = TAG_Bool(ATTR_compiling_global___GlobalCompilerVisitor____program(fra.me.REG[0])!=NIT_NULL);
-  /* ./compiling//compiling_global.nit:25 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_program");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 25);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_compiling_global___GlobalCompilerVisitor____program(fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
-}
-void compiling_global___GlobalCompilerVisitor___init(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_GlobalCompilerVisitor].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t tmp;
-  if (init_table[itpos0]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 27;
-  fra.me.meth = LOCATE_compiling_global___GlobalCompilerVisitor___init;
-  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] = fra.me.REG[0];
-  /* ./compiling//compiling_global.nit:29 */
-  CALL_compiling_base___CompilerVisitor___init(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], fra.me.REG[2], init_table);
-  /* ./compiling//compiling_global.nit:30 */
-  ATTR_compiling_global___GlobalCompilerVisitor____program(fra.me.REG[4]) = fra.me.REG[3];
-  stack_frame_head = fra.me.prev;
-  init_table[itpos0] = 1;
-  return;
-}
 void compiling_global___Program___compile_tables_to_c(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  static val_t once_value_3; /* Once value */
   static val_t once_value_4; /* Once value */
   static val_t once_value_5; /* Once value */
   static val_t once_value_6; /* Once value */
-        static val_t once_value_7; /* Once value */
+  static val_t once_value_7; /* Once value */
         static val_t once_value_8; /* Once value */
         static val_t once_value_9; /* Once value */
-  static val_t once_value_11; /* Once value */
+        static val_t once_value_10; /* Once value */
+  static val_t once_value_12; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 35;
+  fra.me.line = 24;
   fra.me.meth = LOCATE_compiling_global___Program___compile_tables_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -78,155 +26,215 @@ void compiling_global___Program___compile_tables_to_c(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = CALL_program___Program___module(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:27 */
+  fra.me.REG[2] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[2] = CALL_abstractmetamodel___MMModule___mhe(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:38 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 38);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 27);
   }
   fra.me.REG[2] = CALL_partial_order___PartialOrderElement___greaters_and_self(fra.me.REG[2])(fra.me.REG[2]);
-  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]);
-      /* ./compiling//compiling_global.nit:39 */
-      CALL_compiling_global___MMModule___compile_local_table_to_c(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    } else {
-      /* ./compiling//compiling_global.nit:38 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  fra.me.REG[2] = CALL_program___Program___module(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstractmetamodel___MMModule___local_classes(fra.me.REG[2])(fra.me.REG[2]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:42 */
-  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]);
-      /* ./compiling//compiling_global.nit:43 */
-      CALL_compiling_global___MMLocalClass___compile_tables_to_c(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    } else {
-      /* ./compiling//compiling_global.nit:42 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label2: while(0);
-  /* ./compiling//compiling_global.nit:45 */
-  if (!once_value_3) {
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_compiling_global___Program___compile_tables_to_c_1));
+  CALL_program___Program___with_each_live_local_classes(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_compiling_global___Program___compile_tables_to_c_2));
+  /* ./compiling//compiling_global.nit:36 */
+  if (!once_value_4) {
     fra.me.REG[2] = BOX_NativeString("classtable_t TAG2VFT[4] = {NULL");
     REGB0 = TAG_Int(31);
     fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
-    once_value_3 = fra.me.REG[2];
-    register_static_object(&once_value_3);
-  } else fra.me.REG[2] = once_value_3;
+    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];
   fra.me.REG[2] = NEW_Buffer_string___Buffer___from(fra.me.REG[2]);
+  /* ./compiling//compiling_global.nit:37 */
   REGB0 = TAG_Int(3);
   fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:46 */
-  if (!once_value_4) {
+  if (!once_value_5) {
     fra.me.REG[4] = BOX_NativeString("Int");
     REGB0 = TAG_Int(3);
     fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_4 = fra.me.REG[4];
-    register_static_object(&once_value_4);
-  } else fra.me.REG[4] = once_value_4;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  if (!once_value_5) {
-    fra.me.REG[4] = BOX_NativeString("Char");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[4] = NEW_String_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;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  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]);
   if (!once_value_6) {
-    fra.me.REG[4] = BOX_NativeString("Bool");
+    fra.me.REG[4] = BOX_NativeString("Char");
     REGB0 = TAG_Int(4);
     fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
     once_value_6 = fra.me.REG[4];
     register_static_object(&once_value_6);
   } else fra.me.REG[4] = once_value_6;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  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]);
+  if (!once_value_7) {
+    fra.me.REG[4] = BOX_NativeString("Bool");
+    REGB0 = TAG_Int(4);
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+    once_value_7 = fra.me.REG[4];
+    register_static_object(&once_value_7);
+  } else fra.me.REG[4] = once_value_7;
+  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]);
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB0 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[3]);
+  /* ./../lib/standard//collection//array.nit:237 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      fra.me.REG[5] = CALL_program___Program___module(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
-      REGB0 = CALL_abstractmetamodel___MMModule___has_global_class_named(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
-      /* ./compiling//compiling_global.nit:47 */
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Int(3);
-        fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB0);
-        /* ./compiling//compiling_global.nit:48 */
-        if (!once_value_7) {
-          fra.me.REG[5] = BOX_NativeString(", (const classtable_t)VFT_");
-          REGB0 = TAG_Int(26);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-          once_value_7 = fra.me.REG[5];
-          register_static_object(&once_value_7);
-        } else fra.me.REG[5] = once_value_7;
-        array___Array___add(fra.me.REG[6], fra.me.REG[5]);
-        array___Array___add(fra.me.REG[6], fra.me.REG[4]);
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB1)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
+      /* ./compiling//compiling_global.nit:38 */
+      fra.me.REG[6] = CALL_program___Program___main_module(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[7] = CALL_symbol___String___to_symbol(fra.me.REG[5])(fra.me.REG[5]);
+      REGB1 = CALL_abstractmetamodel___MMModule___has_global_class_named(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+      if (UNTAG_Bool(REGB1)) {
+        /* ./compiling//compiling_global.nit:39 */
+        REGB1 = TAG_Int(3);
+        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB1);
         if (!once_value_8) {
-          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_8 = fra.me.REG[4];
+          fra.me.REG[6] = BOX_NativeString(", (const classtable_t)VFT_");
+          REGB1 = TAG_Int(26);
+          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB1);
+          once_value_8 = fra.me.REG[6];
           register_static_object(&once_value_8);
-        } else fra.me.REG[4] = once_value_8;
-        array___Array___add(fra.me.REG[6], fra.me.REG[4]);
-        fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-        CALL_abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
-      } else {
-        /* ./compiling//compiling_global.nit:50 */
+        } else fra.me.REG[6] = once_value_8;
+        fra.me.REG[6] = fra.me.REG[6];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
         if (!once_value_9) {
-          fra.me.REG[6] = BOX_NativeString(", NULL");
-          REGB0 = TAG_Int(6);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-          once_value_9 = fra.me.REG[6];
+          fra.me.REG[5] = BOX_NativeString("");
+          REGB1 = TAG_Int(0);
+          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
+          once_value_9 = fra.me.REG[5];
           register_static_object(&once_value_9);
-        } else fra.me.REG[6] = once_value_9;
-        CALL_abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+        } else fra.me.REG[5] = once_value_9;
+        fra.me.REG[5] = fra.me.REG[5];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
+        fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
+        CALL_abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
+      } else {
+        /* ./compiling//compiling_global.nit:41 */
+        if (!once_value_10) {
+          fra.me.REG[7] = BOX_NativeString(", NULL");
+          REGB1 = TAG_Int(6);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB1);
+          once_value_10 = fra.me.REG[7];
+          register_static_object(&once_value_10);
+        } else fra.me.REG[7] = once_value_10;
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
       }
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB1 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB0 = REGB1;
     } else {
-      /* ./compiling//compiling_global.nit:46 */
-      goto label10;
+      /* ./../lib/standard//collection//array.nit:237 */
+      goto label11;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
-  label10: while(0);
-  /* ./compiling//compiling_global.nit:53 */
-  if (!once_value_11) {
-    fra.me.REG[3] = BOX_NativeString("};");
+  label11: while(0);
+  /* ./compiling//compiling_global.nit:44 */
+  if (!once_value_12) {
+    fra.me.REG[0] = BOX_NativeString("};");
     REGB0 = TAG_Int(2);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_11 = fra.me.REG[3];
-    register_static_object(&once_value_11);
-  } else fra.me.REG[3] = once_value_11;
-  CALL_abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    once_value_12 = fra.me.REG[0];
+    register_static_object(&once_value_12);
+  } else fra.me.REG[0] = once_value_12;
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___Sequence___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:45 */
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:54 */
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
+  void OC_compiling_global___Program___compile_tables_to_c_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_compiling_global;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_compiling_global___Program___compile_tables_to_c;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./compiling//compiling_global.nit:28 */
+    CALL_compiling_global___MMModule___compile_local_table_to_c(fra.me.REG[0])(fra.me.REG[0], closctx->REG[1]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_compiling_global___Program___compile_tables_to_c_2(struct stack_frame_t *closctx, val_t p0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    val_t REGB1;
+    val_t tmp;
+    /* ./compiling//compiling_global.nit:31 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_compiling_global;
+    fra.me.line = 31;
+    fra.me.meth = LOCATE_compiling_global___Program___compile_tables_to_c;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.REG[0] = p0;
+    /* ./compiling//compiling_global.nit:32 */
+    fra.me.REG[1] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
+    REGB0 = CALL_abstractmetamodel___MMGlobalClass___is_abstract(fra.me.REG[1])(fra.me.REG[1]);
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Bool(true);
+    } else {
+      fra.me.REG[1] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
+      REGB1 = CALL_abstractmetamodel___MMGlobalClass___is_interface(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = REGB1;
+    }
+    if (UNTAG_Bool(REGB0)) {
+      goto label3;
+    }
+    /* ./compiling//compiling_global.nit:33 */
+    CALL_compiling_global___MMLocalClass___compile_tables_to_c(fra.me.REG[0])(fra.me.REG[0], closctx->REG[1]);
+    label3: while(0);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void compiling_global___Program___compile_main_part(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
@@ -242,58 +250,51 @@ void compiling_global___Program___compile_main_part(val_t p0, val_t p1){
   static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 57;
+  fra.me.line = 48;
   fra.me.meth = LOCATE_compiling_global___Program___compile_main_part;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:60 */
+  /* ./compiling//compiling_global.nit:51 */
   if (!once_value_1) {
-    fra.me.REG[3] = BOX_NativeString("int main(int argc, char **argv) {");
+    fra.me.REG[2] = BOX_NativeString("int main(int argc, char **argv) {");
     REGB0 = TAG_Int(33);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_1 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_1 = fra.me.REG[2];
     register_static_object(&once_value_1);
-  } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[2] = once_value_1;
+  fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:61 */
+  /* ./compiling//compiling_global.nit:52 */
   CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:62 */
+  /* ./compiling//compiling_global.nit:53 */
   if (!once_value_2) {
-    fra.me.REG[3] = BOX_NativeString("prepare_signals();");
+    fra.me.REG[2] = BOX_NativeString("prepare_signals();");
     REGB0 = TAG_Int(18);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_2 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_2 = fra.me.REG[2];
     register_static_object(&once_value_2);
-  } else fra.me.REG[3] = once_value_2;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[2] = once_value_2;
+  fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:63 */
+  /* ./compiling//compiling_global.nit:54 */
   if (!once_value_3) {
-    fra.me.REG[3] = BOX_NativeString("glob_argc = argc; glob_argv = argv;");
+    fra.me.REG[2] = BOX_NativeString("glob_argc = argc; glob_argv = argv;");
     REGB0 = TAG_Int(35);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_3 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_3 = fra.me.REG[2];
     register_static_object(&once_value_3);
-  } else fra.me.REG[3] = once_value_3;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[2] = once_value_3;
+  fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:55 */
+  fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_program___Program___main_method(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:64 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -306,7 +307,7 @@ void compiling_global___Program___compile_main_part(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./compiling//compiling_global.nit:65 */
+    /* ./compiling//compiling_global.nit:56 */
     if (!once_value_4) {
       fra.me.REG[2] = BOX_NativeString("No main");
       REGB0 = TAG_Int(7);
@@ -314,148 +315,145 @@ void compiling_global___Program___compile_main_part(val_t p0, val_t p1){
       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_file___Object___print(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
   } else {
-    REGB0 = TAG_Int(0);
-    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:67 */
+    /* ./compiling//compiling_global.nit:58 */
     if (!once_value_5) {
-      fra.me.REG[0] = BOX_NativeString("G_sys = NEW_Sys();");
+      fra.me.REG[2] = BOX_NativeString("G_sys = NEW_Sys();");
       REGB0 = TAG_Int(18);
-      fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
-      once_value_5 = fra.me.REG[0];
+      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+      once_value_5 = fra.me.REG[2];
       register_static_object(&once_value_5);
-    } else fra.me.REG[0] = once_value_5;
-    array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+    } else fra.me.REG[2] = once_value_5;
+    fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    REGB0 = TAG_Int(0);
-    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:68 */
+    /* ./compiling//compiling_global.nit:59 */
     if (!once_value_6) {
-      fra.me.REG[0] = BOX_NativeString("register_static_object(&G_sys);");
+      fra.me.REG[2] = BOX_NativeString("register_static_object(&G_sys);");
       REGB0 = TAG_Int(31);
-      fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
-      once_value_6 = fra.me.REG[0];
+      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+      once_value_6 = fra.me.REG[2];
       register_static_object(&once_value_6);
-    } else fra.me.REG[0] = once_value_6;
-    array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+    } else fra.me.REG[2] = once_value_6;
+    fra.me.REG[2] = fra.me.REG[2];
     CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    REGB0 = TAG_Int(0);
-    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:60 */
     REGB0 = TAG_Int(3);
-    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:69 */
+    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
     if (!once_value_7) {
-      fra.me.REG[3] = BOX_NativeString("");
+      fra.me.REG[0] = BOX_NativeString("");
       REGB0 = TAG_Int(0);
-      fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-      once_value_7 = fra.me.REG[3];
+      fra.me.REG[0] = NEW_String_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[3] = once_value_7;
-    array___Array___add(fra.me.REG[0], fra.me.REG[3]);
-    fra.me.REG[3] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
-    fra.me.REG[3] = CALL_program___Program___main_method(fra.me.REG[3])(fra.me.REG[3]);
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    } else fra.me.REG[0] = once_value_7;
+    fra.me.REG[0] = fra.me.REG[0];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    fra.me.REG[0] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+    fra.me.REG[0] = CALL_program___Program___main_method(fra.me.REG[0])(fra.me.REG[0]);
+    REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 69);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 60);
     }
-    fra.me.REG[3] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[3])(fra.me.REG[3]);
-    array___Array___add(fra.me.REG[0], fra.me.REG[3]);
+    fra.me.REG[0] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[0])(fra.me.REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
     if (!once_value_8) {
-      fra.me.REG[3] = BOX_NativeString("(G_sys);");
+      fra.me.REG[0] = BOX_NativeString("(G_sys);");
       REGB0 = TAG_Int(8);
-      fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-      once_value_8 = fra.me.REG[3];
+      fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+      once_value_8 = fra.me.REG[0];
       register_static_object(&once_value_8);
-    } else fra.me.REG[3] = once_value_8;
-    array___Array___add(fra.me.REG[0], fra.me.REG[3]);
-    fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-    array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+    } else fra.me.REG[0] = once_value_8;
+    fra.me.REG[0] = fra.me.REG[0];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
     CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:71 */
+  /* ./compiling//compiling_global.nit:62 */
   if (!once_value_9) {
-    fra.me.REG[0] = BOX_NativeString("return 0;");
+    fra.me.REG[2] = BOX_NativeString("return 0;");
     REGB0 = TAG_Int(9);
-    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
-    once_value_9 = fra.me.REG[0];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_9 = fra.me.REG[2];
     register_static_object(&once_value_9);
-  } else fra.me.REG[0] = once_value_9;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  } else fra.me.REG[2] = once_value_9;
+  fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:72 */
+  /* ./compiling//compiling_global.nit:63 */
   CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:73 */
+  /* ./compiling//compiling_global.nit:64 */
   if (!once_value_10) {
-    fra.me.REG[0] = BOX_NativeString("}");
+    fra.me.REG[2] = BOX_NativeString("}");
     REGB0 = TAG_Int(1);
-    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
-    once_value_10 = fra.me.REG[0];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_10 = fra.me.REG[2];
     register_static_object(&once_value_10);
-  } else fra.me.REG[0] = once_value_10;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  } else fra.me.REG[2] = once_value_10;
+  fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
 void compiling_global___MMModule___declare_class_tables_to_c(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t REGB1;
+  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_compiling_global;
-  fra.me.line = 78;
+  fra.me.line = 69;
   fra.me.meth = LOCATE_compiling_global___MMModule___declare_class_tables_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./compiling//compiling_global.nit:72 */
   fra.me.REG[2] = CALL_abstractmetamodel___MMModule___local_classes(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:81 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_compiling_global___MMModule___declare_class_tables_to_c_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_compiling_global___MMModule___declare_class_tables_to_c_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    val_t REGB1;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_compiling_global;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_compiling_global___MMModule___declare_class_tables_to_c;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./compiling//compiling_global.nit:73 */
+    fra.me.REG[1] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[1] = CALL_abstractmetamodel___MMGlobalClass___mmmodule(fra.me.REG[1])(fra.me.REG[1]);
+    REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[1],closctx->REG[0]));
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[3])(fra.me.REG[3]);
-      fra.me.REG[4] = CALL_abstractmetamodel___MMGlobalClass___module(fra.me.REG[4])(fra.me.REG[4]);
-      REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[4],fra.me.REG[0]));
-      /* ./compiling//compiling_global.nit:82 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-        REGB0 = REGB1;
-      }
-      if (UNTAG_Bool(REGB0)) {
-        /* ./compiling//compiling_global.nit:83 */
-        CALL_compiling_global___MMLocalClass___declare_tables_to_c(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      }
     } else {
-      /* ./compiling//compiling_global.nit:81 */
-      goto label1;
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], closctx->REG[0]);
+      REGB0 = REGB1;
+    }
+    if (UNTAG_Bool(REGB0)) {
+      /* ./compiling//compiling_global.nit:74 */
+      CALL_compiling_global___MMLocalClass___declare_tables_to_c(fra.me.REG[0])(fra.me.REG[0], closctx->REG[1]);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void compiling_global___MMModule___compile_mod_to_c(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
+  val_t REGB2;
   val_t tmp;
   static val_t once_value_1; /* Once value */
   static val_t once_value_2; /* Once value */
@@ -466,19 +464,12 @@ void compiling_global___MMModule___compile_mod_to_c(val_t p0, val_t p1){
         static val_t once_value_7; /* Once value */
         static val_t once_value_8; /* Once value */
         static val_t once_value_9; /* Once value */
-               static val_t once_value_12; /* Once value */
-               static val_t once_value_13; /* Once value */
-            static val_t once_value_15; /* Once value */
-            static val_t once_value_16; /* Once value */
-            static val_t once_value_17; /* Once value */
-            static val_t once_value_18; /* Once value */
-            static val_t once_value_19; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 88;
+  fra.me.line = 79;
   fra.me.meth = LOCATE_compiling_global___MMModule___compile_mod_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -487,316 +478,395 @@ void compiling_global___MMModule___compile_mod_to_c(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
-  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:82 */
   REGB0 = TAG_Int(3);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:91 */
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[4] = BOX_NativeString("extern const char *LOCATE_");
+    fra.me.REG[3] = BOX_NativeString("extern const char *LOCATE_");
     REGB0 = TAG_Int(26);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_1 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_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[4] = once_value_1;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  } else fra.me.REG[3] = once_value_1;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_2) {
-    fra.me.REG[4] = BOX_NativeString(";");
+    fra.me.REG[3] = BOX_NativeString(";");
     REGB0 = TAG_Int(1);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_2 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_2 = fra.me.REG[3];
     register_static_object(&once_value_2);
-  } else fra.me.REG[4] = once_value_2;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[3] = once_value_2;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___tc(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = CALL_compiling_base___ToolContext___global(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./compiling//compiling_global.nit:83 */
+  fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = CALL_program___Program___tc(fra.me.REG[2])(fra.me.REG[2]);
+  REGB0 = CALL_program___ToolContext___use_SFT_optimization(fra.me.REG[2])(fra.me.REG[2]);
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  /* ./compiling//compiling_global.nit:92 */
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Int(0);
-    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:84 */
     REGB0 = TAG_Int(3);
-    fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:93 */
+    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
     if (!once_value_3) {
-      fra.me.REG[4] = BOX_NativeString("extern const int SFT_");
+      fra.me.REG[3] = BOX_NativeString("extern const int SFT_");
       REGB0 = TAG_Int(21);
-      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-      once_value_3 = fra.me.REG[4];
+      fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+      once_value_3 = fra.me.REG[3];
       register_static_object(&once_value_3);
-    } else fra.me.REG[4] = once_value_3;
-    array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-    fra.me.REG[4] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-    array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+    } else fra.me.REG[3] = once_value_3;
+    fra.me.REG[3] = fra.me.REG[3];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    fra.me.REG[3] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
     if (!once_value_4) {
-      fra.me.REG[4] = BOX_NativeString("[];");
+      fra.me.REG[3] = BOX_NativeString("[];");
       REGB0 = TAG_Int(3);
-      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-      once_value_4 = fra.me.REG[4];
+      fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+      once_value_4 = fra.me.REG[3];
       register_static_object(&once_value_4);
-    } else fra.me.REG[4] = once_value_4;
-    array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-    fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-    array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+    } else fra.me.REG[3] = once_value_4;
+    fra.me.REG[3] = fra.me.REG[3];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
     CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./compiling//compiling_global.nit:86 */
   REGB0 = TAG_Int(0);
+  /* ./compiling//compiling_global.nit:87 */
   fra.me.REG[2] = CALL_table_computation___MMModule___local_table(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:96 */
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB1 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[3] = ATTR_array___Array____items(fra.me.REG[2]);
+  /* ./../lib/standard//collection//array.nit:237 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB1)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___tc(fra.me.REG[1])(fra.me.REG[1]);
-      REGB1 = CALL_compiling_base___ToolContext___global(fra.me.REG[4])(fra.me.REG[4]);
-      /* ./compiling//compiling_global.nit:98 */
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Int(3);
-        fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB1);
-        /* ./compiling//compiling_global.nit:99 */
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+      if (UNTAG_Bool(REGB2)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
+      /* ./compiling//compiling_global.nit:89 */
+      fra.me.REG[5] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+      fra.me.REG[5] = CALL_program___Program___tc(fra.me.REG[5])(fra.me.REG[5]);
+      REGB2 = CALL_program___ToolContext___use_SFT_optimization(fra.me.REG[5])(fra.me.REG[5]);
+      if (UNTAG_Bool(REGB2)) {
+        /* ./compiling//compiling_global.nit:90 */
+        REGB2 = TAG_Int(3);
+        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
         if (!once_value_5) {
-          fra.me.REG[5] = BOX_NativeString("");
-          REGB1 = TAG_Int(0);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-          once_value_5 = fra.me.REG[5];
+          fra.me.REG[6] = BOX_NativeString("");
+          REGB2 = TAG_Int(0);
+          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+          once_value_5 = fra.me.REG[6];
           register_static_object(&once_value_5);
-        } else fra.me.REG[5] = once_value_5;
-        array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-        fra.me.REG[5] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
-        fra.me.REG[5] = CALL_compiling_global___ModuleTableElt___value(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-        array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+        } else fra.me.REG[6] = once_value_5;
+        fra.me.REG[6] = fra.me.REG[6];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+        fra.me.REG[6] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+        fra.me.REG[6] = CALL_compiling_global___ModuleTableElt___value(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
         if (!once_value_6) {
-          fra.me.REG[5] = BOX_NativeString("");
-          REGB1 = TAG_Int(0);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-          once_value_6 = fra.me.REG[5];
+          fra.me.REG[6] = BOX_NativeString("");
+          REGB2 = TAG_Int(0);
+          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+          once_value_6 = fra.me.REG[6];
           register_static_object(&once_value_6);
-        } else fra.me.REG[5] = once_value_6;
-        array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-        fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+        } else fra.me.REG[6] = once_value_6;
+        fra.me.REG[6] = fra.me.REG[6];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
       } else {
-        REGB1 = TAG_Int(5);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB1);
-        /* ./compiling//compiling_global.nit:101 */
+        /* ./compiling//compiling_global.nit:92 */
+        REGB2 = TAG_Int(5);
+        fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
         if (!once_value_7) {
-          fra.me.REG[6] = BOX_NativeString("SFT_");
-          REGB1 = TAG_Int(4);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB1);
-          once_value_7 = fra.me.REG[6];
+          fra.me.REG[7] = BOX_NativeString("SFT_");
+          REGB2 = TAG_Int(4);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_7 = fra.me.REG[7];
           register_static_object(&once_value_7);
-        } else fra.me.REG[6] = once_value_7;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        fra.me.REG[6] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
+        } else fra.me.REG[7] = once_value_7;
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+        fra.me.REG[7] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
+        fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
         if (!once_value_8) {
-          fra.me.REG[6] = BOX_NativeString("[");
-          REGB1 = TAG_Int(1);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB1);
-          once_value_8 = fra.me.REG[6];
+          fra.me.REG[7] = BOX_NativeString("[");
+          REGB2 = TAG_Int(1);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_8 = fra.me.REG[7];
           register_static_object(&once_value_8);
-        } else fra.me.REG[6] = once_value_8;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        fra.me.REG[6] = CALL_string___Object___to_s(REGB0)(REGB0);
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
+        } else fra.me.REG[7] = once_value_8;
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+        fra.me.REG[7] = CALL_string___Object___to_s(REGB0)(REGB0);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
         if (!once_value_9) {
-          fra.me.REG[6] = BOX_NativeString("]");
-          REGB1 = TAG_Int(1);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB1);
-          once_value_9 = fra.me.REG[6];
+          fra.me.REG[7] = BOX_NativeString("]");
+          REGB2 = TAG_Int(1);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_9 = fra.me.REG[7];
           register_static_object(&once_value_9);
-        } else fra.me.REG[6] = once_value_9;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        fra.me.REG[4] = fra.me.REG[5];
-        REGB1 = TAG_Int(1);
-        REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-        REGB0 = REGB1;
-      /* ./compiling//compiling_global.nit:102 */
+        } else fra.me.REG[7] = once_value_9;
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+        fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
+        fra.me.REG[5] = fra.me.REG[6];
+        /* ./compiling//compiling_global.nit:93 */
+        REGB2 = TAG_Int(1);
+        /* ./../lib/standard//kernel.nit:215 */
+        REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+        /* ./compiling//compiling_global.nit:93 */
+        REGB0 = REGB2;
       }
-      /* ./compiling//compiling_global.nit:104 */
-      CALL_compiling_global___AbsTableElt___compile_macros(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1], fra.me.REG[4]);
+      /* ./compiling//compiling_global.nit:95 */
+      CALL_compiling_global___AbsTableElt___compile_macros(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1], fra.me.REG[5]);
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB1 = REGB2;
     } else {
-      /* ./compiling//compiling_global.nit:96 */
+      /* ./../lib/standard//collection//array.nit:237 */
       goto label10;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
   }
   label10: while(0);
+  /* ./compiling//compiling_global.nit:97 */
   fra.me.REG[0] = CALL_abstractmetamodel___MMModule___local_classes(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:106 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_compiling_global___MMModule___compile_mod_to_c_11));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_compiling_global___MMModule___compile_mod_to_c_11(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_compiling_global;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_compiling_global___MMModule___compile_mod_to_c;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    closctx->REG[0] = fra.me.REG[0];
+    /* ./compiling//compiling_global.nit:98 */
+    REGB0 = TAG_Bool(VAL_ISA(closctx->REG[0], COLOR_MMConcreteClass, ID_MMConcreteClass)) /*cast MMConcreteClass*/;
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_MMConcreteClass, ID_MMConcreteClass)) /*cast MMConcreteClass*/;
-      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-      /* ./compiling//compiling_global.nit:107 */
+      goto label12;
+    }
+    /* ./compiling//compiling_global.nit:99 */
+    fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___global_properties(closctx->REG[0])(closctx->REG[0]);
+    CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], closctx, ((fun_t)OC_compiling_global___MMModule___compile_mod_to_c_13));
+    label12: while(0);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+    void OC_compiling_global___MMModule___compile_mod_to_c_13(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+      struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+      val_t REGB0;
+      val_t REGB1;
+      val_t REGB2;
+      val_t REGB3;
+      fun_t CREG[1];
+      val_t tmp;
+            static val_t once_value_14; /* Once value */
+            static val_t once_value_15; /* Once value */
+        static val_t once_value_17; /* Once value */
+        static val_t once_value_18; /* Once value */
+        static val_t once_value_19; /* Once value */
+        static val_t once_value_20; /* Once value */
+        static val_t once_value_21; /* Once value */
+      fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+      fra.me.file = LOCATE_compiling_global;
+      fra.me.line = 0;
+      fra.me.meth = LOCATE_compiling_global___MMModule___compile_mod_to_c;
+      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.closure_ctx = closctx_param;
+      fra.me.closure_funs = CREG;
+      fra.me.REG[0] = p0;
+      CREG[0] = clos_fun0;
+      /* ./compiling//compiling_global.nit:100 */
+      fra.me.REG[1] = CALL_abstractmetamodel___MMLocalClass_____bra(closctx->REG[0])(closctx->REG[0], fra.me.REG[0]);
+      /* ./compiling//compiling_global.nit:101 */
+      fra.me.REG[2] = CALL_abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[1])(fra.me.REG[1]);
+      REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[2],closctx->REG[0]));
       if (UNTAG_Bool(REGB0)) {
-        goto label11;
+      } else {
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], closctx->REG[0]);
+        REGB0 = REGB1;
       }
-      fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[2])(fra.me.REG[2]);
-      fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[4])(fra.me.REG[4]);
-      /* ./compiling//compiling_global.nit:108 */
-      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]);
-          fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-          fra.me.REG[6] = CALL_abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[5])(fra.me.REG[5]);
-          REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[6],fra.me.REG[2]));
-          /* ./compiling//compiling_global.nit:110 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[2]);
-            REGB0 = REGB1;
-          }
-          if (UNTAG_Bool(REGB0)) {
-            REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[5], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
-          } else {
-            REGB1 = TAG_Bool(false);
-            REGB0 = REGB1;
-          }
-          if (UNTAG_Bool(REGB0)) {
-            /* ./compiling//compiling_global.nit:111 */
-            CALL_compiling_global___MMMethod___compile_property_to_c(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
-          }
-          REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-          /* ./compiling//compiling_global.nit:113 */
-          if (UNTAG_Bool(REGB0)) {
-            fra.me.REG[3] = NEW_Array_array___Array___init();
-            REGB0 = TAG_Int(0);
-            fra.me.REG[6] = CALL_static_type___MMLocalProperty___signature(fra.me.REG[5])(fra.me.REG[5]);
-            REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-            /* ./compiling//compiling_global.nit:116 */
-            if (UNTAG_Bool(REGB1)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 116);
-              nit_exit(1);
-            }
-            REGB1 = CALL_static_type___MMSignature___arity(fra.me.REG[6])(fra.me.REG[6]);
-            fra.me.REG[6] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-            fra.me.REG[6] = CALL_abstract_collection___Collection___iterator(fra.me.REG[6])(fra.me.REG[6]);
-            while(1) {
-              REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[6])(fra.me.REG[6]);
-              if (UNTAG_Bool(REGB1)) {
-               REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[6])(fra.me.REG[6]);
-               REGB0 = TAG_Int(3);
-               fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB0);
-               /* ./compiling//compiling_global.nit:117 */
-               if (!once_value_12) {
-               fra.me.REG[8] = BOX_NativeString("val_t p");
-               REGB0 = TAG_Int(7);
-               fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
-               once_value_12 = fra.me.REG[8];
-               register_static_object(&once_value_12);
-               } else fra.me.REG[8] = once_value_12;
-               array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-               fra.me.REG[8] = CALL_string___Object___to_s(REGB1)(REGB1);
-               array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-               if (!once_value_13) {
-               fra.me.REG[8] = BOX_NativeString("");
-               REGB1 = TAG_Int(0);
-               fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB1);
-               once_value_13 = fra.me.REG[8];
-               register_static_object(&once_value_13);
-               } else fra.me.REG[8] = once_value_13;
-               array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-               fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-               array___Array___add(fra.me.REG[3], fra.me.REG[7]);
-              } else {
-               /* ./compiling//compiling_global.nit:116 */
-               goto label14;
-              }
-              CALL_abstract_collection___Iterator___next(fra.me.REG[6])(fra.me.REG[6]);
-            }
-            label14: while(0);
-            REGB1 = TAG_Int(0);
-            fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB1);
-            REGB1 = TAG_Int(7);
-            fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB1);
-            /* ./compiling//compiling_global.nit:119 */
+      if (UNTAG_Bool(REGB0)) {
+        REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
+      } else {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      }
+      if (UNTAG_Bool(REGB0)) {
+        /* ./compiling//compiling_global.nit:102 */
+        CALL_compiling_global___MMMethod___compile_property_to_c(fra.me.REG[1])(fra.me.REG[1], closctx->REG[1]);
+      }
+      /* ./compiling//compiling_global.nit:104 */
+      REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+      if (UNTAG_Bool(REGB0)) {
+        /* ./compiling//compiling_global.nit:106 */
+        fra.me.REG[0] = NEW_Array_array___Array___init();
+        /* ./compiling//compiling_global.nit:107 */
+        REGB0 = TAG_Int(0);
+        fra.me.REG[2] = CALL_static_type___MMLocalProperty___signature(fra.me.REG[1])(fra.me.REG[1]);
+        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+          nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 107);
+        }
+        REGB1 = CALL_static_type___MMSignature___arity(fra.me.REG[2])(fra.me.REG[2]);
+        /* ./../lib/standard//kernel.nit:332 */
+        while(1) {
+          /* ./../lib/standard//kernel.nit:212 */
+          REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+          /* ./../lib/standard//kernel.nit:332 */
+          if (UNTAG_Bool(REGB2)) {
+            /* ./compiling//compiling_global.nit:107 */
+            REGB2 = REGB0;
+            /* ./compiling//compiling_global.nit:108 */
+            REGB3 = TAG_Int(3);
+            fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB3);
+            if (!once_value_14) {
+              fra.me.REG[3] = BOX_NativeString("val_t p");
+              REGB3 = TAG_Int(7);
+              fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB3);
+              once_value_14 = fra.me.REG[3];
+              register_static_object(&once_value_14);
+            } else fra.me.REG[3] = once_value_14;
+            fra.me.REG[3] = fra.me.REG[3];
+            CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+            fra.me.REG[3] = CALL_string___Object___to_s(REGB2)(REGB2);
+            CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
             if (!once_value_15) {
-              fra.me.REG[8] = BOX_NativeString("val_t NEW_");
-              REGB1 = TAG_Int(10);
-              fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB1);
-              once_value_15 = fra.me.REG[8];
+              fra.me.REG[3] = BOX_NativeString("");
+              REGB2 = TAG_Int(0);
+              fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+              once_value_15 = fra.me.REG[3];
               register_static_object(&once_value_15);
-            } else fra.me.REG[8] = once_value_15;
-            array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-            fra.me.REG[8] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-            array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-            if (!once_value_16) {
-              fra.me.REG[8] = BOX_NativeString("_");
-              REGB1 = TAG_Int(1);
-              fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB1);
-              once_value_16 = fra.me.REG[8];
-              register_static_object(&once_value_16);
-            } else fra.me.REG[8] = once_value_16;
-            array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-            fra.me.REG[5] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[5])(fra.me.REG[5]);
-            fra.me.REG[5] = CALL_abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[5])(fra.me.REG[5]);
-            fra.me.REG[5] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[5])(fra.me.REG[5]);
-            array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-            if (!once_value_17) {
-              fra.me.REG[5] = BOX_NativeString("(");
-              REGB1 = TAG_Int(1);
-              fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-              once_value_17 = fra.me.REG[5];
-              register_static_object(&once_value_17);
-            } else fra.me.REG[5] = once_value_17;
-            array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-            if (!once_value_18) {
-              fra.me.REG[5] = BOX_NativeString(", ");
-              REGB1 = TAG_Int(2);
-              fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-              once_value_18 = fra.me.REG[5];
-              register_static_object(&once_value_18);
-            } else fra.me.REG[5] = once_value_18;
-            fra.me.REG[5] = CALL_string___Collection___join(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
-            array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-            if (!once_value_19) {
-              fra.me.REG[5] = BOX_NativeString(");");
-              REGB1 = TAG_Int(2);
-              fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-              once_value_19 = fra.me.REG[5];
-              register_static_object(&once_value_19);
-            } else fra.me.REG[5] = once_value_19;
-            array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-            fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-            array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-            CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+            } else fra.me.REG[3] = once_value_15;
+            fra.me.REG[3] = fra.me.REG[3];
+            CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+            fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
+            CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
+            /* ./../lib/standard//kernel.nit:334 */
+            REGB2 = TAG_Int(1);
+            /* ./../lib/standard//kernel.nit:215 */
+            REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+            /* ./../lib/standard//kernel.nit:334 */
+            REGB0 = REGB2;
+          } else {
+            /* ./../lib/standard//kernel.nit:332 */
+            goto label16;
           }
-        } else {
-          /* ./compiling//compiling_global.nit:108 */
-          goto label20;
         }
-        CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
+        label16: while(0);
+        /* ./compiling//compiling_global.nit:110 */
+        REGB0 = TAG_Int(7);
+        fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+        if (!once_value_17) {
+          fra.me.REG[3] = BOX_NativeString("val_t NEW_");
+          REGB0 = TAG_Int(10);
+          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+          once_value_17 = fra.me.REG[3];
+          register_static_object(&once_value_17);
+        } else fra.me.REG[3] = once_value_17;
+        fra.me.REG[3] = fra.me.REG[3];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+        fra.me.REG[3] = CALL_string___Object___to_s(closctx->REG[0])(closctx->REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+        if (!once_value_18) {
+          fra.me.REG[3] = BOX_NativeString("_");
+          REGB0 = TAG_Int(1);
+          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+          once_value_18 = fra.me.REG[3];
+          register_static_object(&once_value_18);
+        } else fra.me.REG[3] = once_value_18;
+        fra.me.REG[3] = fra.me.REG[3];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+        fra.me.REG[1] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[1])(fra.me.REG[1]);
+        fra.me.REG[1] = CALL_abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[1])(fra.me.REG[1]);
+        fra.me.REG[1] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[1])(fra.me.REG[1]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+        if (!once_value_19) {
+          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_19 = fra.me.REG[1];
+          register_static_object(&once_value_19);
+        } else fra.me.REG[1] = once_value_19;
+        fra.me.REG[1] = fra.me.REG[1];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+        if (!once_value_20) {
+          fra.me.REG[1] = BOX_NativeString(", ");
+          REGB0 = TAG_Int(2);
+          fra.me.REG[1] = NEW_String_string___String___with_native(fra.me.REG[1], REGB0);
+          once_value_20 = fra.me.REG[1];
+          register_static_object(&once_value_20);
+        } else fra.me.REG[1] = once_value_20;
+        fra.me.REG[1] = fra.me.REG[1];
+        fra.me.REG[1] = CALL_string___Collection___join(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+        if (!once_value_21) {
+          fra.me.REG[1] = BOX_NativeString(");");
+          REGB0 = TAG_Int(2);
+          fra.me.REG[1] = NEW_String_string___String___with_native(fra.me.REG[1], REGB0);
+          once_value_21 = fra.me.REG[1];
+          register_static_object(&once_value_21);
+        } else fra.me.REG[1] = once_value_21;
+        fra.me.REG[1] = fra.me.REG[1];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+        fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
+        CALL_compiling_base___CompilerVisitor___add_decl(closctx->REG[1])(closctx->REG[1], fra.me.REG[2]);
       }
-      label20: while(0);
-      label11: while(0);
-    } else {
-      /* ./compiling//compiling_global.nit:106 */
-      goto label21;
+      stack_frame_head = fra.me.prev;
+      return;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label21: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void compiling_global___MMModule___compile_local_table_to_c(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
@@ -812,7 +882,7 @@ void compiling_global___MMModule___compile_local_table_to_c(val_t p0, val_t p1){
   static val_t once_value_10; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 125;
+  fra.me.line = 116;
   fra.me.meth = LOCATE_compiling_global___MMModule___compile_local_table_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -823,47 +893,48 @@ void compiling_global___MMModule___compile_local_table_to_c(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:119 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:128 */
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[4] = BOX_NativeString("const char *LOCATE_");
+    fra.me.REG[3] = BOX_NativeString("const char *LOCATE_");
     REGB0 = TAG_Int(19);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_1 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_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[4] = once_value_1;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  } else fra.me.REG[3] = once_value_1;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_2) {
-    fra.me.REG[4] = BOX_NativeString(" = \"");
+    fra.me.REG[3] = BOX_NativeString(" = \"");
     REGB0 = TAG_Int(4);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_2 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_2 = fra.me.REG[3];
     register_static_object(&once_value_2);
-  } else fra.me.REG[4] = once_value_2;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_abstractmetamodel___MMModule___location(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  } else fra.me.REG[3] = once_value_2;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = CALL_abstractmetamodel___MMModule___location(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[3] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_3) {
-    fra.me.REG[4] = BOX_NativeString("\";");
+    fra.me.REG[3] = BOX_NativeString("\";");
     REGB0 = TAG_Int(2);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_3 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_3 = fra.me.REG[3];
     register_static_object(&once_value_3);
-  } else fra.me.REG[4] = once_value_3;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[3] = once_value_3;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___tc(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = CALL_compiling_base___ToolContext___global(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:130 */
+  /* ./compiling//compiling_global.nit:121 */
+  fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = CALL_program___Program___tc(fra.me.REG[2])(fra.me.REG[2]);
+  REGB0 = CALL_program___ToolContext___use_SFT_optimization(fra.me.REG[2])(fra.me.REG[2]);
   if (UNTAG_Bool(REGB0)) {
     REGB0 = TAG_Bool(true);
   } else {
@@ -872,102 +943,127 @@ void compiling_global___MMModule___compile_local_table_to_c(val_t p0, val_t p1){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./compiling//compiling_global.nit:131 */
+    /* ./compiling//compiling_global.nit:122 */
     goto label4;
   }
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:125 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:134 */
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_5) {
-    fra.me.REG[4] = BOX_NativeString("const int SFT_");
+    fra.me.REG[3] = BOX_NativeString("const int SFT_");
     REGB0 = TAG_Int(14);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_5 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_5 = fra.me.REG[3];
     register_static_object(&once_value_5);
-  } else fra.me.REG[4] = once_value_5;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  } else fra.me.REG[3] = once_value_5;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = CALL_abstractmetamodel___MMModule___name(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_6) {
-    fra.me.REG[4] = BOX_NativeString("[");
+    fra.me.REG[3] = BOX_NativeString("[");
     REGB0 = TAG_Int(1);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_6 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_6 = fra.me.REG[3];
     register_static_object(&once_value_6);
-  } else fra.me.REG[4] = once_value_6;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_table_computation___MMModule___local_table(fra.me.REG[0])(fra.me.REG[0]);
-  REGB0 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+  } else fra.me.REG[3] = once_value_6;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = CALL_table_computation___MMModule___local_table(fra.me.REG[0])(fra.me.REG[0]);
   /* ./../lib/standard//collection//array.nit:23 */
+  REGB0 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_length");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
   }
-  REGB0 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-  fra.me.REG[4] = CALL_string___Object___to_s(REGB0)(REGB0);
-  /* ./compiling//compiling_global.nit:134 */
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  REGB0 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+  /* ./compiling//compiling_global.nit:125 */
+  fra.me.REG[3] = CALL_string___Object___to_s(REGB0)(REGB0);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_7) {
-    fra.me.REG[4] = BOX_NativeString("] = {");
+    fra.me.REG[3] = BOX_NativeString("] = {");
     REGB0 = TAG_Int(5);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_7 = fra.me.REG[4];
+    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+    once_value_7 = fra.me.REG[3];
     register_static_object(&once_value_7);
-  } else fra.me.REG[4] = once_value_7;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[3] = once_value_7;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:135 */
+  /* ./compiling//compiling_global.nit:126 */
   CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:127 */
   fra.me.REG[0] = CALL_table_computation___MMModule___local_table(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:136 */
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB0 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[2] = ATTR_array___Array____items(fra.me.REG[0]);
+  /* ./../lib/standard//collection//array.nit:237 */
   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]);
-      REGB0 = TAG_Int(0);
-      fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-      fra.me.REG[4] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
-      fra.me.REG[4] = CALL_compiling_global___ModuleTableElt___value(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[4]);
-      /* ./compiling//compiling_global.nit:137 */
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB1)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB0)];
+      /* ./compiling//compiling_global.nit:128 */
+      fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+      fra.me.REG[4] = CALL_compiling_global___ModuleTableElt___value(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
       if (!once_value_8) {
-        fra.me.REG[2] = BOX_NativeString(",");
-        REGB0 = TAG_Int(1);
-        fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
-        once_value_8 = fra.me.REG[2];
+        fra.me.REG[3] = BOX_NativeString(",");
+        REGB1 = TAG_Int(1);
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB1);
+        once_value_8 = fra.me.REG[3];
         register_static_object(&once_value_8);
-      } else fra.me.REG[2] = once_value_8;
-      fra.me.REG[2] = CALL_string___String_____plus(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
-      array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+      } else fra.me.REG[3] = once_value_8;
+      fra.me.REG[3] = fra.me.REG[3];
+      fra.me.REG[3] = CALL_string___String_____plus(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
       CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB1 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB0 = REGB1;
     } else {
-      /* ./compiling//compiling_global.nit:136 */
+      /* ./../lib/standard//collection//array.nit:237 */
       goto label9;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
   }
   label9: while(0);
-  /* ./compiling//compiling_global.nit:139 */
+  /* ./compiling//compiling_global.nit:130 */
   CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:140 */
+  /* ./compiling//compiling_global.nit:131 */
   if (!once_value_10) {
-    fra.me.REG[3] = BOX_NativeString("};");
+    fra.me.REG[2] = BOX_NativeString("};");
     REGB0 = TAG_Int(2);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_10 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_10 = fra.me.REG[2];
     register_static_object(&once_value_10);
-  } else fra.me.REG[3] = once_value_10;
-  array___Array___add(fra.me.REG[0], fra.me.REG[3]);
-  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  } else fra.me.REG[2] = once_value_10;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   label4: while(0);
   stack_frame_head = fra.me.prev;
   return;
@@ -977,14 +1073,12 @@ void compiling_global___AbsTableElt___compile_macros(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 147;
+  fra.me.line = 138;
   fra.me.meth = LOCATE_compiling_global___AbsTableElt___compile_macros;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./compiling//compiling_global.nit:147 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 147);
-  nit_exit(1);
+  /* ./compiling//compiling_global.nit:138 */
+  nit_abort("Deferred method called", NULL, LOCATE_compiling_global, 138);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -993,14 +1087,12 @@ val_t compiling_global___TableElt___compile_to_c(val_t p0, val_t p1, val_t p2){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 152;
+  fra.me.line = 143;
   fra.me.meth = LOCATE_compiling_global___TableElt___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./compiling//compiling_global.nit:152 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 152);
-  nit_exit(1);
+  /* ./compiling//compiling_global.nit:143 */
+  nit_abort("Deferred method called", NULL, LOCATE_compiling_global, 143);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -1009,94 +1101,15 @@ val_t compiling_global___ModuleTableElt___value(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 157;
+  fra.me.line = 148;
   fra.me.meth = LOCATE_compiling_global___ModuleTableElt___value;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./compiling//compiling_global.nit:157 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 157);
-  nit_exit(1);
+  /* ./compiling//compiling_global.nit:148 */
+  nit_abort("Deferred method called", NULL, LOCATE_compiling_global, 148);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-void compiling_global___ModuleTableEltGroup___compile_macros(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  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_compiling_global;
-  fra.me.line = 163;
-  fra.me.meth = LOCATE_compiling_global___ModuleTableEltGroup___compile_macros;
-  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;
-  REGB0 = TAG_Int(0);
-  fra.me.REG[0] = CALL_table_computation___ModuleTableEltGroup___elements(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:166 */
-  while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB1)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      REGB1 = TAG_Int(5);
-      fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB1);
-      /* ./compiling//compiling_global.nit:167 */
-      if (!once_value_1) {
-        fra.me.REG[5] = BOX_NativeString("");
-        REGB1 = TAG_Int(0);
-        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-        once_value_1 = fra.me.REG[5];
-        register_static_object(&once_value_1);
-      } else fra.me.REG[5] = once_value_1;
-      array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-      array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-      if (!once_value_2) {
-        fra.me.REG[5] = BOX_NativeString(" + ");
-        REGB1 = TAG_Int(3);
-        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-        once_value_2 = fra.me.REG[5];
-        register_static_object(&once_value_2);
-      } else fra.me.REG[5] = once_value_2;
-      array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-      fra.me.REG[5] = CALL_string___Object___to_s(REGB0)(REGB0);
-      array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-      if (!once_value_3) {
-        fra.me.REG[5] = BOX_NativeString("");
-        REGB1 = TAG_Int(0);
-        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB1);
-        once_value_3 = fra.me.REG[5];
-        register_static_object(&once_value_3);
-      } else fra.me.REG[5] = once_value_3;
-      array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-      fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-      CALL_compiling_global___AbsTableElt___compile_macros(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1], fra.me.REG[4]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./compiling//compiling_global.nit:168 */
-    } else {
-      /* ./compiling//compiling_global.nit:166 */
-      goto label4;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label4: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 val_t compiling_global___ModuleTableEltGroup___value(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
@@ -1105,7 +1118,7 @@ val_t compiling_global___ModuleTableEltGroup___value(val_t p0, val_t p1){
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 162;
+  fra.me.line = 153;
   fra.me.meth = LOCATE_compiling_global___ModuleTableEltGroup___value;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1115,9 +1128,9 @@ val_t compiling_global___ModuleTableEltGroup___value(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./compiling//compiling_global.nit:153 */
   REGB0 = TAG_Int(3);
   fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:162 */
   if (!once_value_1) {
     fra.me.REG[3] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
@@ -1125,13 +1138,14 @@ val_t compiling_global___ModuleTableEltGroup___value(val_t p0, val_t p1){
     once_value_1 = fra.me.REG[3];
     register_static_object(&once_value_1);
   } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[0] = CALL_table_computation___ModuleTableEltGroup___elements(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstract_collection___Collection___first(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   if (!once_value_2) {
     fra.me.REG[0] = BOX_NativeString(" /* Group of ? */");
     REGB0 = TAG_Int(17);
@@ -1139,64 +1153,181 @@ val_t compiling_global___ModuleTableEltGroup___value(val_t p0, val_t p1){
     once_value_2 = fra.me.REG[0];
     register_static_object(&once_value_2);
   } else fra.me.REG[0] = once_value_2;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   goto label3;
   label3: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-void compiling_global___TableEltMeth___compile_macros(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void compiling_global___ModuleTableEltGroup___compile_macros(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
   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 */
+      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_compiling_global;
-  fra.me.line = 174;
-  fra.me.meth = LOCATE_compiling_global___TableEltMeth___compile_macros;
+  fra.me.line = 154;
+  fra.me.meth = LOCATE_compiling_global___ModuleTableEltGroup___compile_macros;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[0] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:156 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:157 */
+  fra.me.REG[0] = CALL_table_computation___ModuleTableEltGroup___elements(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB1 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[3] = ATTR_array___Array____items(fra.me.REG[0]);
+  /* ./../lib/standard//collection//array.nit:237 */
+  while(1) {
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[0]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+      if (UNTAG_Bool(REGB2)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB1)];
+      /* ./compiling//compiling_global.nit:158 */
+      REGB2 = TAG_Int(5);
+      fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
+      if (!once_value_1) {
+        fra.me.REG[6] = BOX_NativeString("");
+        REGB2 = TAG_Int(0);
+        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+        once_value_1 = fra.me.REG[6];
+        register_static_object(&once_value_1);
+      } else fra.me.REG[6] = once_value_1;
+      fra.me.REG[6] = fra.me.REG[6];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
+      if (!once_value_2) {
+        fra.me.REG[6] = BOX_NativeString(" + ");
+        REGB2 = TAG_Int(3);
+        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+        once_value_2 = fra.me.REG[6];
+        register_static_object(&once_value_2);
+      } else fra.me.REG[6] = once_value_2;
+      fra.me.REG[6] = fra.me.REG[6];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+      fra.me.REG[6] = CALL_string___Object___to_s(REGB0)(REGB0);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+      if (!once_value_3) {
+        fra.me.REG[6] = BOX_NativeString("");
+        REGB2 = TAG_Int(0);
+        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+        once_value_3 = fra.me.REG[6];
+        register_static_object(&once_value_3);
+      } else fra.me.REG[6] = once_value_3;
+      fra.me.REG[6] = fra.me.REG[6];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      CALL_compiling_global___AbsTableElt___compile_macros(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:159 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./compiling//compiling_global.nit:159 */
+      REGB0 = REGB2;
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB1 = REGB2;
+    } else {
+      /* ./../lib/standard//collection//array.nit:237 */
+      goto label4;
+    }
+  }
+  label4: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void compiling_global___TableEltMeth___compile_macros(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_compiling_global;
+  fra.me.line = 165;
+  fra.me.meth = LOCATE_compiling_global___TableEltMeth___compile_macros;
+  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;
+  /* ./compiling//compiling_global.nit:167 */
+  fra.me.REG[0] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:168 */
   REGB0 = TAG_Int(7);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:177 */
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[5] = BOX_NativeString("#define ");
+    fra.me.REG[4] = BOX_NativeString("#define ");
     REGB0 = TAG_Int(8);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_1 = fra.me.REG[5];
+    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[5] = once_value_1;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[5] = CALL_compiling_base___MMGlobalProperty___meth_call(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } 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]);
+  fra.me.REG[4] = CALL_compiling_base___MMGlobalProperty___meth_call(fra.me.REG[0])(fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   if (!once_value_2) {
-    fra.me.REG[5] = BOX_NativeString("(recv) ((");
+    fra.me.REG[4] = BOX_NativeString("(recv) ((");
     REGB0 = TAG_Int(9);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_2 = fra.me.REG[5];
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+    once_value_2 = fra.me.REG[4];
     register_static_object(&once_value_2);
-  } else fra.me.REG[5] = once_value_2;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } else fra.me.REG[4] = once_value_2;
+  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]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString("_t)CALL((recv), (");
     REGB0 = TAG_Int(17);
@@ -1204,8 +1335,9 @@ void compiling_global___TableEltMeth___compile_macros(val_t p0, val_t p1, val_t
     once_value_3 = fra.me.REG[0];
     register_static_object(&once_value_3);
   } else fra.me.REG[0] = once_value_3;
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  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(")))");
     REGB0 = TAG_Int(3);
@@ -1213,9 +1345,9 @@ void compiling_global___TableEltMeth___compile_macros(val_t p0, val_t p1, val_t
     once_value_4 = fra.me.REG[2];
     register_static_object(&once_value_4);
   } else fra.me.REG[2] = once_value_4;
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[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]);
   CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   return;
@@ -1225,7 +1357,7 @@ val_t compiling_global___TableEltMeth___compile_to_c(val_t p0, val_t p1, val_t p
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 180;
+  fra.me.line = 171;
   fra.me.meth = LOCATE_compiling_global___TableEltMeth___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1235,18 +1367,19 @@ val_t compiling_global___TableEltMeth___compile_to_c(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./compiling//compiling_global.nit:173 */
   fra.me.REG[0] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:174 */
   fra.me.REG[0] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:183 */
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
 void compiling_global___TableEltSuper___compile_macros(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  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 */
@@ -1255,45 +1388,45 @@ void compiling_global___TableEltSuper___compile_macros(val_t p0, val_t p1, val_t
   static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 188;
+  fra.me.line = 179;
   fra.me.meth = LOCATE_compiling_global___TableEltSuper___compile_macros;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./compiling//compiling_global.nit:181 */
   fra.me.REG[0] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:182 */
   REGB0 = TAG_Int(7);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:191 */
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[5] = BOX_NativeString("#define ");
+    fra.me.REG[4] = BOX_NativeString("#define ");
     REGB0 = TAG_Int(8);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_1 = fra.me.REG[5];
+    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[5] = once_value_1;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[5] = CALL_compiling_base___MMLocalProperty___super_meth_call(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } 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]);
+  fra.me.REG[4] = CALL_compiling_base___MMLocalProperty___super_meth_call(fra.me.REG[0])(fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   if (!once_value_2) {
-    fra.me.REG[5] = BOX_NativeString("(recv) ((");
+    fra.me.REG[4] = BOX_NativeString("(recv) ((");
     REGB0 = TAG_Int(9);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_2 = fra.me.REG[5];
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+    once_value_2 = fra.me.REG[4];
     register_static_object(&once_value_2);
-  } else fra.me.REG[5] = once_value_2;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } else fra.me.REG[4] = once_value_2;
+  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]);
   fra.me.REG[0] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString("_t)CALL((recv), (");
     REGB0 = TAG_Int(17);
@@ -1301,8 +1434,9 @@ void compiling_global___TableEltSuper___compile_macros(val_t p0, val_t p1, val_t
     once_value_3 = fra.me.REG[0];
     register_static_object(&once_value_3);
   } else fra.me.REG[0] = once_value_3;
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  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(")))");
     REGB0 = TAG_Int(3);
@@ -1310,95 +1444,129 @@ void compiling_global___TableEltSuper___compile_macros(val_t p0, val_t p1, val_t
     once_value_4 = fra.me.REG[2];
     register_static_object(&once_value_4);
   } else fra.me.REG[2] = once_value_4;
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[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]);
   CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   return;
 }
 val_t compiling_global___TableEltSuper___compile_to_c(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 194;
+  fra.me.line = 185;
   fra.me.meth = LOCATE_compiling_global___TableEltSuper___compile_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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;
+  /* ./compiling//compiling_global.nit:187 */
   fra.me.REG[1] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[1] = CALL_abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:188 */
   fra.me.REG[0] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:189 */
   fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___che(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_partial_order___PartialOrderElement___linear_extension(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./compiling//compiling_global.nit:190 */
   REGB0 = TAG_Bool(false);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./compiling//compiling_global.nit:200 */
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB1 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[3]);
+  /* ./../lib/standard//collection//array.nit:237 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[4],fra.me.REG[1]));
-      /* ./compiling//compiling_global.nit:202 */
-      if (UNTAG_Bool(REGB1)) {
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+      if (UNTAG_Bool(REGB2)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
+      /* ./compiling//compiling_global.nit:193 */
+      REGB2 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[5],fra.me.REG[1]));
+      if (UNTAG_Bool(REGB2)) {
       } else {
-        REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-        REGB1 = REGB2;
+        REGB3 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
+        REGB2 = REGB3;
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(true);
-        REGB0 = REGB1;
-      /* ./compiling//compiling_global.nit:203 */
+      if (UNTAG_Bool(REGB2)) {
+        /* ./compiling//compiling_global.nit:194 */
+        REGB2 = TAG_Bool(true);
+        REGB0 = REGB2;
       } else {
-        /* ./compiling//compiling_global.nit:204 */
+        /* ./compiling//compiling_global.nit:195 */
         if (UNTAG_Bool(REGB0)) {
-          fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___che(fra.me.REG[2])(fra.me.REG[2]);
-          REGB1 = CALL_partial_order___PartialOrderElement_____l(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+          fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___che(fra.me.REG[2])(fra.me.REG[2]);
+          REGB2 = CALL_partial_order___PartialOrderElement_____l(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
         } else {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+          REGB3 = TAG_Bool(false);
+          REGB2 = REGB3;
         }
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = CALL_abstractmetamodel___MMLocalClass___has_global_property(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-          /* ./compiling//compiling_global.nit:205 */
-          if (UNTAG_Bool(REGB1)) {
-            fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-            fra.me.REG[4] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[4])(fra.me.REG[4]);
-            /* ./compiling//compiling_global.nit:207 */
+        if (UNTAG_Bool(REGB2)) {
+          /* ./compiling//compiling_global.nit:196 */
+          REGB2 = CALL_abstractmetamodel___MMLocalClass___has_global_property(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+          if (UNTAG_Bool(REGB2)) {
+            /* ./compiling//compiling_global.nit:198 */
+            fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+            fra.me.REG[5] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[5])(fra.me.REG[5]);
             goto label1;
           }
         }
       }
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB1 = REGB2;
     } else {
-      /* ./compiling//compiling_global.nit:200 */
+      /* ./../lib/standard//collection//array.nit:237 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  /* ./compiling//compiling_global.nit:211 */
-  fprintf(stderr, "Aborted");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 211);
-  nit_exit(1);
+  /* ./compiling//compiling_global.nit:202 */
+  nit_abort("Aborted", NULL, LOCATE_compiling_global, 202);
   label1: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[4];
+  return fra.me.REG[5];
 }
 void compiling_global___TableEltAttr___compile_macros(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  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 */
@@ -1406,36 +1574,35 @@ void compiling_global___TableEltAttr___compile_macros(val_t p0, val_t p1, val_t
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 216;
+  fra.me.line = 207;
   fra.me.meth = LOCATE_compiling_global___TableEltAttr___compile_macros;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./compiling//compiling_global.nit:209 */
   fra.me.REG[0] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:210 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:219 */
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[5] = BOX_NativeString("#define ");
+    fra.me.REG[4] = BOX_NativeString("#define ");
     REGB0 = TAG_Int(8);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_1 = fra.me.REG[5];
+    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[5] = once_value_1;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } 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]);
   fra.me.REG[0] = CALL_compiling_base___MMGlobalProperty___attr_access(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_2) {
     fra.me.REG[0] = BOX_NativeString("(recv) ATTR(recv, (");
     REGB0 = TAG_Int(19);
@@ -1443,8 +1610,9 @@ void compiling_global___TableEltAttr___compile_macros(val_t p0, val_t p1, val_t
     once_value_2 = fra.me.REG[0];
     register_static_object(&once_value_2);
   } else fra.me.REG[0] = once_value_2;
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   if (!once_value_3) {
     fra.me.REG[2] = BOX_NativeString("))");
     REGB0 = TAG_Int(2);
@@ -1452,9 +1620,9 @@ void compiling_global___TableEltAttr___compile_macros(val_t p0, val_t p1, val_t
     once_value_3 = fra.me.REG[2];
     register_static_object(&once_value_3);
   } else fra.me.REG[2] = once_value_3;
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[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]);
   CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   return;
@@ -1469,7 +1637,7 @@ val_t compiling_global___TableEltAttr___compile_to_c(val_t p0, val_t p1, val_t p
   static val_t once_value_4; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 222;
+  fra.me.line = 213;
   fra.me.meth = LOCATE_compiling_global___TableEltAttr___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -1482,13 +1650,15 @@ val_t compiling_global___TableEltAttr___compile_to_c(val_t p0, val_t p1, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:215 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:216 */
   fra.me.REG[3] = CALL_table_computation___TableEltProp___property(fra.me.REG[0])(fra.me.REG[0]);
   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[2])(fra.me.REG[2], fra.me.REG[3]);
+  /* ./compiling//compiling_global.nit:217 */
   REGB0 = TAG_Int(7);
   fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:226 */
   if (!once_value_1) {
     fra.me.REG[5] = BOX_NativeString("/* ");
     REGB0 = TAG_Int(3);
@@ -1496,11 +1666,12 @@ val_t compiling_global___TableEltAttr___compile_to_c(val_t p0, val_t p1, val_t p
     once_value_1 = fra.me.REG[5];
     register_static_object(&once_value_1);
   } else fra.me.REG[5] = once_value_1;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   if (!once_value_2) {
     fra.me.REG[0] = BOX_NativeString(": Attribute ");
     REGB0 = TAG_Int(12);
@@ -1508,9 +1679,10 @@ val_t compiling_global___TableEltAttr___compile_to_c(val_t p0, val_t p1, val_t p
     once_value_2 = fra.me.REG[0];
     register_static_object(&once_value_2);
   } else fra.me.REG[0] = once_value_2;
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
   if (!once_value_3) {
     fra.me.REG[2] = BOX_NativeString("::");
     REGB0 = TAG_Int(2);
@@ -1518,9 +1690,10 @@ val_t compiling_global___TableEltAttr___compile_to_c(val_t p0, val_t p1, val_t p
     once_value_3 = fra.me.REG[2];
     register_static_object(&once_value_3);
   } else fra.me.REG[2] = once_value_3;
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
   fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[3]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   if (!once_value_4) {
     fra.me.REG[3] = BOX_NativeString(" */");
     REGB0 = TAG_Int(3);
@@ -1528,15 +1701,30 @@ val_t compiling_global___TableEltAttr___compile_to_c(val_t p0, val_t p1, val_t p
     once_value_4 = fra.me.REG[3];
     register_static_object(&once_value_4);
   } else fra.me.REG[3] = once_value_4;
-  array___Array___add(fra.me.REG[4], fra.me.REG[3]);
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   goto label5;
   label5: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[4];
 }
+val_t compiling_global___AbsTableEltClass___symbol(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 222;
+  fra.me.meth = LOCATE_compiling_global___AbsTableEltClass___symbol;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./compiling//compiling_global.nit:222 */
+  nit_abort("Deferred method called", NULL, LOCATE_compiling_global, 222);
+  stack_frame_head = fra.me.prev;
+  return NIT_NULL;
+}
 void compiling_global___AbsTableEltClass___compile_macros(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+  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 */
@@ -1544,34 +1732,32 @@ void compiling_global___AbsTableEltClass___compile_macros(val_t p0, val_t p1, va
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 234;
+  fra.me.line = 225;
   fra.me.meth = LOCATE_compiling_global___AbsTableEltClass___compile_macros;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:227 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:236 */
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[5] = BOX_NativeString("#define ");
+    fra.me.REG[4] = BOX_NativeString("#define ");
     REGB0 = TAG_Int(8);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_1 = fra.me.REG[5];
+    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[5] = once_value_1;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } 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]);
   fra.me.REG[0] = CALL_compiling_global___AbsTableEltClass___symbol(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_2) {
     fra.me.REG[0] = BOX_NativeString(" (");
     REGB0 = TAG_Int(2);
@@ -1579,8 +1765,9 @@ void compiling_global___AbsTableEltClass___compile_macros(val_t p0, val_t p1, va
     once_value_2 = fra.me.REG[0];
     register_static_object(&once_value_2);
   } else fra.me.REG[0] = once_value_2;
-  array___Array___add(fra.me.REG[4], fra.me.REG[0]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   if (!once_value_3) {
     fra.me.REG[2] = BOX_NativeString(")");
     REGB0 = TAG_Int(1);
@@ -1588,28 +1775,32 @@ void compiling_global___AbsTableEltClass___compile_macros(val_t p0, val_t p1, va
     once_value_3 = fra.me.REG[2];
     register_static_object(&once_value_3);
   } else fra.me.REG[2] = once_value_3;
-  array___Array___add(fra.me.REG[4], fra.me.REG[2]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[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]);
   CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   stack_frame_head = fra.me.prev;
   return;
 }
-val_t compiling_global___AbsTableEltClass___symbol(val_t p0){
+val_t compiling_global___TableEltClassId___symbol(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 231;
-  fra.me.meth = LOCATE_compiling_global___AbsTableEltClass___symbol;
+  fra.me.line = 232;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassId___symbol;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  /* ./compiling//compiling_global.nit:231 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 231);
-  nit_exit(1);
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./compiling//compiling_global.nit:232 */
+  fra.me.REG[0] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_compiling_base___MMGlobalClass___id_id(fra.me.REG[0])(fra.me.REG[0]);
+  goto label1;
+  label1: while(0);
   stack_frame_head = fra.me.prev;
-  return NIT_NULL;
+  return fra.me.REG[0];
 }
 val_t compiling_global___TableEltClassId___value(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
@@ -1620,7 +1811,7 @@ val_t compiling_global___TableEltClassId___value(val_t p0, val_t p1){
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 243;
+  fra.me.line = 234;
   fra.me.meth = LOCATE_compiling_global___TableEltClassId___value;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1630,9 +1821,9 @@ val_t compiling_global___TableEltClassId___value(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./compiling//compiling_global.nit:236 */
   REGB0 = TAG_Int(5);
   fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:245 */
   if (!once_value_1) {
     fra.me.REG[3] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
@@ -1640,20 +1831,19 @@ val_t compiling_global___TableEltClassId___value(val_t p0, val_t p1){
     once_value_1 = fra.me.REG[3];
     register_static_object(&once_value_1);
   } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[1] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[3] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 245);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 236);
   }
   REGB0 = CALL_table_computation___CompiledClass___id(fra.me.REG[3])(fra.me.REG[3]);
   fra.me.REG[3] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   if (!once_value_2) {
     fra.me.REG[3] = BOX_NativeString(" /* Id of ");
     REGB0 = TAG_Int(10);
@@ -1661,10 +1851,11 @@ val_t compiling_global___TableEltClassId___value(val_t p0, val_t p1){
     once_value_2 = fra.me.REG[3];
     register_static_object(&once_value_2);
   } else fra.me.REG[3] = once_value_2;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[0] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString(" */");
     REGB0 = TAG_Int(3);
@@ -1672,28 +1863,29 @@ val_t compiling_global___TableEltClassId___value(val_t p0, val_t p1){
     once_value_3 = fra.me.REG[0];
     register_static_object(&once_value_3);
   } else fra.me.REG[0] = once_value_3;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   goto label4;
   label4: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[2];
 }
-val_t compiling_global___TableEltClassId___symbol(val_t p0){
+val_t compiling_global___TableEltClassInitTable___symbol(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
   fra.me.line = 241;
-  fra.me.meth = LOCATE_compiling_global___TableEltClassId___symbol;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassInitTable___symbol;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./compiling//compiling_global.nit:241 */
   fra.me.REG[0] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_compiling_base___MMGlobalClass___id_id(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:241 */
+  fra.me.REG[0] = CALL_compiling_base___MMGlobalClass___init_table_pos_id(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
@@ -1713,7 +1905,7 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
   static val_t once_value_7; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 252;
+  fra.me.line = 243;
   fra.me.meth = LOCATE_compiling_global___TableEltClassInitTable___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -1727,60 +1919,61 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:245 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:246 */
   fra.me.REG[3] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  /* ./compiling//compiling_global.nit:247 */
   fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___cshe(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_partial_order___PartialOrderElement___reverse_linear_extension(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./compiling//compiling_global.nit:248 */
   REGB0 = TAG_Int(0);
-  /* ./compiling//compiling_global.nit:258 */
+  /* ./compiling//compiling_global.nit:249 */
   while(1) {
+    /* ./../lib/standard//collection//array.nit:243 */
     fra.me.REG[5] = fra.me.REG[3];
     REGB1 = REGB0;
+    /* ./../lib/standard//collection//array.nit:245 */
     REGB2 = TAG_Int(0);
+    /* ./../lib/standard//kernel.nit:213 */
     REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
-    /* ./../lib/standard//collection//array.nit:233 */
+    /* ./../lib/standard//collection//array.nit:245 */
     if (UNTAG_Bool(REGB2)) {
       REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_length");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
       }
       REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
+      /* ./../lib/standard//kernel.nit:212 */
       REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
-    /* ./../lib/standard//collection//array.nit:233 */
     } else {
+      /* ./../lib/standard//collection//array.nit:245 */
       REGB3 = TAG_Bool(false);
       REGB2 = REGB3;
     }
     if (UNTAG_Bool(REGB2)) {
     } else {
-      fprintf(stderr, "Assert %s  failed", "'index'");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 233);
-      nit_exit(1);
+      nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
     }
+    /* ./../lib/standard//collection//array.nit:246 */
     fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[5]);
     REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./../lib/standard//collection//array.nit:234 */
     if (UNTAG_Bool(REGB2)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 234);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_array, 246);
     }
+    /* ./../lib/standard//collection//array.nit:654 */
     fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
-    /* ./../lib/standard//collection//array.nit:234 */
+    /* ./../lib/standard//collection//array.nit:246 */
     goto label1;
     label1: while(0);
+    /* ./compiling//compiling_global.nit:249 */
     REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./compiling//compiling_global.nit:258 */
     if (UNTAG_Bool(REGB1)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 258);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 249);
     }
     fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[5])(fra.me.REG[5]);
     fra.me.REG[6] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
@@ -1793,19 +1986,21 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
     }
     REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
     if (UNTAG_Bool(REGB1)) {
+      /* ./compiling//compiling_global.nit:250 */
       REGB1 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
       REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+      /* ./compiling//compiling_global.nit:250 */
       REGB0 = REGB1;
-    /* ./compiling//compiling_global.nit:259 */
     } else {
-      /* ./compiling//compiling_global.nit:258 */
+      /* ./compiling//compiling_global.nit:249 */
       goto label2;
     }
   }
   label2: while(0);
+  /* ./compiling//compiling_global.nit:252 */
   REGB1 = TAG_Int(9);
   fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB1);
-  /* ./compiling//compiling_global.nit:261 */
   if (!once_value_3) {
     fra.me.REG[6] = BOX_NativeString("");
     REGB1 = TAG_Int(0);
@@ -1813,9 +2008,10 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
     once_value_3 = fra.me.REG[6];
     register_static_object(&once_value_3);
   } else fra.me.REG[6] = once_value_3;
-  array___Array___add(fra.me.REG[3], fra.me.REG[6]);
+  fra.me.REG[6] = fra.me.REG[6];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
   fra.me.REG[6] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[3], fra.me.REG[6]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
   if (!once_value_4) {
     fra.me.REG[6] = BOX_NativeString(" /* ");
     REGB0 = TAG_Int(4);
@@ -1823,11 +2019,12 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
     once_value_4 = fra.me.REG[6];
     register_static_object(&once_value_4);
   } else fra.me.REG[6] = once_value_4;
-  array___Array___add(fra.me.REG[3], fra.me.REG[6]);
+  fra.me.REG[6] = fra.me.REG[6];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[6]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[3], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_5) {
     fra.me.REG[0] = BOX_NativeString(": ");
     REGB0 = TAG_Int(2);
@@ -1835,9 +2032,10 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
     once_value_5 = fra.me.REG[0];
     register_static_object(&once_value_5);
   } else fra.me.REG[0] = once_value_5;
-  array___Array___add(fra.me.REG[3], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   if (!once_value_6) {
     fra.me.REG[2] = BOX_NativeString(" < ");
     REGB0 = TAG_Int(3);
@@ -1845,10 +2043,11 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
     once_value_6 = fra.me.REG[2];
     register_static_object(&once_value_6);
   } else fra.me.REG[2] = once_value_6;
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  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[4] = CALL_table_computation___CompiledClass___local_class(fra.me.REG[4])(fra.me.REG[4]);
   fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
   if (!once_value_7) {
     fra.me.REG[4] = BOX_NativeString(": superclass init_table position */");
     REGB0 = TAG_Int(35);
@@ -1856,208 +2055,199 @@ val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t p0, val_t p
     once_value_7 = fra.me.REG[4];
     register_static_object(&once_value_7);
   } else fra.me.REG[4] = once_value_7;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  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]);
   fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
   goto label8;
   label8: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[3];
 }
-val_t compiling_global___TableEltClassInitTable___symbol(val_t p0){
+val_t compiling_global___TableEltClassColor___symbol(val_t p0){
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 250;
-  fra.me.meth = LOCATE_compiling_global___TableEltClassInitTable___symbol;
+  fra.me.line = 257;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___symbol;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./compiling//compiling_global.nit:257 */
   fra.me.REG[0] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_compiling_base___MMGlobalClass___init_table_pos_id(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:250 */
+  fra.me.REG[0] = CALL_compiling_base___MMGlobalClass___color_id(fra.me.REG[0])(fra.me.REG[0]);
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-val_t compiling_global___TableEltClassColor___compile_to_c(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+val_t compiling_global___TableEltClassColor___value(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 */
-  static val_t once_value_4; /* Once value */
-  static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 273;
-  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___compile_to_c;
+  fra.me.line = 259;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___value;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[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[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[3] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[4])(fra.me.REG[4]);
-  fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-  REGB0 = TAG_Int(9);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:277 */
+  /* ./compiling//compiling_global.nit:261 */
+  REGB0 = TAG_Int(5);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[5] = BOX_NativeString("");
+    fra.me.REG[3] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_1 = fra.me.REG[5];
+    fra.me.REG[3] = NEW_String_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[5] = once_value_1;
-  array___Array___add(fra.me.REG[3], fra.me.REG[5]);
-  REGB0 = CALL_table_computation___CompiledClass___id(fra.me.REG[4])(fra.me.REG[4]);
-  fra.me.REG[5] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[3], fra.me.REG[5]);
-  if (!once_value_2) {
-    fra.me.REG[5] = BOX_NativeString(" /* ");
-    REGB0 = TAG_Int(4);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_2 = fra.me.REG[5];
-    register_static_object(&once_value_2);
-  } else fra.me.REG[5] = once_value_2;
-  array___Array___add(fra.me.REG[3], fra.me.REG[5]);
+  } else fra.me.REG[3] = once_value_1;
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[3], fra.me.REG[0]);
+  fra.me.REG[1] = CALL_string___Object___to_s(REGB0)(REGB0);
+  CALL_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(" /* Color of ");
+    REGB0 = TAG_Int(13);
+    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[2])(fra.me.REG[2], fra.me.REG[1]);
+  fra.me.REG[0] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   if (!once_value_3) {
-    fra.me.REG[0] = BOX_NativeString(": ");
-    REGB0 = TAG_Int(2);
+    fra.me.REG[0] = BOX_NativeString(" */");
+    REGB0 = TAG_Int(3);
     fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
     once_value_3 = fra.me.REG[0];
     register_static_object(&once_value_3);
   } else fra.me.REG[0] = once_value_3;
-  array___Array___add(fra.me.REG[3], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  if (!once_value_4) {
-    fra.me.REG[2] = BOX_NativeString(" < ");
-    REGB0 = TAG_Int(3);
-    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;
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
-  fra.me.REG[4] = CALL_table_computation___CompiledClass___local_class(fra.me.REG[4])(fra.me.REG[4]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  if (!once_value_5) {
-    fra.me.REG[4] = BOX_NativeString(": superclass typecheck marker */");
-    REGB0 = TAG_Int(32);
-    fra.me.REG[4] = NEW_String_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;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-  goto label6;
-  label6: while(0);
-  stack_frame_head = fra.me.prev;
-  return fra.me.REG[3];
-}
-val_t compiling_global___TableEltClassColor___symbol(val_t p0){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 266;
-  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___symbol;
-  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] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_compiling_base___MMGlobalClass___color_id(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:266 */
-  goto label1;
-  label1: while(0);
+  goto label4;
+  label4: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[0];
+  return fra.me.REG[2];
 }
-val_t compiling_global___TableEltClassColor___value(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+val_t compiling_global___TableEltClassColor___compile_to_c(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} 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 */
+  static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 268;
-  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___value;
+  fra.me.line = 264;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___compile_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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;
-  REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:270 */
+  fra.me.REG[2] = p2;
+  /* ./compiling//compiling_global.nit:266 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:267 */
+  fra.me.REG[3] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[4])(fra.me.REG[4]);
+  fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  /* ./compiling//compiling_global.nit:268 */
+  REGB0 = TAG_Int(9);
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_1) {
-    fra.me.REG[3] = BOX_NativeString("");
+    fra.me.REG[5] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_1 = fra.me.REG[3];
+    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+    once_value_1 = fra.me.REG[5];
     register_static_object(&once_value_1);
-  } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
-  fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  fra.me.REG[1] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[1]);
+  } else fra.me.REG[5] = once_value_1;
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  REGB0 = CALL_table_computation___CompiledClass___id(fra.me.REG[4])(fra.me.REG[4]);
+  fra.me.REG[5] = CALL_string___Object___to_s(REGB0)(REGB0);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
   if (!once_value_2) {
-    fra.me.REG[1] = BOX_NativeString(" /* Color of ");
-    REGB0 = TAG_Int(13);
-    fra.me.REG[1] = NEW_String_string___String___with_native(fra.me.REG[1], REGB0);
-    once_value_2 = fra.me.REG[1];
+    fra.me.REG[5] = BOX_NativeString(" /* ");
+    REGB0 = TAG_Int(4);
+    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+    once_value_2 = fra.me.REG[5];
     register_static_object(&once_value_2);
-  } else fra.me.REG[1] = once_value_2;
-  array___Array___add(fra.me.REG[2], fra.me.REG[1]);
-  fra.me.REG[0] = CALL_table_computation___AbsTableEltClass___local_class(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  } else fra.me.REG[5] = once_value_2;
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[5]);
+  fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
+  REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_3) {
-    fra.me.REG[0] = BOX_NativeString(" */");
-    REGB0 = TAG_Int(3);
+    fra.me.REG[0] = BOX_NativeString(": ");
+    REGB0 = TAG_Int(2);
     fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
     once_value_3 = fra.me.REG[0];
     register_static_object(&once_value_3);
   } else fra.me.REG[0] = once_value_3;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-  goto label4;
-  label4: while(0);
+  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(" < ");
+    REGB0 = TAG_Int(3);
+    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[4] = CALL_table_computation___CompiledClass___local_class(fra.me.REG[4])(fra.me.REG[4]);
+  fra.me.REG[4] = CALL_string___Object___to_s(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]);
+  if (!once_value_5) {
+    fra.me.REG[4] = BOX_NativeString(": superclass typecheck marker */");
+    REGB0 = TAG_Int(32);
+    fra.me.REG[4] = NEW_String_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_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+  goto label6;
+  label6: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
+  return fra.me.REG[3];
 }
 val_t compiling_global___TableEltComposite___compile_to_c(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_compiling_global;
-  fra.me.line = 282;
+  fra.me.line = 273;
   fra.me.meth = LOCATE_compiling_global___TableEltComposite___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2067,10 +2257,8 @@ val_t compiling_global___TableEltComposite___compile_to_c(val_t p0, val_t p1, va
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./compiling//compiling_global.nit:282 */
-  fprintf(stderr, "Aborted");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 282);
-  nit_exit(1);
+  /* ./compiling//compiling_global.nit:273 */
+  nit_abort("Aborted", NULL, LOCATE_compiling_global, 273);
   stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
@@ -2083,7 +2271,7 @@ val_t compiling_global___TableEltClassSelfId___compile_to_c(val_t p0, val_t p1,
   static val_t once_value_3; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 286;
+  fra.me.line = 277;
   fra.me.meth = LOCATE_compiling_global___TableEltClassSelfId___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -2095,10 +2283,11 @@ val_t compiling_global___TableEltClassSelfId___compile_to_c(val_t p0, val_t p1,
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:279 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:280 */
   REGB0 = TAG_Int(5);
   fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:289 */
   if (!once_value_1) {
     fra.me.REG[4] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
@@ -2106,19 +2295,18 @@ val_t compiling_global___TableEltClassSelfId___compile_to_c(val_t p0, val_t p1,
     once_value_1 = fra.me.REG[4];
     register_static_object(&once_value_1);
   } else fra.me.REG[4] = once_value_1;
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
+  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]);
   fra.me.REG[4] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 289);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 280);
   }
   REGB0 = CALL_table_computation___CompiledClass___id(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[2] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   if (!once_value_2) {
     fra.me.REG[2] = BOX_NativeString(" /* ");
     REGB0 = TAG_Int(4);
@@ -2126,11 +2314,12 @@ val_t compiling_global___TableEltClassSelfId___compile_to_c(val_t p0, val_t p1,
     once_value_2 = fra.me.REG[2];
     register_static_object(&once_value_2);
   } else fra.me.REG[2] = once_value_2;
-  array___Array___add(fra.me.REG[3], fra.me.REG[2]);
+  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[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[3], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   if (!once_value_3) {
     fra.me.REG[0] = BOX_NativeString(": Identity */");
     REGB0 = TAG_Int(13);
@@ -2138,7 +2327,8 @@ val_t compiling_global___TableEltClassSelfId___compile_to_c(val_t p0, val_t p1,
     once_value_3 = fra.me.REG[0];
     register_static_object(&once_value_3);
   } else fra.me.REG[0] = once_value_3;
-  array___Array___add(fra.me.REG[3], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
   goto label4;
   label4: while(0);
@@ -2157,7 +2347,7 @@ val_t compiling_global___TableEltClassObjectSize___compile_to_c(val_t p0, val_t
   static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 294;
+  fra.me.line = 285;
   fra.me.meth = LOCATE_compiling_global___TableEltClassObjectSize___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -2169,10 +2359,12 @@ val_t compiling_global___TableEltClassObjectSize___compile_to_c(val_t p0, val_t
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./compiling//compiling_global.nit:287 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:288 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:289 */
   fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:298 */
   if (!once_value_1) {
     fra.me.REG[4] = BOX_NativeString("NativeArray");
     REGB1 = TAG_Int(11);
@@ -2180,6 +2372,7 @@ val_t compiling_global___TableEltClassObjectSize___compile_to_c(val_t p0, val_t
     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];
   fra.me.REG[4] = CALL_symbol___String___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[4]));
   if (UNTAG_Bool(REGB1)) {
@@ -2188,58 +2381,96 @@ val_t compiling_global___TableEltClassObjectSize___compile_to_c(val_t p0, val_t
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
+    /* ./compiling//compiling_global.nit:290 */
     REGB1 = TAG_Int(1);
+    /* ./../lib/standard//kernel.nit:216 */
     REGB1 = TAG_Int(-UNTAG_Int(REGB1));
+    /* ./compiling//compiling_global.nit:290 */
     REGB0 = REGB1;
-  /* ./compiling//compiling_global.nit:299 */
   } else {
+    /* ./compiling//compiling_global.nit:292 */
     fra.me.REG[4] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[2])(fra.me.REG[2]);
     fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    /* ./compiling//compiling_global.nit:293 */
     fra.me.REG[2] = CALL_table_computation___CompiledClass___instance_table(fra.me.REG[2])(fra.me.REG[2]);
-    fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-    /* ./compiling//compiling_global.nit:303 */
+    /* ./../lib/standard//collection//array.nit:234 */
+    REGB1 = TAG_Int(0);
+    /* ./../lib/standard//collection//array.nit:235 */
+    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+    }
+    REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+    /* ./../lib/standard//collection//array.nit:236 */
+    fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[2]);
+    /* ./../lib/standard//collection//array.nit:237 */
     while(1) {
-      REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-      if (UNTAG_Bool(REGB1)) {
-        fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-        REGB1 = TAG_Int(1);
-        REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-        REGB0 = REGB1;
-      /* ./compiling//compiling_global.nit:304 */
+      /* ./../lib/standard//collection//array.nit:23 */
+      REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+      if (UNTAG_Bool(REGB2)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+      }
+      REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+      /* ./../lib/standard//kernel.nit:212 */
+      REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+      /* ./../lib/standard//collection//array.nit:237 */
+      if (UNTAG_Bool(REGB2)) {
+        /* ./../lib/standard//collection//array.nit:238 */
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB2)) {
+          nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+        }
+        /* ./../lib/standard//collection//array.nit:654 */
+        fra.me.REG[3] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB1)];
+        /* ./compiling//compiling_global.nit:295 */
+        REGB2 = TAG_Int(1);
+        /* ./../lib/standard//kernel.nit:215 */
+        REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+        /* ./compiling//compiling_global.nit:295 */
+        REGB0 = REGB2;
+        /* ./../lib/standard//collection//array.nit:239 */
+        REGB2 = TAG_Int(1);
+        /* ./../lib/standard//kernel.nit:215 */
+        REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
+        /* ./../lib/standard//collection//array.nit:239 */
+        REGB1 = REGB2;
       } else {
-        /* ./compiling//compiling_global.nit:303 */
+        /* ./../lib/standard//collection//array.nit:237 */
         goto label2;
       }
-      CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
     }
     label2: while(0);
   }
+  /* ./compiling//compiling_global.nit:298 */
   REGB1 = TAG_Int(5);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB1);
-  /* ./compiling//compiling_global.nit:307 */
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB1);
   if (!once_value_3) {
-    fra.me.REG[4] = BOX_NativeString("");
+    fra.me.REG[2] = BOX_NativeString("");
     REGB1 = TAG_Int(0);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB1);
-    once_value_3 = fra.me.REG[4];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB1);
+    once_value_3 = fra.me.REG[2];
     register_static_object(&once_value_3);
-  } else fra.me.REG[4] = once_value_3;
-  array___Array___add(fra.me.REG[2], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[4]);
+  } else fra.me.REG[2] = once_value_3;
+  fra.me.REG[2] = fra.me.REG[2];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+  fra.me.REG[2] = CALL_string___Object___to_s(REGB0)(REGB0);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
   if (!once_value_4) {
-    fra.me.REG[4] = BOX_NativeString(" /* ");
+    fra.me.REG[2] = BOX_NativeString(" /* ");
     REGB0 = TAG_Int(4);
-    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_4 = fra.me.REG[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[4] = once_value_4;
-  array___Array___add(fra.me.REG[2], fra.me.REG[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[4])(fra.me.REG[4], fra.me.REG[2]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   if (!once_value_5) {
     fra.me.REG[0] = BOX_NativeString(": Object size (-1 if a NativeArray)*/");
     REGB0 = TAG_Int(37);
@@ -2247,12 +2478,13 @@ val_t compiling_global___TableEltClassObjectSize___compile_to_c(val_t p0, val_t
     once_value_5 = fra.me.REG[0];
     register_static_object(&once_value_5);
   } else fra.me.REG[0] = once_value_5;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   goto label6;
   label6: while(0);
   stack_frame_head = fra.me.prev;
-  return fra.me.REG[2];
+  return fra.me.REG[4];
 }
 val_t compiling_global___TableEltObjectId___compile_to_c(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
@@ -2262,7 +2494,7 @@ val_t compiling_global___TableEltObjectId___compile_to_c(val_t p0, val_t p1, val
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 312;
+  fra.me.line = 303;
   fra.me.meth = LOCATE_compiling_global___TableEltObjectId___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2273,10 +2505,11 @@ val_t compiling_global___TableEltObjectId___compile_to_c(val_t p0, val_t p1, val
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:305 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:306 */
   REGB0 = TAG_Int(3);
   fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:315 */
   if (!once_value_1) {
     fra.me.REG[3] = BOX_NativeString("/* ");
     REGB0 = TAG_Int(3);
@@ -2284,11 +2517,12 @@ val_t compiling_global___TableEltObjectId___compile_to_c(val_t p0, val_t p1, val
     once_value_1 = fra.me.REG[3];
     register_static_object(&once_value_1);
   } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   if (!once_value_2) {
     fra.me.REG[0] = BOX_NativeString(": Object_id */");
     REGB0 = TAG_Int(14);
@@ -2296,7 +2530,8 @@ val_t compiling_global___TableEltObjectId___compile_to_c(val_t p0, val_t p1, val
     once_value_2 = fra.me.REG[0];
     register_static_object(&once_value_2);
   } else fra.me.REG[0] = once_value_2;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   goto label3;
   label3: while(0);
@@ -2311,7 +2546,7 @@ val_t compiling_global___TableEltVftPointer___compile_to_c(val_t p0, val_t p1, v
   static val_t once_value_2; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 320;
+  fra.me.line = 311;
   fra.me.meth = LOCATE_compiling_global___TableEltVftPointer___compile_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2322,10 +2557,11 @@ val_t compiling_global___TableEltVftPointer___compile_to_c(val_t p0, val_t p1, v
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:313 */
+  fra.me.REG[1] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:314 */
   REGB0 = TAG_Int(3);
   fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:323 */
   if (!once_value_1) {
     fra.me.REG[3] = BOX_NativeString("/* ");
     REGB0 = TAG_Int(3);
@@ -2333,11 +2569,12 @@ val_t compiling_global___TableEltVftPointer___compile_to_c(val_t p0, val_t p1, v
     once_value_1 = fra.me.REG[3];
     register_static_object(&once_value_1);
   } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  fra.me.REG[3] = fra.me.REG[3];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
   fra.me.REG[1] = CALL_table_computation___Program___table_information(fra.me.REG[1])(fra.me.REG[1]);
   REGB0 = CALL_table_computation___ColorContext___color(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   fra.me.REG[0] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   if (!once_value_2) {
     fra.me.REG[0] = BOX_NativeString(": Pointer to the classtable */");
     REGB0 = TAG_Int(30);
@@ -2345,7 +2582,8 @@ val_t compiling_global___TableEltVftPointer___compile_to_c(val_t p0, val_t p1, v
     once_value_2 = fra.me.REG[0];
     register_static_object(&once_value_2);
   } else fra.me.REG[0] = once_value_2;
-  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
   goto label3;
   label3: while(0);
@@ -2353,603 +2591,249 @@ val_t compiling_global___TableEltVftPointer___compile_to_c(val_t p0, val_t p1, v
   return fra.me.REG[2];
 }
 void compiling_global___MMLocalClass___declare_tables_to_c(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   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 */
+    static val_t once_value_4; /* Once value */
     static val_t once_value_5; /* Once value */
-        static val_t once_value_6; /* Once value */
-        static val_t once_value_7; /* Once value */
-        static val_t once_value_8; /* Once value */
-        static val_t once_value_9; /* Once value */
-        static val_t once_value_10; /* Once value */
-        static val_t once_value_11; /* Once value */
-        static val_t once_value_12; /* Once value */
-        static val_t once_value_13; /* Once value */
-        static val_t once_value_14; /* Once value */
-        static val_t once_value_15; /* Once value */
-        static val_t once_value_16; /* 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 */
+    static val_t once_value_9; /* Once value */
+    static val_t once_value_10; /* Once value */
+    static val_t once_value_11; /* Once value */
+    static val_t once_value_12; /* Once value */
+    static val_t once_value_13; /* Once value */
+    static val_t once_value_14; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 339;
+  fra.me.line = 321;
   fra.me.meth = LOCATE_compiling_global___MMLocalClass___declare_tables_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  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[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:342 */
+  /* ./compiling//compiling_global.nit:324 */
   if (!once_value_1) {
-    fra.me.REG[3] = BOX_NativeString("");
+    fra.me.REG[2] = BOX_NativeString("");
     REGB0 = TAG_Int(0);
-    fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-    once_value_1 = fra.me.REG[3];
+    fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+    once_value_1 = fra.me.REG[2];
     register_static_object(&once_value_1);
-  } else fra.me.REG[3] = once_value_1;
-  array___Array___add(fra.me.REG[2], fra.me.REG[3]);
+  } else fra.me.REG[2] = once_value_1;
+  fra.me.REG[2] = fra.me.REG[2];
   CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./compiling//compiling_global.nit:325 */
   fra.me.REG[2] = CALL_primitive_info___MMLocalClass___primitive_info(fra.me.REG[0])(fra.me.REG[0]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:326 */
   REGB0 = TAG_Int(3);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:344 */
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
   if (!once_value_2) {
-    fra.me.REG[5] = BOX_NativeString("extern const classtable_elt_t VFT_");
+    fra.me.REG[4] = BOX_NativeString("extern const classtable_elt_t VFT_");
     REGB0 = TAG_Int(34);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_2 = fra.me.REG[5];
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+    once_value_2 = fra.me.REG[4];
     register_static_object(&once_value_2);
-  } else fra.me.REG[5] = once_value_2;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } else fra.me.REG[4] = once_value_2;
+  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]);
+  fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[4] = CALL_string___Object___to_s(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]);
   if (!once_value_3) {
-    fra.me.REG[5] = BOX_NativeString("[];");
+    fra.me.REG[4] = BOX_NativeString("[];");
     REGB0 = TAG_Int(3);
-    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
-    once_value_3 = fra.me.REG[5];
-    register_static_object(&once_value_3);
-  } else fra.me.REG[5] = once_value_3;
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
-  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-  array___Array___add(fra.me.REG[3], fra.me.REG[4]);
-  CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-  fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:345 */
-  if (!once_value_4) {
-    fra.me.REG[4] = BOX_NativeString("NativeArray");
-    REGB0 = TAG_Int(11);
     fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-    once_value_4 = fra.me.REG[4];
-    register_static_object(&once_value_4);
-  } else fra.me.REG[4] = once_value_4;
-  fra.me.REG[4] = CALL_symbol___String___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[4]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
-    REGB0 = REGB1;
-  }
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Int(0);
-    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:346 */
-    if (!once_value_5) {
-      fra.me.REG[3] = BOX_NativeString("val_t NEW_NativeArray(size_t length, size_t size);");
-      REGB0 = TAG_Int(50);
-      fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-      once_value_5 = fra.me.REG[3];
-      register_static_object(&once_value_5);
-    } else fra.me.REG[3] = once_value_5;
-    array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  } else {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./compiling//compiling_global.nit:347 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB1)) {
-        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);
-      /* ./compiling//compiling_global.nit:349 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 349);
-        nit_exit(1);
-      }
-      REGB0 = CALL_primitive_info___PrimitiveInfo___tagged(fra.me.REG[2])(fra.me.REG[2]);
-      REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:350 */
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 350);
-          nit_exit(1);
-        }
-        fra.me.REG[2] = CALL_primitive_info___PrimitiveInfo___cname(fra.me.REG[2])(fra.me.REG[2]);
-        REGB0 = TAG_Int(3);
-        fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
-        /* ./compiling//compiling_global.nit:351 */
-        if (!once_value_6) {
-          fra.me.REG[3] = BOX_NativeString("struct TBOX_");
-          REGB0 = TAG_Int(12);
-          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-          once_value_6 = fra.me.REG[3];
-          register_static_object(&once_value_6);
-        } else fra.me.REG[3] = once_value_6;
-        array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-        fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-        array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-        if (!once_value_7) {
-          fra.me.REG[3] = BOX_NativeString("");
-          REGB0 = TAG_Int(0);
-          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
-          once_value_7 = fra.me.REG[3];
-          register_static_object(&once_value_7);
-        } else fra.me.REG[3] = once_value_7;
-        array___Array___add(fra.me.REG[4], fra.me.REG[3]);
-        fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
-        REGB0 = TAG_Int(0);
-        fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-        REGB0 = TAG_Int(5);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB0);
-        /* ./compiling//compiling_global.nit:352 */
-        if (!once_value_8) {
-          fra.me.REG[6] = BOX_NativeString("");
-          REGB0 = TAG_Int(0);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-          once_value_8 = fra.me.REG[6];
-          register_static_object(&once_value_8);
-        } else fra.me.REG[6] = once_value_8;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        if (!once_value_9) {
-          fra.me.REG[6] = BOX_NativeString(" { const classtable_elt_t * vft; bigint object_id; ");
-          REGB0 = TAG_Int(51);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-          once_value_9 = fra.me.REG[6];
-          register_static_object(&once_value_9);
-        } else fra.me.REG[6] = once_value_9;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-        if (!once_value_10) {
-          fra.me.REG[6] = BOX_NativeString(" val;};");
-          REGB0 = TAG_Int(7);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-          once_value_10 = fra.me.REG[6];
-          register_static_object(&once_value_10);
-        } else fra.me.REG[6] = once_value_10;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        array___Array___add(fra.me.REG[3], fra.me.REG[5]);
-        CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-        REGB0 = TAG_Int(0);
-        fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-        REGB0 = TAG_Int(5);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB0);
-        /* ./compiling//compiling_global.nit:353 */
-        if (!once_value_11) {
-          fra.me.REG[6] = BOX_NativeString("val_t BOX_");
-          REGB0 = TAG_Int(10);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-          once_value_11 = fra.me.REG[6];
-          register_static_object(&once_value_11);
-        } else fra.me.REG[6] = once_value_11;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        if (!once_value_12) {
-          fra.me.REG[6] = BOX_NativeString("(");
-          REGB0 = TAG_Int(1);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-          once_value_12 = fra.me.REG[6];
-          register_static_object(&once_value_12);
-        } else fra.me.REG[6] = once_value_12;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-        if (!once_value_13) {
-          fra.me.REG[2] = BOX_NativeString(" val);");
-          REGB0 = TAG_Int(6);
-          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
-          once_value_13 = fra.me.REG[2];
-          register_static_object(&once_value_13);
-        } else fra.me.REG[2] = once_value_13;
-        array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        array___Array___add(fra.me.REG[3], fra.me.REG[5]);
-        CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-        REGB0 = TAG_Int(0);
-        fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
-        REGB0 = TAG_Int(5);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB0);
-        /* ./compiling//compiling_global.nit:354 */
-        if (!once_value_14) {
-          fra.me.REG[2] = BOX_NativeString("#define UNBOX_");
-          REGB0 = TAG_Int(14);
-          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
-          once_value_14 = fra.me.REG[2];
-          register_static_object(&once_value_14);
-        } else fra.me.REG[2] = once_value_14;
-        array___Array___add(fra.me.REG[5], fra.me.REG[2]);
-        fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[0]);
-        if (!once_value_15) {
-          fra.me.REG[0] = BOX_NativeString("(x) (((");
-          REGB0 = TAG_Int(7);
-          fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
-          once_value_15 = fra.me.REG[0];
-          register_static_object(&once_value_15);
-        } else fra.me.REG[0] = once_value_15;
-        array___Array___add(fra.me.REG[5], fra.me.REG[0]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        if (!once_value_16) {
-          fra.me.REG[4] = BOX_NativeString(" *)(VAL2OBJ(x)))->val)");
-          REGB0 = TAG_Int(22);
-          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-          once_value_16 = fra.me.REG[4];
-          register_static_object(&once_value_16);
-        } else fra.me.REG[4] = once_value_16;
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        array___Array___add(fra.me.REG[3], fra.me.REG[5]);
-        CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-      }
-    }
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void compiling_global___MMLocalClass___generate_allocation_iroutines(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 358;
-  fra.me.meth = LOCATE_compiling_global___MMLocalClass___generate_allocation_iroutines;
-  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[1] = CALL_table_computation___Program___compiled_classes(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = CALL_primitive_info___MMLocalClass___primitive_info(fra.me.REG[0])(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      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)) {
-    fra.me.REG[2] = CALL_static_type___MMLocalClass___get_type(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[2] = NEW_IRegister_icode_base___IRegister___init(fra.me.REG[2]);
-    REGB0 = TAG_Int(1);
-    fra.me.REG[1] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:368 */
-    array___Array___add(fra.me.REG[1], fra.me.REG[2]);
-    fra.me.REG[3] = NEW_IRoutine_icode_base___IRoutine___init(fra.me.REG[1], NIT_NULL);
-    fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___module(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[4] = NEW_ICodeBuilder_icode_builder___ICodeBuilder___init(fra.me.REG[4], fra.me.REG[3]);
-    fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[5] = CALL_abstract_collection___Collection___iterator(fra.me.REG[5])(fra.me.REG[5]);
-    /* ./compiling//compiling_global.nit:372 */
-    while(1) {
-      REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[5])(fra.me.REG[5]);
-      if (UNTAG_Bool(REGB0)) {
-        fra.me.REG[6] = CALL_abstract_collection___Iterator___item(fra.me.REG[5])(fra.me.REG[5]);
-        fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6]);
-        fra.me.REG[7] = CALL_static_type___MMLocalProperty___signature(fra.me.REG[6])(fra.me.REG[6]);
-        REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:374 */
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 374);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = CALL_static_type___MMSignature___return_type(fra.me.REG[7])(fra.me.REG[7]);
-        REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_MMAttribute, ID_MMAttribute)) /*cast MMAttribute*/;
-        /* ./compiling//compiling_global.nit:375 */
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              REGB1 = TAG_Bool(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));
-        } else {
-          REGB1 = TAG_Bool(false);
-          REGB0 = REGB1;
-        }
-        if (UNTAG_Bool(REGB0)) {
-          fra.me.REG[7] = CALL_icode_base___MMAttribute___iroutine(fra.me.REG[6])(fra.me.REG[6]);
-          REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-          /* ./compiling//compiling_global.nit:377 */
-          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;
-            }
-          }
-          if (UNTAG_Bool(REGB0)) {
-            goto label1;
-          }
-          fra.me.REG[7] = CALL_icode_tools___ICodeBuilder___inline_routine(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7], fra.me.REG[1], NIT_NULL);
-          REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_IRegister, ID_IRegister)) /*cast IRegister*/;
-          /* ./compiling//compiling_global.nit:379 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            fprintf(stderr, "Cast failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 379);
-            nit_exit(1);
-          }
-          fra.me.REG[7] = NEW_IAttrWrite_icode_base___IAttrWrite___init(fra.me.REG[6], fra.me.REG[2], fra.me.REG[7]);
-          /* ./compiling//compiling_global.nit:380 */
-          CALL_icode_builder___ICodeBuilder___stmt(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[7]);
-        }
-        label1: while(0);
-      } else {
-        /* ./compiling//compiling_global.nit:372 */
-        goto label2;
-      }
-      CALL_abstract_collection___Iterator___next(fra.me.REG[5])(fra.me.REG[5]);
-    }
-    label2: while(0);
-    /* ./compiling//compiling_global.nit:384 */
-    ATTR_compiling_global___MMLocalClass____init_var_iroutine(fra.me.REG[0]) = fra.me.REG[3];
-    fra.me.REG[3] = CALL_static_type___MMLocalClass___get_type(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[3] = NEW_IRegister_icode_base___IRegister___init(fra.me.REG[3]);
-    REGB0 = TAG_Int(1);
-    fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:389 */
-    array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-    fra.me.REG[5] = NEW_IRoutine_icode_base___IRoutine___init(fra.me.REG[5], NIT_NULL);
-    fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___module(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[4] = NEW_ICodeBuilder_icode_builder___ICodeBuilder___init(fra.me.REG[4], fra.me.REG[5]);
-    fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-    /* ./compiling//compiling_global.nit:392 */
-    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]);
-        fra.me.REG[1] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-        fra.me.REG[7] = CALL_static_type___MMLocalProperty___signature(fra.me.REG[1])(fra.me.REG[1]);
-        REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:394 */
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 394);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = CALL_static_type___MMSignature___return_type(fra.me.REG[7])(fra.me.REG[7]);
-        REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_MMAttribute, ID_MMAttribute)) /*cast MMAttribute*/;
-        /* ./compiling//compiling_global.nit:395 */
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              REGB1 = TAG_Bool(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));
-        } else {
-          REGB1 = TAG_Bool(false);
-          REGB0 = REGB1;
-        }
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 395);
-            nit_exit(1);
-          }
-          REGB0 = CALL_static_type___MMType___is_nullable(fra.me.REG[7])(fra.me.REG[7]);
-          REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        } else {
-          REGB1 = TAG_Bool(false);
-          REGB0 = REGB1;
-        }
-        if (UNTAG_Bool(REGB0)) {
-          /* ./compiling//compiling_global.nit:396 */
-          CALL_icode_builder___ICodeBuilder___add_attr_check(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1], fra.me.REG[3]);
-        }
-      } else {
-        /* ./compiling//compiling_global.nit:392 */
-        goto label3;
-      }
-      CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+    once_value_3 = fra.me.REG[4];
+    register_static_object(&once_value_3);
+  } else fra.me.REG[4] = once_value_3;
+  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]);
+  fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+  CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+  /* ./compiling//compiling_global.nit:327 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
     }
-    label3: while(0);
-    /* ./compiling//compiling_global.nit:400 */
-    ATTR_compiling_global___MMLocalClass____checknew_iroutine(fra.me.REG[0]) = fra.me.REG[5];
-    fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___cshe(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[5] = CALL_partial_order___PartialOrderElement___greaters(fra.me.REG[5])(fra.me.REG[5]);
-    REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[5])(fra.me.REG[5]);
-    REGB1 = TAG_Int(1);
-    REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-    fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[5] = CALL_abstract_collection___Collection___iterator(fra.me.REG[5])(fra.me.REG[5]);
-    /* ./compiling//compiling_global.nit:405 */
-    while(1) {
-      REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[5])(fra.me.REG[5]);
-      if (UNTAG_Bool(REGB1)) {
-        fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[5])(fra.me.REG[5]);
-        fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
-        fra.me.REG[3] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[2])(fra.me.REG[2]);
-        REGB1 = CALL_abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        /* ./compiling//compiling_global.nit:408 */
-        if (UNTAG_Bool(REGB1)) {
-          goto label4;
-        }
-        REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
-        /* ./compiling//compiling_global.nit:409 */
-        if (UNTAG_Bool(REGB1)) {
-        } else {
-          fprintf(stderr, "Assert failed");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 409);
-          nit_exit(1);
-        }
-        fra.me.REG[3] = CALL_static_type___MMLocalClass___get_type(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[3] = NEW_IRegister_icode_base___IRegister___init(fra.me.REG[3]);
-        fra.me.REG[4] = NEW_Array_array___Array___init();
-        REGB1 = TAG_Int(0);
-        fra.me.REG[1] = CALL_static_type___MMLocalProperty___signature(fra.me.REG[2])(fra.me.REG[2]);
-        REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:413 */
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 413);
-          nit_exit(1);
-        }
-        REGB0 = CALL_static_type___MMSignature___arity(fra.me.REG[1])(fra.me.REG[1]);
-        fra.me.REG[1] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-        fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-        while(1) {
-          REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-          if (UNTAG_Bool(REGB0)) {
-            REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-            fra.me.REG[7] = CALL_static_type___MMLocalProperty___signature(fra.me.REG[2])(fra.me.REG[2]);
-            REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-            if (UNTAG_Bool(REGB1)) {
-              fprintf(stderr, "Reciever is null");
-              fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 413);
-              nit_exit(1);
-            }
-            fra.me.REG[7] = CALL_static_type___MMSignature_____bra(fra.me.REG[7])(fra.me.REG[7], REGB0);
-            fra.me.REG[7] = NEW_IRegister_icode_base___IRegister___init(fra.me.REG[7]);
-            array___Array___add(fra.me.REG[4], fra.me.REG[7]);
-          } else {
-            goto label5;
-          }
-          CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-        }
-        label5: while(0);
-        fra.me.REG[1] = NEW_IRoutine_icode_base___IRoutine___init(fra.me.REG[4], fra.me.REG[3]);
-        fra.me.REG[7] = CALL_icode_base___MMMethod___iroutine(fra.me.REG[2])(fra.me.REG[2]);
-        REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:415 */
-        if (UNTAG_Bool(REGB0)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 415);
-          nit_exit(1);
-        }
-        fra.me.REG[7] = CALL_icode_base___IRoutine___location(fra.me.REG[7])(fra.me.REG[7]);
-        CALL_icode_base___IRoutine___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___module(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[7] = NEW_ICodeBuilder_icode_builder___ICodeBuilder___init(fra.me.REG[7], fra.me.REG[1]);
-        fra.me.REG[6] = CALL_static_type___MMLocalClass___get_type(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[6] = NEW_IAllocateInstance_icode_base___IAllocateInstance___init(fra.me.REG[6]);
-        /* ./compiling//compiling_global.nit:419 */
-        CALL_icode_base___ICode___result__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
-        /* ./compiling//compiling_global.nit:420 */
-        CALL_icode_builder___ICodeBuilder___stmt(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
-        REGB0 = TAG_Int(1);
-        fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB0);
-        /* ./compiling//compiling_global.nit:421 */
-        array___Array___add(fra.me.REG[6], fra.me.REG[3]);
-        /* ./compiling//compiling_global.nit:422 */
-        CALL_abstract_collection___SimpleCollection___add_all(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
-        fra.me.REG[4] = CALL_static_type___MMLocalClass___get_type(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[4] = NEW_IInitAttributes_icode_base___IInitAttributes___init(fra.me.REG[4], fra.me.REG[3]);
-        /* ./compiling//compiling_global.nit:424 */
-        CALL_icode_builder___ICodeBuilder___stmt(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
-        fra.me.REG[6] = NEW_IStaticCall_icode_base___IStaticCall___init(fra.me.REG[2], fra.me.REG[6]);
-        /* ./compiling//compiling_global.nit:425 */
-        CALL_icode_builder___ICodeBuilder___stmt(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
-        fra.me.REG[6] = CALL_static_type___MMLocalClass___get_type(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[3] = NEW_ICheckInstance_icode_base___ICheckInstance___init(fra.me.REG[6], fra.me.REG[3]);
-        /* ./compiling//compiling_global.nit:426 */
-        CALL_icode_builder___ICodeBuilder___stmt(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
-        REGB0 = TAG_Bool(ATTR_compiling_global___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
-        /* ./compiling//compiling_global.nit:428 */
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          fprintf(stderr, "Uninitialized attribute %s", "_new_instance_iroutine");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 428);
-          nit_exit(1);
-        }
-        fra.me.REG[3] = ATTR_compiling_global___MMLocalClass____new_instance_iroutine(fra.me.REG[0]);
-        CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2], fra.me.REG[1]);
-        label4: while(0);
-      } else {
-        /* ./compiling//compiling_global.nit:405 */
-        goto label6;
-      }
-      CALL_abstract_collection___Iterator___next(fra.me.REG[5])(fra.me.REG[5]);
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 327);
     }
-    label6: while(0);
+    REGB0 = CALL_primitive_info___PrimitiveInfo___tagged(fra.me.REG[2])(fra.me.REG[2]);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  } else {
+    REGB1 = TAG_Bool(false);
+    REGB0 = REGB1;
+  }
+  if (UNTAG_Bool(REGB0)) {
+    /* ./compiling//compiling_global.nit:328 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 328);
+    }
+    fra.me.REG[2] = CALL_primitive_info___PrimitiveInfo___cname(fra.me.REG[2])(fra.me.REG[2]);
+    /* ./compiling//compiling_global.nit:329 */
+    REGB0 = TAG_Int(3);
+    fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+    if (!once_value_4) {
+      fra.me.REG[4] = BOX_NativeString("struct TBOX_");
+      REGB0 = TAG_Int(12);
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+      once_value_4 = fra.me.REG[4];
+      register_static_object(&once_value_4);
+    } else fra.me.REG[4] = once_value_4;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[4] = CALL_string___Object___to_s(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]);
+    if (!once_value_5) {
+      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_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_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+    /* ./compiling//compiling_global.nit:330 */
+    REGB0 = TAG_Int(5);
+    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+    if (!once_value_6) {
+      fra.me.REG[5] = BOX_NativeString("");
+      REGB0 = TAG_Int(0);
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+      once_value_6 = fra.me.REG[5];
+      register_static_object(&once_value_6);
+    } else fra.me.REG[5] = once_value_6;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    if (!once_value_7) {
+      fra.me.REG[5] = BOX_NativeString(" { const classtable_elt_t * vft; bigint object_id; ");
+      REGB0 = TAG_Int(51);
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+      once_value_7 = fra.me.REG[5];
+      register_static_object(&once_value_7);
+    } else fra.me.REG[5] = once_value_7;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    if (!once_value_8) {
+      fra.me.REG[5] = BOX_NativeString(" val;};");
+      REGB0 = TAG_Int(7);
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+      once_value_8 = fra.me.REG[5];
+      register_static_object(&once_value_8);
+    } else fra.me.REG[5] = once_value_8;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:331 */
+    REGB0 = TAG_Int(5);
+    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+    if (!once_value_9) {
+      fra.me.REG[5] = BOX_NativeString("val_t BOX_");
+      REGB0 = TAG_Int(10);
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+      once_value_9 = fra.me.REG[5];
+      register_static_object(&once_value_9);
+    } else fra.me.REG[5] = once_value_9;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    if (!once_value_10) {
+      fra.me.REG[5] = BOX_NativeString("(");
+      REGB0 = TAG_Int(1);
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB0);
+      once_value_10 = fra.me.REG[5];
+      register_static_object(&once_value_10);
+    } else fra.me.REG[5] = once_value_10;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    if (!once_value_11) {
+      fra.me.REG[2] = BOX_NativeString(" val);");
+      REGB0 = TAG_Int(6);
+      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+      once_value_11 = fra.me.REG[2];
+      register_static_object(&once_value_11);
+    } else fra.me.REG[2] = once_value_11;
+    fra.me.REG[2] = fra.me.REG[2];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:332 */
+    REGB0 = TAG_Int(5);
+    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+    if (!once_value_12) {
+      fra.me.REG[2] = BOX_NativeString("#define UNBOX_");
+      REGB0 = TAG_Int(14);
+      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+      once_value_12 = fra.me.REG[2];
+      register_static_object(&once_value_12);
+    } else fra.me.REG[2] = once_value_12;
+    fra.me.REG[2] = fra.me.REG[2];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[2]);
+    fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    if (!once_value_13) {
+      fra.me.REG[0] = BOX_NativeString("(x) (((");
+      REGB0 = TAG_Int(7);
+      fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+      once_value_13 = fra.me.REG[0];
+      register_static_object(&once_value_13);
+    } else fra.me.REG[0] = once_value_13;
+    fra.me.REG[0] = fra.me.REG[0];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    if (!once_value_14) {
+      fra.me.REG[3] = BOX_NativeString(" *)(VAL2OBJ(x)))->val)");
+      REGB0 = TAG_Int(22);
+      fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+      once_value_14 = fra.me.REG[3];
+      register_static_object(&once_value_14);
+    } else fra.me.REG[3] = once_value_14;
+    fra.me.REG[3] = fra.me.REG[3];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   }
   stack_frame_head = fra.me.prev;
   return;
 }
 void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
   val_t tmp;
   static val_t once_value_1; /* Once value */
   static val_t once_value_2; /* Once value */
@@ -2999,15 +2883,6 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
       static val_t once_value_48; /* Once value */
       static val_t once_value_49; /* Once value */
       static val_t once_value_50; /* Once value */
-          static val_t once_value_52; /* Once value */
-          static val_t once_value_53; /* Once value */
-          static val_t once_value_54; /* Once value */
-          static val_t once_value_55; /* Once value */
-          static val_t once_value_56; /* Once value */
-          static val_t once_value_57; /* Once value */
-          static val_t once_value_58; /* Once value */
-          static val_t once_value_59; /* Once value */
-          static val_t once_value_60; /* Once value */
         static val_t once_value_62; /* Once value */
         static val_t once_value_63; /* Once value */
         static val_t once_value_64; /* Once value */
@@ -3026,10 +2901,10 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
         static val_t once_value_77; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 433;
+  fra.me.line = 336;
   fra.me.meth = LOCATE_compiling_global___MMLocalClass___compile_tables_to_c;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -3039,612 +2914,631 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
-  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:339 */
+  fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[2] = CALL_table_computation___Program___compiled_classes(fra.me.REG[2])(fra.me.REG[2]);
   fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+  /* ./compiling//compiling_global.nit:340 */
   fra.me.REG[2] = CALL_table_computation___CompiledClass___class_table(fra.me.REG[3])(fra.me.REG[3]);
-  REGB0 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   /* ./../lib/standard//collection//array.nit:23 */
+  REGB0 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_length");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
   }
   REGB0 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
-  fra.me.REG[4] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:342 */
+  fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
   fra.me.REG[4] = CALL_table_computation___Program___table_information(fra.me.REG[4])(fra.me.REG[4]);
   REGB1 = CALL_table_computation___TableInformation___max_class_table_length(fra.me.REG[4])(fra.me.REG[4]);
-  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   /* ./../lib/standard//collection//array.nit:23 */
+  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_length");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
   }
   REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+  /* ./../lib/standard//kernel.nit:214 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
-  /* ./compiling//compiling_global.nit:439 */
+  /* ./compiling//compiling_global.nit:342 */
   if (UNTAG_Bool(REGB2)) {
-    fra.me.REG[4] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+    /* ./compiling//compiling_global.nit:343 */
+    fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
     fra.me.REG[4] = CALL_table_computation___Program___table_information(fra.me.REG[4])(fra.me.REG[4]);
     REGB2 = CALL_table_computation___TableInformation___max_class_table_length(fra.me.REG[4])(fra.me.REG[4]);
     REGB0 = REGB2;
-  /* ./compiling//compiling_global.nit:440 */
   }
-  REGB2 = TAG_Int(0);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
+  /* ./compiling//compiling_global.nit:346 */
   REGB2 = TAG_Int(5);
-  fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
-  /* ./compiling//compiling_global.nit:443 */
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
   if (!once_value_1) {
-    fra.me.REG[6] = BOX_NativeString("const classtable_elt_t VFT_");
+    fra.me.REG[5] = BOX_NativeString("const classtable_elt_t VFT_");
     REGB2 = TAG_Int(27);
-    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-    once_value_1 = fra.me.REG[6];
+    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+    once_value_1 = fra.me.REG[5];
     register_static_object(&once_value_1);
-  } else fra.me.REG[6] = once_value_1;
-  array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-  array___Array___add(fra.me.REG[5], fra.me.REG[6]);
+  } else fra.me.REG[5] = once_value_1;
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+  fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   if (!once_value_2) {
-    fra.me.REG[6] = BOX_NativeString("[");
+    fra.me.REG[5] = BOX_NativeString("[");
     REGB2 = TAG_Int(1);
-    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-    once_value_2 = fra.me.REG[6];
+    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+    once_value_2 = fra.me.REG[5];
     register_static_object(&once_value_2);
-  } else fra.me.REG[6] = once_value_2;
-  array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[6] = CALL_string___Object___to_s(REGB0)(REGB0);
-  array___Array___add(fra.me.REG[5], fra.me.REG[6]);
+  } else fra.me.REG[5] = once_value_2;
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  fra.me.REG[5] = CALL_string___Object___to_s(REGB0)(REGB0);
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
   if (!once_value_3) {
-    fra.me.REG[6] = BOX_NativeString("] = {");
+    fra.me.REG[5] = BOX_NativeString("] = {");
     REGB2 = TAG_Int(5);
-    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-    once_value_3 = fra.me.REG[6];
+    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+    once_value_3 = fra.me.REG[5];
     register_static_object(&once_value_3);
-  } else fra.me.REG[6] = once_value_3;
-  array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-  fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-  array___Array___add(fra.me.REG[4], fra.me.REG[5]);
+  } else fra.me.REG[5] = once_value_3;
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+  fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
   CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  /* ./compiling//compiling_global.nit:444 */
+  /* ./compiling//compiling_global.nit:347 */
   CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./compiling//compiling_global.nit:445 */
+  /* ./../lib/standard//collection//array.nit:231 */
+  fra.me.REG[4] = fra.me.REG[2];
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB2 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[5] = ATTR_array___Array____items(fra.me.REG[4]);
+  /* ./../lib/standard//collection//array.nit:237 */
   while(1) {
-    REGB2 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[4])(fra.me.REG[4]);
-    if (UNTAG_Bool(REGB2)) {
-      fra.me.REG[5] = CALL_abstract_collection___Iterator___item(fra.me.REG[4])(fra.me.REG[4]);
-      REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-      /* ./compiling//compiling_global.nit:446 */
-      if (UNTAG_Bool(REGB2)) {
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB1)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[6] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB2)];
+      /* ./compiling//compiling_global.nit:349 */
+      REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
       } else {
-        REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool(false);
-          REGB2 = REGB1;
+        REGB3 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+          REGB3 = TAG_Bool(false);
+          REGB1 = REGB3;
         } else {
-          REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
-          REGB2 = REGB1;
+          REGB3 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+          REGB1 = REGB3;
         }
       }
-      if (UNTAG_Bool(REGB2)) {
-        REGB2 = TAG_Int(0);
-        fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:447 */
+      if (UNTAG_Bool(REGB1)) {
+        /* ./compiling//compiling_global.nit:350 */
         if (!once_value_4) {
           fra.me.REG[7] = BOX_NativeString("{0} /* Class Hole :( */,");
-          REGB2 = TAG_Int(24);
-          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          REGB1 = TAG_Int(24);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB1);
           once_value_4 = fra.me.REG[7];
           register_static_object(&once_value_4);
         } else fra.me.REG[7] = once_value_4;
-        array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
       } else {
-        REGB2 = TAG_Int(0);
-        fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-        REGB2 = TAG_Int(3);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:449 */
+        /* ./compiling//compiling_global.nit:352 */
+        REGB1 = TAG_Int(3);
+        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB1);
         if (!once_value_5) {
           fra.me.REG[8] = BOX_NativeString("{(bigint) ");
-          REGB2 = TAG_Int(10);
-          fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB2);
+          REGB1 = TAG_Int(10);
+          fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB1);
           once_value_5 = fra.me.REG[8];
           register_static_object(&once_value_5);
         } else fra.me.REG[8] = once_value_5;
-        array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-        REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 449);
-          nit_exit(1);
+        fra.me.REG[8] = fra.me.REG[8];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+        REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+          nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 352);
         }
-        fra.me.REG[5] = CALL_compiling_global___TableElt___compile_to_c(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1], fra.me.REG[0]);
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        fra.me.REG[6] = CALL_compiling_global___TableElt___compile_to_c(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1], fra.me.REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
         if (!once_value_6) {
-          fra.me.REG[5] = BOX_NativeString("},");
-          REGB2 = TAG_Int(2);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-          once_value_6 = fra.me.REG[5];
+          fra.me.REG[6] = BOX_NativeString("},");
+          REGB1 = TAG_Int(2);
+          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB1);
+          once_value_6 = fra.me.REG[6];
           register_static_object(&once_value_6);
-        } else fra.me.REG[5] = once_value_6;
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[6] = once_value_6;
+        fra.me.REG[6] = fra.me.REG[6];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
         fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-        array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
       }
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB1 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB1 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB1));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB2 = REGB1;
     } else {
-      /* ./compiling//compiling_global.nit:445 */
+      /* ./../lib/standard//collection//array.nit:237 */
       goto label7;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
   }
   label7: while(0);
-  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   /* ./../lib/standard//collection//array.nit:23 */
+  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB2)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_length");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
   }
   REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+  /* ./../lib/standard//kernel.nit:214 */
   REGB2 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB2));
-  /* ./compiling//compiling_global.nit:452 */
+  /* ./compiling//compiling_global.nit:355 */
   if (UNTAG_Bool(REGB2)) {
-    REGB2 = TAG_Int(0);
-    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:453 */
+    /* ./compiling//compiling_global.nit:356 */
     if (!once_value_8) {
-      fra.me.REG[6] = BOX_NativeString("{0},");
+      fra.me.REG[5] = BOX_NativeString("{0},");
       REGB2 = TAG_Int(4);
-      fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-      once_value_8 = fra.me.REG[6];
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+      once_value_8 = fra.me.REG[5];
       register_static_object(&once_value_8);
-    } else fra.me.REG[6] = once_value_8;
-    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+    } else fra.me.REG[5] = once_value_8;
+    fra.me.REG[5] = fra.me.REG[5];
     /* ./../lib/standard//collection//array.nit:23 */
+    REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
-      fprintf(stderr, "Uninitialized attribute %s", "_length");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-      nit_exit(1);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
     }
     REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+    /* ./../lib/standard//kernel.nit:217 */
     REGB2 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB2));
-    fra.me.REG[6] = CALL_string___String_____star(fra.me.REG[6])(fra.me.REG[6], REGB2);
-    /* ./compiling//compiling_global.nit:453 */
-    array___Array___add(fra.me.REG[4], fra.me.REG[6]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:356 */
+    fra.me.REG[5] = CALL_string___String_____star(fra.me.REG[5])(fra.me.REG[5], REGB2);
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
   }
-  /* ./compiling//compiling_global.nit:455 */
+  /* ./compiling//compiling_global.nit:358 */
   CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  REGB2 = TAG_Int(0);
-  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
-  /* ./compiling//compiling_global.nit:456 */
+  /* ./compiling//compiling_global.nit:359 */
   if (!once_value_9) {
-    fra.me.REG[6] = BOX_NativeString("};");
+    fra.me.REG[5] = BOX_NativeString("};");
     REGB2 = TAG_Int(2);
-    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-    once_value_9 = fra.me.REG[6];
+    fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+    once_value_9 = fra.me.REG[5];
     register_static_object(&once_value_9);
-  } else fra.me.REG[6] = once_value_9;
-  array___Array___add(fra.me.REG[4], fra.me.REG[6]);
-  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  } else fra.me.REG[5] = once_value_9;
+  fra.me.REG[5] = fra.me.REG[5];
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* ./compiling//compiling_global.nit:360 */
   fra.me.REG[3] = CALL_table_computation___CompiledClass___instance_table(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./compiling//compiling_global.nit:458 */
+  /* ./../lib/standard//collection//array.nit:231 */
+  fra.me.REG[5] = fra.me.REG[3];
+  /* ./../lib/standard//collection//array.nit:234 */
+  REGB2 = TAG_Int(0);
+  /* ./../lib/standard//collection//array.nit:235 */
+  REGB0 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+  }
+  REGB0 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
+  /* ./../lib/standard//collection//array.nit:236 */
+  fra.me.REG[2] = ATTR_array___Array____items(fra.me.REG[5]);
+  /* ./../lib/standard//collection//array.nit:237 */
   while(1) {
-    REGB2 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[4])(fra.me.REG[4]);
-    if (UNTAG_Bool(REGB2)) {
-      fra.me.REG[6] = CALL_abstract_collection___Iterator___item(fra.me.REG[4])(fra.me.REG[4]);
-      REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-      /* ./compiling//compiling_global.nit:459 */
-      if (UNTAG_Bool(REGB2)) {
+    /* ./../lib/standard//collection//array.nit:23 */
+    REGB0 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[5])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    }
+    REGB0 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB0 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB0));
+    /* ./../lib/standard//collection//array.nit:237 */
+    if (UNTAG_Bool(REGB0)) {
+      /* ./../lib/standard//collection//array.nit:238 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+      }
+      /* ./../lib/standard//collection//array.nit:654 */
+      fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
+      /* ./compiling//compiling_global.nit:362 */
+      REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
       } else {
-        REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool(false);
-          REGB2 = REGB0;
+        REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool(false);
+          REGB0 = REGB1;
         } else {
-          REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-          REGB2 = REGB0;
+          REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+          REGB0 = REGB1;
         }
       }
-      if (UNTAG_Bool(REGB2)) {
-        REGB2 = TAG_Int(0);
-        fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:460 */
+      if (UNTAG_Bool(REGB0)) {
+        /* ./compiling//compiling_global.nit:363 */
         if (!once_value_10) {
           fra.me.REG[7] = BOX_NativeString("/* Instance Hole :( */");
-          REGB2 = TAG_Int(22);
-          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          REGB0 = TAG_Int(22);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB0);
           once_value_10 = fra.me.REG[7];
           register_static_object(&once_value_10);
         } else fra.me.REG[7] = once_value_10;
-        array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
       } else {
-        REGB2 = TAG_Int(0);
-        fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-        REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:462 */
-        if (UNTAG_Bool(REGB2)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 462);
-          nit_exit(1);
+        /* ./compiling//compiling_global.nit:365 */
+        REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+          nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 365);
         }
-        fra.me.REG[6] = CALL_compiling_global___TableElt___compile_to_c(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1], fra.me.REG[0]);
-        array___Array___add(fra.me.REG[2], fra.me.REG[6]);
-        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        fra.me.REG[4] = CALL_compiling_global___TableElt___compile_to_c(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1], fra.me.REG[0]);
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
       }
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB0 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+      /* ./../lib/standard//collection//array.nit:239 */
+      REGB2 = REGB0;
     } else {
-      /* ./compiling//compiling_global.nit:458 */
+      /* ./../lib/standard//collection//array.nit:237 */
       goto label11;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
   }
   label11: while(0);
-  fra.me.REG[4] = CALL_primitive_info___MMLocalClass___primitive_info(fra.me.REG[0])(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:467 */
+  /* ./compiling//compiling_global.nit:369 */
+  fra.me.REG[2] = CALL_primitive_info___MMLocalClass___primitive_info(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:370 */
+  fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
   if (!once_value_12) {
-    fra.me.REG[6] = BOX_NativeString("NativeArray");
+    fra.me.REG[4] = BOX_NativeString("NativeArray");
     REGB2 = TAG_Int(11);
-    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-    once_value_12 = fra.me.REG[6];
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+    once_value_12 = fra.me.REG[4];
     register_static_object(&once_value_12);
-  } else fra.me.REG[6] = once_value_12;
-  fra.me.REG[6] = CALL_symbol___String___to_symbol(fra.me.REG[6])(fra.me.REG[6]);
-  REGB2 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[2],fra.me.REG[6]));
+  } else fra.me.REG[4] = once_value_12;
+  fra.me.REG[4] = fra.me.REG[4];
+  fra.me.REG[4] = CALL_symbol___String___to_symbol(fra.me.REG[4])(fra.me.REG[4]);
+  REGB2 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[5],fra.me.REG[4]));
   if (UNTAG_Bool(REGB2)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
     REGB2 = REGB0;
   }
   if (UNTAG_Bool(REGB2)) {
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:468 */
+    /* ./compiling//compiling_global.nit:371 */
     if (!once_value_13) {
-      fra.me.REG[2] = BOX_NativeString("val_t NEW_NativeArray(size_t length, size_t size) {");
+      fra.me.REG[4] = BOX_NativeString("val_t NEW_NativeArray(size_t length, size_t size) {");
       REGB2 = TAG_Int(51);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_13 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_13 = fra.me.REG[4];
       register_static_object(&once_value_13);
-    } else fra.me.REG[2] = once_value_13;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    /* ./compiling//compiling_global.nit:469 */
+    } else fra.me.REG[4] = once_value_13;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:372 */
     CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:470 */
+    /* ./compiling//compiling_global.nit:373 */
     if (!once_value_14) {
-      fra.me.REG[2] = BOX_NativeString("Nit_NativeArray array;");
+      fra.me.REG[4] = BOX_NativeString("Nit_NativeArray array;");
       REGB2 = TAG_Int(22);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_14 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_14 = fra.me.REG[4];
       register_static_object(&once_value_14);
-    } else fra.me.REG[2] = once_value_14;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:471 */
+    } else fra.me.REG[4] = once_value_14;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:374 */
     if (!once_value_15) {
-      fra.me.REG[2] = BOX_NativeString("array = (Nit_NativeArray)alloc(sizeof(struct Nit_NativeArray) + ((length - 1) * size));");
+      fra.me.REG[4] = BOX_NativeString("array = (Nit_NativeArray)alloc(sizeof(struct Nit_NativeArray) + ((length - 1) * size));");
       REGB2 = TAG_Int(87);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_15 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_15 = fra.me.REG[4];
       register_static_object(&once_value_15);
-    } else fra.me.REG[2] = once_value_15;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
+    } else fra.me.REG[4] = once_value_15;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:375 */
     REGB2 = TAG_Int(3);
-    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:472 */
+    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
     if (!once_value_16) {
-      fra.me.REG[7] = BOX_NativeString("array->vft = (classtable_elt_t*)VFT_");
+      fra.me.REG[5] = BOX_NativeString("array->vft = (classtable_elt_t*)VFT_");
       REGB2 = TAG_Int(36);
-      fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-      once_value_16 = fra.me.REG[7];
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+      once_value_16 = fra.me.REG[5];
       register_static_object(&once_value_16);
-    } else fra.me.REG[7] = once_value_16;
-    array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-    fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-    fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-    array___Array___add(fra.me.REG[2], fra.me.REG[7]);
+    } else fra.me.REG[5] = once_value_16;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+    fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
     if (!once_value_17) {
-      fra.me.REG[7] = BOX_NativeString(";");
+      fra.me.REG[5] = BOX_NativeString(";");
       REGB2 = TAG_Int(1);
-      fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-      once_value_17 = fra.me.REG[7];
+      fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+      once_value_17 = fra.me.REG[5];
       register_static_object(&once_value_17);
-    } else fra.me.REG[7] = once_value_17;
-    array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-    fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:473 */
+    } else fra.me.REG[5] = once_value_17;
+    fra.me.REG[5] = fra.me.REG[5];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+    fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:376 */
     if (!once_value_18) {
-      fra.me.REG[2] = BOX_NativeString("array->object_id = object_id_counter;");
+      fra.me.REG[4] = BOX_NativeString("array->object_id = object_id_counter;");
       REGB2 = TAG_Int(37);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_18 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_18 = fra.me.REG[4];
       register_static_object(&once_value_18);
-    } else fra.me.REG[2] = once_value_18;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:474 */
+    } else fra.me.REG[4] = once_value_18;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:377 */
     if (!once_value_19) {
-      fra.me.REG[2] = BOX_NativeString("object_id_counter = object_id_counter + 1;");
+      fra.me.REG[4] = BOX_NativeString("object_id_counter = object_id_counter + 1;");
       REGB2 = TAG_Int(42);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_19 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_19 = fra.me.REG[4];
       register_static_object(&once_value_19);
-    } else fra.me.REG[2] = once_value_19;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:475 */
+    } else fra.me.REG[4] = once_value_19;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:378 */
     if (!once_value_20) {
-      fra.me.REG[2] = BOX_NativeString("array->size = length;");
+      fra.me.REG[4] = BOX_NativeString("array->size = length;");
       REGB2 = TAG_Int(21);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_20 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_20 = fra.me.REG[4];
       register_static_object(&once_value_20);
-    } else fra.me.REG[2] = once_value_20;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:476 */
+    } else fra.me.REG[4] = once_value_20;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:379 */
     if (!once_value_21) {
-      fra.me.REG[2] = BOX_NativeString("return OBJ2VAL(array);");
+      fra.me.REG[4] = BOX_NativeString("return OBJ2VAL(array);");
       REGB2 = TAG_Int(22);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_21 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_21 = fra.me.REG[4];
       register_static_object(&once_value_21);
-    } else fra.me.REG[2] = once_value_21;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    /* ./compiling//compiling_global.nit:477 */
+    } else fra.me.REG[4] = once_value_21;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+    /* ./compiling//compiling_global.nit:380 */
     CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-    REGB2 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-    /* ./compiling//compiling_global.nit:478 */
+    /* ./compiling//compiling_global.nit:381 */
     if (!once_value_22) {
-      fra.me.REG[2] = BOX_NativeString("}");
+      fra.me.REG[4] = BOX_NativeString("}");
       REGB2 = TAG_Int(1);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-      once_value_22 = fra.me.REG[2];
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+      once_value_22 = fra.me.REG[4];
       register_static_object(&once_value_22);
-    } else fra.me.REG[2] = once_value_22;
-    array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+    } else fra.me.REG[4] = once_value_22;
+    fra.me.REG[4] = fra.me.REG[4];
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   } else {
-    REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./compiling//compiling_global.nit:479 */
+    /* ./compiling//compiling_global.nit:382 */
+    REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
         REGB0 = TAG_Bool(false);
         REGB2 = REGB0;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
         REGB2 = REGB0;
       }
     }
     if (UNTAG_Bool(REGB2)) {
+      /* ./compiling//compiling_global.nit:385 */
       REGB2 = TAG_Int(3);
-      fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:482 */
+      fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_23) {
-        fra.me.REG[2] = BOX_NativeString("INIT_ATTRIBUTES__");
+        fra.me.REG[5] = BOX_NativeString("INIT_ATTRIBUTES__");
         REGB2 = TAG_Int(17);
-        fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-        once_value_23 = fra.me.REG[2];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_23 = fra.me.REG[5];
         register_static_object(&once_value_23);
-      } else fra.me.REG[2] = once_value_23;
-      array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-      fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-      array___Array___add(fra.me.REG[6], fra.me.REG[2]);
+      } else fra.me.REG[5] = once_value_23;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+      fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
       if (!once_value_24) {
-        fra.me.REG[2] = BOX_NativeString("");
+        fra.me.REG[5] = BOX_NativeString("");
         REGB2 = TAG_Int(0);
-        fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
-        once_value_24 = fra.me.REG[2];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_24 = fra.me.REG[5];
         register_static_object(&once_value_24);
-      } else fra.me.REG[2] = once_value_24;
-      array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-      fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-      fra.me.REG[2] = ATTR_compiling_global___MMLocalClass____init_var_iroutine(fra.me.REG[0]);
+      } else fra.me.REG[5] = once_value_24;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+      fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+      /* ./compiling//compiling_global.nit:386 */
+      fra.me.REG[5] = CALL_program___MMLocalClass___init_var_iroutine(fra.me.REG[0])(fra.me.REG[0]);
       REGB2 = TAG_Int(3);
       fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:483 */
       if (!once_value_25) {
-        fra.me.REG[5] = BOX_NativeString("init var of ");
+        fra.me.REG[6] = BOX_NativeString("init var of ");
         REGB2 = TAG_Int(12);
-        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-        once_value_25 = fra.me.REG[5];
+        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+        once_value_25 = fra.me.REG[6];
         register_static_object(&once_value_25);
-      } else fra.me.REG[5] = once_value_25;
-      array___Array___add(fra.me.REG[7], fra.me.REG[5]);
-      fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-      array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+      } else fra.me.REG[6] = once_value_25;
+      fra.me.REG[6] = fra.me.REG[6];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
+      fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
       if (!once_value_26) {
-        fra.me.REG[5] = BOX_NativeString("");
+        fra.me.REG[6] = BOX_NativeString("");
         REGB2 = TAG_Int(0);
-        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-        once_value_26 = fra.me.REG[5];
+        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
+        once_value_26 = fra.me.REG[6];
         register_static_object(&once_value_26);
-      } else fra.me.REG[5] = once_value_26;
-      array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+      } else fra.me.REG[6] = once_value_26;
+      fra.me.REG[6] = fra.me.REG[6];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
       fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 483);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 386);
       }
-      fra.me.REG[7] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[6], fra.me.REG[7], NIT_NULL, NIT_NULL);
-      fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-      fra.me.REG[5] = NEW_CContext_compiling_base___CContext___init();
-      /* ./compiling//compiling_global.nit:485 */
-      CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-      fra.me.REG[5] = ATTR_compiling_global___MMLocalClass____init_var_iroutine(fra.me.REG[0]);
-      REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-      /* ./compiling//compiling_global.nit:486 */
+      fra.me.REG[7] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1], fra.me.REG[4], fra.me.REG[7], NIT_NULL, NIT_NULL);
+      /* ./compiling//compiling_global.nit:387 */
+      fra.me.REG[5] = CALL_compiling_base___CompilerVisitor___decl_writer(fra.me.REG[1])(fra.me.REG[1]);
+      /* ./compiling//compiling_global.nit:388 */
+      fra.me.REG[6] = CALL_compiling_base___CompilerVisitor___writer(fra.me.REG[1])(fra.me.REG[1]);
+      fra.me.REG[6] = CALL_compiling_writer___Writer___sub(fra.me.REG[6])(fra.me.REG[6]);
+      CALL_compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+      /* ./compiling//compiling_global.nit:389 */
+      fra.me.REG[6] = CALL_program___MMLocalClass___init_var_iroutine(fra.me.REG[0])(fra.me.REG[0]);
+      REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 486);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 389);
       }
-      CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1], fra.me.REG[6], fra.me.REG[7]);
-      fra.me.REG[7] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-      /* ./compiling//compiling_global.nit:487 */
-      CALL_compiling_base___CContext___append(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[7]);
-      /* ./compiling//compiling_global.nit:488 */
-      CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./compiling//compiling_global.nit:489 */
+      CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1], fra.me.REG[4], fra.me.REG[7]);
+      /* ./compiling//compiling_global.nit:390 */
+      CALL_compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:391 */
       CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:490 */
+      /* ./compiling//compiling_global.nit:392 */
       if (!once_value_27) {
-        fra.me.REG[7] = BOX_NativeString("}");
+        fra.me.REG[5] = BOX_NativeString("}");
         REGB2 = TAG_Int(1);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_27 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_27 = fra.me.REG[5];
         register_static_object(&once_value_27);
-      } else fra.me.REG[7] = once_value_27;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
+      } else fra.me.REG[5] = once_value_27;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:396 */
       REGB2 = TAG_Int(3);
-      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:494 */
+      fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_28) {
-        fra.me.REG[6] = BOX_NativeString("val_t NEW_");
+        fra.me.REG[7] = BOX_NativeString("val_t NEW_");
         REGB2 = TAG_Int(10);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_28 = fra.me.REG[6];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_28 = fra.me.REG[7];
         register_static_object(&once_value_28);
-      } else fra.me.REG[6] = once_value_28;
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
-      fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
+      } else fra.me.REG[7] = once_value_28;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+      fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
       if (!once_value_29) {
-        fra.me.REG[6] = BOX_NativeString("(void);");
+        fra.me.REG[7] = BOX_NativeString("(void);");
         REGB2 = TAG_Int(7);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_29 = fra.me.REG[6];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_29 = fra.me.REG[7];
         register_static_object(&once_value_29);
-      } else fra.me.REG[6] = once_value_29;
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
-      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
+      } else fra.me.REG[7] = once_value_29;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:397 */
       REGB2 = TAG_Int(3);
-      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:495 */
+      fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_30) {
-        fra.me.REG[6] = BOX_NativeString("val_t NEW_");
+        fra.me.REG[7] = BOX_NativeString("val_t NEW_");
         REGB2 = TAG_Int(10);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_30 = fra.me.REG[6];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_30 = fra.me.REG[7];
         register_static_object(&once_value_30);
-      } else fra.me.REG[6] = once_value_30;
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
-      fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
+      } else fra.me.REG[7] = once_value_30;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+      fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
       if (!once_value_31) {
-        fra.me.REG[6] = BOX_NativeString("(void)");
+        fra.me.REG[7] = BOX_NativeString("(void)");
         REGB2 = TAG_Int(6);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_31 = fra.me.REG[6];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_31 = fra.me.REG[7];
         register_static_object(&once_value_31);
-      } else fra.me.REG[6] = once_value_31;
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
-      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:496 */
+      } else fra.me.REG[7] = once_value_31;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:398 */
       if (!once_value_32) {
-        fra.me.REG[7] = BOX_NativeString("{");
+        fra.me.REG[5] = BOX_NativeString("{");
         REGB2 = TAG_Int(1);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_32 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_32 = fra.me.REG[5];
         register_static_object(&once_value_32);
-      } else fra.me.REG[7] = once_value_32;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./compiling//compiling_global.nit:497 */
+      } else fra.me.REG[5] = once_value_32;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:399 */
       CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:498 */
+      /* ./compiling//compiling_global.nit:400 */
       if (!once_value_33) {
-        fra.me.REG[7] = BOX_NativeString("obj_t obj;");
+        fra.me.REG[5] = BOX_NativeString("obj_t obj;");
         REGB2 = TAG_Int(10);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_33 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_33 = fra.me.REG[5];
         register_static_object(&once_value_33);
-      } else fra.me.REG[7] = once_value_33;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
+      } else fra.me.REG[5] = once_value_33;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:401 */
       REGB2 = TAG_Int(3);
-      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:499 */
+      fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_34) {
-        fra.me.REG[6] = BOX_NativeString("obj = alloc(sizeof(val_t) * ");
+        fra.me.REG[7] = BOX_NativeString("obj = alloc(sizeof(val_t) * ");
         REGB2 = TAG_Int(28);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_34 = fra.me.REG[6];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_34 = fra.me.REG[7];
         register_static_object(&once_value_34);
-      } else fra.me.REG[6] = once_value_34;
-      array___Array___add(fra.me.REG[7], fra.me.REG[6]);
-      REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+      } else fra.me.REG[7] = once_value_34;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[7]);
       /* ./../lib/standard//collection//array.nit:23 */
+      REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_length");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
       }
       REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+      /* ./compiling//compiling_global.nit:401 */
       fra.me.REG[3] = CALL_string___Object___to_s(REGB2)(REGB2);
-      /* ./compiling//compiling_global.nit:499 */
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
       if (!once_value_35) {
         fra.me.REG[3] = BOX_NativeString(");");
         REGB2 = TAG_Int(2);
@@ -3652,15 +3546,13 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
         once_value_35 = fra.me.REG[3];
         register_static_object(&once_value_35);
       } else fra.me.REG[3] = once_value_35;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
+      fra.me.REG[3] = fra.me.REG[3];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:402 */
       REGB2 = TAG_Int(3);
-      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:500 */
+      fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_36) {
         fra.me.REG[3] = BOX_NativeString("obj->vft = (classtable_elt_t*)VFT_");
         REGB2 = TAG_Int(34);
@@ -3668,10 +3560,11 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
         once_value_36 = fra.me.REG[3];
         register_static_object(&once_value_36);
       } else fra.me.REG[3] = once_value_36;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+      fra.me.REG[3] = fra.me.REG[3];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
       fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
       fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
       if (!once_value_37) {
         fra.me.REG[3] = BOX_NativeString(";");
         REGB2 = TAG_Int(1);
@@ -3679,137 +3572,126 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
         once_value_37 = fra.me.REG[3];
         register_static_object(&once_value_37);
       } else fra.me.REG[3] = once_value_37;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:501 */
+      fra.me.REG[3] = fra.me.REG[3];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:403 */
       if (!once_value_38) {
-        fra.me.REG[7] = BOX_NativeString("obj[1].object_id = object_id_counter;");
+        fra.me.REG[5] = BOX_NativeString("obj[1].object_id = object_id_counter;");
         REGB2 = TAG_Int(37);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_38 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_38 = fra.me.REG[5];
         register_static_object(&once_value_38);
-      } else fra.me.REG[7] = once_value_38;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:502 */
+      } else fra.me.REG[5] = once_value_38;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:404 */
       if (!once_value_39) {
-        fra.me.REG[7] = BOX_NativeString("object_id_counter = object_id_counter + 1;");
+        fra.me.REG[5] = BOX_NativeString("object_id_counter = object_id_counter + 1;");
         REGB2 = TAG_Int(42);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_39 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_39 = fra.me.REG[5];
         register_static_object(&once_value_39);
-      } else fra.me.REG[7] = once_value_39;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:503 */
+      } else fra.me.REG[5] = once_value_39;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:405 */
       if (!once_value_40) {
-        fra.me.REG[7] = BOX_NativeString("return OBJ2VAL(obj);");
+        fra.me.REG[5] = BOX_NativeString("return OBJ2VAL(obj);");
         REGB2 = TAG_Int(20);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_40 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_40 = fra.me.REG[5];
         register_static_object(&once_value_40);
-      } else fra.me.REG[7] = once_value_40;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./compiling//compiling_global.nit:504 */
+      } else fra.me.REG[5] = once_value_40;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:406 */
       CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:505 */
+      /* ./compiling//compiling_global.nit:407 */
       if (!once_value_41) {
-        fra.me.REG[7] = BOX_NativeString("}");
+        fra.me.REG[5] = BOX_NativeString("}");
         REGB2 = TAG_Int(1);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_41 = fra.me.REG[7];
+        fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+        once_value_41 = fra.me.REG[5];
         register_static_object(&once_value_41);
-      } else fra.me.REG[7] = once_value_41;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+      } else fra.me.REG[5] = once_value_41;
+      fra.me.REG[5] = fra.me.REG[5];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:411 */
       REGB2 = TAG_Int(3);
-      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:509 */
+      fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_42) {
-        fra.me.REG[7] = BOX_NativeString("CHECKNEW_");
+        fra.me.REG[3] = BOX_NativeString("CHECKNEW_");
         REGB2 = TAG_Int(9);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_42 = fra.me.REG[7];
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+        once_value_42 = fra.me.REG[3];
         register_static_object(&once_value_42);
-      } else fra.me.REG[7] = once_value_42;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
+      } else fra.me.REG[3] = once_value_42;
+      fra.me.REG[3] = fra.me.REG[3];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+      fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
       if (!once_value_43) {
-        fra.me.REG[7] = BOX_NativeString("");
+        fra.me.REG[3] = BOX_NativeString("");
         REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
-        once_value_43 = fra.me.REG[7];
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+        once_value_43 = fra.me.REG[3];
         register_static_object(&once_value_43);
-      } else fra.me.REG[7] = once_value_43;
-      array___Array___add(fra.me.REG[2], fra.me.REG[7]);
-      fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-      fra.me.REG[7] = ATTR_compiling_global___MMLocalClass____checknew_iroutine(fra.me.REG[0]);
+      } else fra.me.REG[3] = once_value_43;
+      fra.me.REG[3] = fra.me.REG[3];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+      fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+      /* ./compiling//compiling_global.nit:412 */
+      fra.me.REG[3] = CALL_program___MMLocalClass___checknew_iroutine(fra.me.REG[0])(fra.me.REG[0]);
       REGB2 = TAG_Int(3);
-      fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:510 */
+      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_44) {
-        fra.me.REG[6] = BOX_NativeString("check new ");
+        fra.me.REG[4] = BOX_NativeString("check new ");
         REGB2 = TAG_Int(10);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_44 = fra.me.REG[6];
+        fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+        once_value_44 = fra.me.REG[4];
         register_static_object(&once_value_44);
-      } else fra.me.REG[6] = once_value_44;
-      array___Array___add(fra.me.REG[3], fra.me.REG[6]);
-      fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-      array___Array___add(fra.me.REG[3], fra.me.REG[6]);
+      } else fra.me.REG[4] = once_value_44;
+      fra.me.REG[4] = fra.me.REG[4];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+      fra.me.REG[4] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[4] = CALL_string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
       if (!once_value_45) {
-        fra.me.REG[6] = BOX_NativeString("");
+        fra.me.REG[4] = BOX_NativeString("");
         REGB2 = TAG_Int(0);
-        fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-        once_value_45 = fra.me.REG[6];
+        fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
+        once_value_45 = fra.me.REG[4];
         register_static_object(&once_value_45);
-      } else fra.me.REG[6] = once_value_45;
-      array___Array___add(fra.me.REG[3], fra.me.REG[6]);
-      fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-      REGB2 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+      } else fra.me.REG[4] = once_value_45;
+      fra.me.REG[4] = fra.me.REG[4];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
+      REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 510);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 412);
       }
-      fra.me.REG[3] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3], NIT_NULL, NIT_NULL);
-      fra.me.REG[7] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-      fra.me.REG[6] = NEW_CContext_compiling_base___CContext___init();
-      /* ./compiling//compiling_global.nit:512 */
-      CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-      fra.me.REG[6] = ATTR_compiling_global___MMLocalClass____checknew_iroutine(fra.me.REG[0]);
-      REGB2 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-      /* ./compiling//compiling_global.nit:513 */
+      fra.me.REG[7] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1], fra.me.REG[5], fra.me.REG[7], NIT_NULL, NIT_NULL);
+      /* ./compiling//compiling_global.nit:413 */
+      fra.me.REG[3] = CALL_compiling_base___CompilerVisitor___decl_writer(fra.me.REG[1])(fra.me.REG[1]);
+      /* ./compiling//compiling_global.nit:414 */
+      fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___writer(fra.me.REG[1])(fra.me.REG[1]);
+      fra.me.REG[4] = CALL_compiling_writer___Writer___sub(fra.me.REG[4])(fra.me.REG[4]);
+      CALL_compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+      /* ./compiling//compiling_global.nit:415 */
+      fra.me.REG[4] = CALL_program___MMLocalClass___checknew_iroutine(fra.me.REG[0])(fra.me.REG[0]);
+      REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 513);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 415);
       }
-      CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[1], fra.me.REG[2], fra.me.REG[3]);
-      fra.me.REG[3] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-      /* ./compiling//compiling_global.nit:514 */
-      CALL_compiling_base___CContext___append(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
-      /* ./compiling//compiling_global.nit:515 */
-      CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-      /* ./compiling//compiling_global.nit:516 */
+      CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1], fra.me.REG[5], fra.me.REG[7]);
+      /* ./compiling//compiling_global.nit:416 */
+      CALL_compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+      /* ./compiling//compiling_global.nit:417 */
       CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-      REGB2 = TAG_Int(0);
-      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:517 */
+      /* ./compiling//compiling_global.nit:418 */
       if (!once_value_46) {
         fra.me.REG[3] = BOX_NativeString("}");
         REGB2 = TAG_Int(1);
@@ -3817,267 +3699,83 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
         once_value_46 = fra.me.REG[3];
         register_static_object(&once_value_46);
       } else fra.me.REG[3] = once_value_46;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-      fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___cshe(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[7] = CALL_partial_order___PartialOrderElement___greaters(fra.me.REG[7])(fra.me.REG[7]);
-      REGB2 = CALL_abstract_collection___Collection___length(fra.me.REG[7])(fra.me.REG[7]);
+      fra.me.REG[3] = fra.me.REG[3];
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+      /* ./compiling//compiling_global.nit:421 */
+      fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___cshe(fra.me.REG[0])(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_partial_order___PartialOrderElement___greaters(fra.me.REG[3])(fra.me.REG[3]);
+      REGB2 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
       REGB0 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
       REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+      /* ./compiling//compiling_global.nit:422 */
       REGB2 = TAG_Int(5);
-      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-      /* ./compiling//compiling_global.nit:521 */
+      fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB2);
       if (!once_value_47) {
-        fra.me.REG[3] = BOX_NativeString("int init_table[");
+        fra.me.REG[7] = BOX_NativeString("int init_table[");
         REGB2 = TAG_Int(15);
-        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
-        once_value_47 = fra.me.REG[3];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_47 = fra.me.REG[7];
         register_static_object(&once_value_47);
-      } else fra.me.REG[3] = once_value_47;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-      fra.me.REG[3] = CALL_string___Object___to_s(REGB0)(REGB0);
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+      } else fra.me.REG[7] = once_value_47;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+      fra.me.REG[7] = CALL_string___Object___to_s(REGB0)(REGB0);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
       if (!once_value_48) {
-        fra.me.REG[3] = BOX_NativeString("] = {0");
+        fra.me.REG[7] = BOX_NativeString("] = {0");
         REGB2 = TAG_Int(6);
-        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
-        once_value_48 = fra.me.REG[3];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_48 = fra.me.REG[7];
         register_static_object(&once_value_48);
-      } else fra.me.REG[3] = once_value_48;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+      } else fra.me.REG[7] = once_value_48;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
       if (!once_value_49) {
-        fra.me.REG[3] = BOX_NativeString(", 0");
+        fra.me.REG[7] = BOX_NativeString(", 0");
         REGB2 = TAG_Int(3);
-        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
-        once_value_49 = fra.me.REG[3];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_49 = fra.me.REG[7];
         register_static_object(&once_value_49);
-      } else fra.me.REG[3] = once_value_49;
+      } else fra.me.REG[7] = once_value_49;
+      fra.me.REG[7] = fra.me.REG[7];
       REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:217 */
       REGB2 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB2));
-      fra.me.REG[3] = CALL_string___String_____star(fra.me.REG[3])(fra.me.REG[3], REGB2);
-      /* ./compiling//compiling_global.nit:521 */
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
+      /* ./compiling//compiling_global.nit:422 */
+      fra.me.REG[7] = CALL_string___String_____star(fra.me.REG[7])(fra.me.REG[7], REGB2);
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
       if (!once_value_50) {
-        fra.me.REG[3] = BOX_NativeString("};");
+        fra.me.REG[7] = BOX_NativeString("};");
         REGB2 = TAG_Int(2);
-        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
-        once_value_50 = fra.me.REG[3];
+        fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+        once_value_50 = fra.me.REG[7];
         register_static_object(&once_value_50);
-      } else fra.me.REG[3] = once_value_50;
-      array___Array___add(fra.me.REG[7], fra.me.REG[3]);
-      fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-      fra.me.REG[3] = CALL_abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[0])(fra.me.REG[0]);
-      fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-      /* ./compiling//compiling_global.nit:523 */
-      while(1) {
-        REGB2 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-        if (UNTAG_Bool(REGB2)) {
-          fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-          fra.me.REG[2] = CALL_abstractmetamodel___MMLocalClass_____bra(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
-          fra.me.REG[6] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[2])(fra.me.REG[2]);
-          REGB2 = CALL_abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-          REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
-          /* ./compiling//compiling_global.nit:526 */
-          if (UNTAG_Bool(REGB2)) {
-            goto label51;
-          }
-          REGB2 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
-          /* ./compiling//compiling_global.nit:527 */
-          if (UNTAG_Bool(REGB2)) {
-          } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 527);
-            nit_exit(1);
-          }
-          REGB2 = TAG_Int(5);
-          fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-          /* ./compiling//compiling_global.nit:529 */
-          if (!once_value_52) {
-            fra.me.REG[5] = BOX_NativeString("NEW_");
-            REGB2 = TAG_Int(4);
-            fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-            once_value_52 = fra.me.REG[5];
-            register_static_object(&once_value_52);
-          } else fra.me.REG[5] = once_value_52;
-          array___Array___add(fra.me.REG[6], fra.me.REG[5]);
-          fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-          array___Array___add(fra.me.REG[6], fra.me.REG[5]);
-          if (!once_value_53) {
-            fra.me.REG[5] = BOX_NativeString("_");
-            REGB2 = TAG_Int(1);
-            fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-            once_value_53 = fra.me.REG[5];
-            register_static_object(&once_value_53);
-          } else fra.me.REG[5] = once_value_53;
-          array___Array___add(fra.me.REG[6], fra.me.REG[5]);
-          fra.me.REG[5] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[2])(fra.me.REG[2]);
-          fra.me.REG[5] = CALL_abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[5])(fra.me.REG[5]);
-          fra.me.REG[5] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[5])(fra.me.REG[5]);
-          array___Array___add(fra.me.REG[6], fra.me.REG[5]);
-          if (!once_value_54) {
-            fra.me.REG[5] = BOX_NativeString("");
-            REGB2 = TAG_Int(0);
-            fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-            once_value_54 = fra.me.REG[5];
-            register_static_object(&once_value_54);
-          } else fra.me.REG[5] = once_value_54;
-          array___Array___add(fra.me.REG[6], fra.me.REG[5]);
-          fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-          REGB2 = TAG_Bool(ATTR_compiling_global___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
-          /* ./compiling//compiling_global.nit:530 */
-          if (UNTAG_Bool(REGB2)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_new_instance_iroutine");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 530);
-            nit_exit(1);
-          }
-          fra.me.REG[5] = ATTR_compiling_global___MMLocalClass____new_instance_iroutine(fra.me.REG[0]);
-          fra.me.REG[5] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[2]);
-          REGB2 = TAG_Int(5);
-          fra.me.REG[8] = NEW_Array_array___Array___with_capacity(REGB2);
-          if (!once_value_55) {
-            fra.me.REG[9] = BOX_NativeString("new ");
-            REGB2 = TAG_Int(4);
-            fra.me.REG[9] = NEW_String_string___String___with_native(fra.me.REG[9], REGB2);
-            once_value_55 = fra.me.REG[9];
-            register_static_object(&once_value_55);
-          } else fra.me.REG[9] = once_value_55;
-          array___Array___add(fra.me.REG[8], fra.me.REG[9]);
-          fra.me.REG[9] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-          array___Array___add(fra.me.REG[8], fra.me.REG[9]);
-          if (!once_value_56) {
-            fra.me.REG[9] = BOX_NativeString(" ");
-            REGB2 = TAG_Int(1);
-            fra.me.REG[9] = NEW_String_string___String___with_native(fra.me.REG[9], REGB2);
-            once_value_56 = fra.me.REG[9];
-            register_static_object(&once_value_56);
-          } else fra.me.REG[9] = once_value_56;
-          array___Array___add(fra.me.REG[8], fra.me.REG[9]);
-          fra.me.REG[9] = CALL_abstractmetamodel___MMLocalProperty___full_name(fra.me.REG[2])(fra.me.REG[2]);
-          array___Array___add(fra.me.REG[8], fra.me.REG[9]);
-          if (!once_value_57) {
-            fra.me.REG[9] = BOX_NativeString("");
-            REGB2 = TAG_Int(0);
-            fra.me.REG[9] = NEW_String_string___String___with_native(fra.me.REG[9], REGB2);
-            once_value_57 = fra.me.REG[9];
-            register_static_object(&once_value_57);
-          } else fra.me.REG[9] = once_value_57;
-          array___Array___add(fra.me.REG[8], fra.me.REG[9]);
-          fra.me.REG[8] = CALL_string___Object___to_s(fra.me.REG[8])(fra.me.REG[8]);
-          REGB2 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 530);
-            nit_exit(1);
-          }
-          fra.me.REG[8] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1], fra.me.REG[6], fra.me.REG[8], NIT_NULL, NIT_NULL);
-          fra.me.REG[5] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-          fra.me.REG[9] = NEW_CContext_compiling_base___CContext___init();
-          /* ./compiling//compiling_global.nit:532 */
-          CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
-          REGB2 = TAG_Int(0);
-          fra.me.REG[9] = NEW_Array_array___Array___with_capacity(REGB2);
-          /* ./compiling//compiling_global.nit:533 */
-          array___Array___add(fra.me.REG[9], fra.me.REG[7]);
-          CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[9]);
-          REGB2 = TAG_Bool(ATTR_compiling_global___MMLocalClass____new_instance_iroutine(fra.me.REG[0])!=NIT_NULL);
-          /* ./compiling//compiling_global.nit:534 */
-          if (UNTAG_Bool(REGB2)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_new_instance_iroutine");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 534);
-            nit_exit(1);
-          }
-          fra.me.REG[9] = ATTR_compiling_global___MMLocalClass____new_instance_iroutine(fra.me.REG[0]);
-          fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[2]);
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 534);
-            nit_exit(1);
-          }
-          fra.me.REG[8] = CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[6], fra.me.REG[8]);
-          REGB2 = TAG_Bool((fra.me.REG[8]!=NIT_NULL) && VAL_ISA(fra.me.REG[8], COLOR_String, ID_String)) /*cast String*/;
-          if (UNTAG_Bool(REGB2)) {
-          } else {
-            fprintf(stderr, "Cast failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 534);
-            nit_exit(1);
-          }
-          REGB2 = TAG_Int(0);
-          fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
-          REGB2 = TAG_Int(3);
-          fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
-          /* ./compiling//compiling_global.nit:535 */
-          if (!once_value_58) {
-            fra.me.REG[9] = BOX_NativeString("return ");
-            REGB2 = TAG_Int(7);
-            fra.me.REG[9] = NEW_String_string___String___with_native(fra.me.REG[9], REGB2);
-            once_value_58 = fra.me.REG[9];
-            register_static_object(&once_value_58);
-          } else fra.me.REG[9] = once_value_58;
-          array___Array___add(fra.me.REG[2], fra.me.REG[9]);
-          array___Array___add(fra.me.REG[2], fra.me.REG[8]);
-          if (!once_value_59) {
-            fra.me.REG[8] = BOX_NativeString(";");
-            REGB2 = TAG_Int(1);
-            fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB2);
-            once_value_59 = fra.me.REG[8];
-            register_static_object(&once_value_59);
-          } else fra.me.REG[8] = once_value_59;
-          array___Array___add(fra.me.REG[2], fra.me.REG[8]);
-          fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-          array___Array___add(fra.me.REG[6], fra.me.REG[2]);
-          CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-          fra.me.REG[6] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-          /* ./compiling//compiling_global.nit:536 */
-          CALL_compiling_base___CContext___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
-          /* ./compiling//compiling_global.nit:537 */
-          CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-          /* ./compiling//compiling_global.nit:538 */
-          CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-          REGB2 = TAG_Int(0);
-          fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
-          /* ./compiling//compiling_global.nit:539 */
-          if (!once_value_60) {
-            fra.me.REG[6] = BOX_NativeString("}");
-            REGB2 = TAG_Int(1);
-            fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-            once_value_60 = fra.me.REG[6];
-            register_static_object(&once_value_60);
-          } else fra.me.REG[6] = once_value_60;
-          array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-          CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-          label51: while(0);
-        } else {
-          /* ./compiling//compiling_global.nit:523 */
-          goto label61;
-        }
-        CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
-      }
-      label61: while(0);
+      } else fra.me.REG[7] = once_value_50;
+      fra.me.REG[7] = fra.me.REG[7];
+      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
+      fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+      /* ./compiling//compiling_global.nit:424 */
+      fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___global_properties(fra.me.REG[0])(fra.me.REG[0]);
+      CALL_abstract_collection___Collection___iterate(fra.me.REG[7])(fra.me.REG[7], (&(fra.me)), ((fun_t)OC_compiling_global___MMLocalClass___compile_tables_to_c_51));
     } else {
-      REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-      /* ./compiling//compiling_global.nit:541 */
+      /* ./compiling//compiling_global.nit:441 */
+      REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB2)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 541);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 441);
       }
-      REGB2 = CALL_primitive_info___PrimitiveInfo___tagged(fra.me.REG[4])(fra.me.REG[4]);
+      REGB2 = CALL_primitive_info___PrimitiveInfo___tagged(fra.me.REG[2])(fra.me.REG[2]);
       REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
       if (UNTAG_Bool(REGB2)) {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        /* ./compiling//compiling_global.nit:542 */
+        /* ./compiling//compiling_global.nit:442 */
+        REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          fprintf(stderr, "Reciever is null");
-          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 542);
-          nit_exit(1);
+          nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 442);
         }
-        fra.me.REG[4] = CALL_primitive_info___PrimitiveInfo___cname(fra.me.REG[4])(fra.me.REG[4]);
+        fra.me.REG[2] = CALL_primitive_info___PrimitiveInfo___cname(fra.me.REG[2])(fra.me.REG[2]);
+        /* ./compiling//compiling_global.nit:443 */
         REGB2 = TAG_Int(3);
         fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:543 */
         if (!once_value_62) {
           fra.me.REG[7] = BOX_NativeString("struct TBOX_");
           REGB2 = TAG_Int(12);
@@ -4085,10 +3783,11 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
           once_value_62 = fra.me.REG[7];
           register_static_object(&once_value_62);
         } else fra.me.REG[7] = once_value_62;
-        array___Array___add(fra.me.REG[3], fra.me.REG[7]);
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
         fra.me.REG[7] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
         fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-        array___Array___add(fra.me.REG[3], fra.me.REG[7]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
         if (!once_value_63) {
           fra.me.REG[7] = BOX_NativeString("");
           REGB2 = TAG_Int(0);
@@ -4096,78 +3795,80 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
           once_value_63 = fra.me.REG[7];
           register_static_object(&once_value_63);
         } else fra.me.REG[7] = once_value_63;
-        array___Array___add(fra.me.REG[3], fra.me.REG[7]);
+        fra.me.REG[7] = fra.me.REG[7];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[7]);
         fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+        /* ./compiling//compiling_global.nit:444 */
         REGB2 = TAG_Int(5);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:544 */
+        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
         if (!once_value_64) {
-          fra.me.REG[6] = BOX_NativeString("val_t BOX_");
+          fra.me.REG[5] = BOX_NativeString("val_t BOX_");
           REGB2 = TAG_Int(10);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-          once_value_64 = fra.me.REG[6];
+          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+          once_value_64 = fra.me.REG[5];
           register_static_object(&once_value_64);
-        } else fra.me.REG[6] = once_value_64;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
-        fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
+        } else fra.me.REG[5] = once_value_64;
+        fra.me.REG[5] = fra.me.REG[5];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
+        fra.me.REG[5] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
+        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
         if (!once_value_65) {
-          fra.me.REG[6] = BOX_NativeString("(");
+          fra.me.REG[5] = BOX_NativeString("(");
           REGB2 = TAG_Int(1);
-          fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB2);
-          once_value_65 = fra.me.REG[6];
+          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
+          once_value_65 = fra.me.REG[5];
           register_static_object(&once_value_65);
-        } else fra.me.REG[6] = once_value_65;
-        array___Array___add(fra.me.REG[5], fra.me.REG[6]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
+        } else fra.me.REG[5] = once_value_65;
+        fra.me.REG[5] = fra.me.REG[5];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
         if (!once_value_66) {
-          fra.me.REG[4] = BOX_NativeString(" val) {");
+          fra.me.REG[2] = BOX_NativeString(" val) {");
           REGB2 = TAG_Int(7);
-          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
-          once_value_66 = fra.me.REG[4];
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
+          once_value_66 = fra.me.REG[2];
           register_static_object(&once_value_66);
-        } else fra.me.REG[4] = once_value_66;
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[2] = once_value_66;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+        fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        /* ./compiling//compiling_global.nit:545 */
+        /* ./compiling//compiling_global.nit:445 */
         CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+        /* ./compiling//compiling_global.nit:446 */
         REGB2 = TAG_Int(7);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:546 */
+        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
         if (!once_value_67) {
-          fra.me.REG[4] = BOX_NativeString("");
+          fra.me.REG[2] = BOX_NativeString("");
           REGB2 = TAG_Int(0);
-          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
-          once_value_67 = fra.me.REG[4];
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
+          once_value_67 = fra.me.REG[2];
           register_static_object(&once_value_67);
-        } else fra.me.REG[4] = once_value_67;
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+        } else fra.me.REG[2] = once_value_67;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
         if (!once_value_68) {
-          fra.me.REG[4] = BOX_NativeString(" *box = (");
+          fra.me.REG[2] = BOX_NativeString(" *box = (");
           REGB2 = TAG_Int(9);
-          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
-          once_value_68 = fra.me.REG[4];
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
+          once_value_68 = fra.me.REG[2];
           register_static_object(&once_value_68);
-        } else fra.me.REG[4] = once_value_68;
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+        } else fra.me.REG[2] = once_value_68;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
         if (!once_value_69) {
-          fra.me.REG[4] = BOX_NativeString("*)alloc(sizeof(");
+          fra.me.REG[2] = BOX_NativeString("*)alloc(sizeof(");
           REGB2 = TAG_Int(15);
-          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB2);
-          once_value_69 = fra.me.REG[4];
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB2);
+          once_value_69 = fra.me.REG[2];
           register_static_object(&once_value_69);
-        } else fra.me.REG[4] = once_value_69;
-        array___Array___add(fra.me.REG[5], fra.me.REG[4]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+        } else fra.me.REG[2] = once_value_69;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[2]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
         if (!once_value_70) {
           fra.me.REG[3] = BOX_NativeString("));");
           REGB2 = TAG_Int(3);
@@ -4175,15 +3876,13 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
           once_value_70 = fra.me.REG[3];
           register_static_object(&once_value_70);
         } else fra.me.REG[3] = once_value_70;
-        array___Array___add(fra.me.REG[5], fra.me.REG[3]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        fra.me.REG[3] = fra.me.REG[3];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+        fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+        /* ./compiling//compiling_global.nit:447 */
         REGB2 = TAG_Int(3);
-        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:547 */
+        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
         if (!once_value_71) {
           fra.me.REG[3] = BOX_NativeString("box->vft = VFT_");
           REGB2 = TAG_Int(15);
@@ -4191,10 +3890,11 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
           once_value_71 = fra.me.REG[3];
           register_static_object(&once_value_71);
         } else fra.me.REG[3] = once_value_71;
-        array___Array___add(fra.me.REG[5], fra.me.REG[3]);
+        fra.me.REG[3] = fra.me.REG[3];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
         fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass___name(fra.me.REG[0])(fra.me.REG[0]);
         fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
-        array___Array___add(fra.me.REG[5], fra.me.REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
         if (!once_value_72) {
           fra.me.REG[0] = BOX_NativeString(";");
           REGB2 = TAG_Int(1);
@@ -4202,71 +3902,61 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
           once_value_72 = fra.me.REG[0];
           register_static_object(&once_value_72);
         } else fra.me.REG[0] = once_value_72;
-        array___Array___add(fra.me.REG[5], fra.me.REG[0]);
-        fra.me.REG[5] = CALL_string___Object___to_s(fra.me.REG[5])(fra.me.REG[5]);
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        fra.me.REG[0] = fra.me.REG[0];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+        fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:548 */
+        /* ./compiling//compiling_global.nit:448 */
         if (!once_value_73) {
-          fra.me.REG[5] = BOX_NativeString("box->val = val;");
+          fra.me.REG[7] = BOX_NativeString("box->val = val;");
           REGB2 = TAG_Int(15);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-          once_value_73 = fra.me.REG[5];
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_73 = fra.me.REG[7];
           register_static_object(&once_value_73);
-        } else fra.me.REG[5] = once_value_73;
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[7] = once_value_73;
+        fra.me.REG[7] = fra.me.REG[7];
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:549 */
+        /* ./compiling//compiling_global.nit:449 */
         if (!once_value_74) {
-          fra.me.REG[5] = BOX_NativeString("box->object_id = object_id_counter;");
+          fra.me.REG[7] = BOX_NativeString("box->object_id = object_id_counter;");
           REGB2 = TAG_Int(35);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-          once_value_74 = fra.me.REG[5];
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_74 = fra.me.REG[7];
           register_static_object(&once_value_74);
-        } else fra.me.REG[5] = once_value_74;
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[7] = once_value_74;
+        fra.me.REG[7] = fra.me.REG[7];
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:550 */
+        /* ./compiling//compiling_global.nit:450 */
         if (!once_value_75) {
-          fra.me.REG[5] = BOX_NativeString("object_id_counter = object_id_counter + 1;");
+          fra.me.REG[7] = BOX_NativeString("object_id_counter = object_id_counter + 1;");
           REGB2 = TAG_Int(42);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-          once_value_75 = fra.me.REG[5];
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_75 = fra.me.REG[7];
           register_static_object(&once_value_75);
-        } else fra.me.REG[5] = once_value_75;
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[7] = once_value_75;
+        fra.me.REG[7] = fra.me.REG[7];
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:551 */
+        /* ./compiling//compiling_global.nit:451 */
         if (!once_value_76) {
-          fra.me.REG[5] = BOX_NativeString("return OBJ2VAL(box);");
+          fra.me.REG[7] = BOX_NativeString("return OBJ2VAL(box);");
           REGB2 = TAG_Int(20);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-          once_value_76 = fra.me.REG[5];
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_76 = fra.me.REG[7];
           register_static_object(&once_value_76);
-        } else fra.me.REG[5] = once_value_76;
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[7] = once_value_76;
+        fra.me.REG[7] = fra.me.REG[7];
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
-        /* ./compiling//compiling_global.nit:552 */
+        /* ./compiling//compiling_global.nit:452 */
         CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-        REGB2 = TAG_Int(0);
-        fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
-        /* ./compiling//compiling_global.nit:553 */
+        /* ./compiling//compiling_global.nit:453 */
         if (!once_value_77) {
-          fra.me.REG[5] = BOX_NativeString("}");
+          fra.me.REG[7] = BOX_NativeString("}");
           REGB2 = TAG_Int(1);
-          fra.me.REG[5] = NEW_String_string___String___with_native(fra.me.REG[5], REGB2);
-          once_value_77 = fra.me.REG[5];
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          once_value_77 = fra.me.REG[7];
           register_static_object(&once_value_77);
-        } else fra.me.REG[5] = once_value_77;
-        array___Array___add(fra.me.REG[7], fra.me.REG[5]);
+        } else fra.me.REG[7] = once_value_77;
+        fra.me.REG[7] = fra.me.REG[7];
         CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
       }
     }
@@ -4274,6 +3964,192 @@ void compiling_global___MMLocalClass___compile_tables_to_c(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+      void OC_compiling_global___MMLocalClass___compile_tables_to_c_51(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+        struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+        val_t REGB0;
+        fun_t CREG[1];
+        val_t tmp;
+        static val_t once_value_53; /* Once value */
+        static val_t once_value_54; /* Once value */
+        static val_t once_value_55; /* Once value */
+        static val_t once_value_56; /* Once value */
+        static val_t once_value_57; /* Once value */
+        static val_t once_value_58; /* Once value */
+        static val_t once_value_59; /* Once value */
+        static val_t once_value_60; /* Once value */
+        static val_t once_value_61; /* Once value */
+        fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+        fra.me.file = LOCATE_compiling_global;
+        fra.me.line = 0;
+        fra.me.meth = LOCATE_compiling_global___MMLocalClass___compile_tables_to_c;
+        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.closure_ctx = closctx_param;
+        fra.me.closure_funs = CREG;
+        fra.me.REG[0] = p0;
+        CREG[0] = clos_fun0;
+        /* ./compiling//compiling_global.nit:425 */
+        fra.me.REG[0] = CALL_abstractmetamodel___MMLocalClass_____bra(closctx->REG[0])(closctx->REG[0], fra.me.REG[0]);
+        /* ./compiling//compiling_global.nit:427 */
+        fra.me.REG[1] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
+        REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init_for(fra.me.REG[1])(fra.me.REG[1], closctx->REG[0]);
+        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+        if (UNTAG_Bool(REGB0)) {
+          goto label52;
+        }
+        /* ./compiling//compiling_global.nit:428 */
+        REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          nit_abort("Assert failed", NULL, LOCATE_compiling_global, 428);
+        }
+        /* ./compiling//compiling_global.nit:430 */
+        REGB0 = TAG_Int(5);
+        fra.me.REG[1] = NEW_Array_array___Array___with_capacity(REGB0);
+        if (!once_value_53) {
+          fra.me.REG[2] = BOX_NativeString("NEW_");
+          REGB0 = TAG_Int(4);
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+          once_value_53 = fra.me.REG[2];
+          register_static_object(&once_value_53);
+        } else fra.me.REG[2] = once_value_53;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        fra.me.REG[2] = CALL_string___Object___to_s(closctx->REG[0])(closctx->REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        if (!once_value_54) {
+          fra.me.REG[2] = BOX_NativeString("_");
+          REGB0 = TAG_Int(1);
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+          once_value_54 = fra.me.REG[2];
+          register_static_object(&once_value_54);
+        } else fra.me.REG[2] = once_value_54;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        fra.me.REG[2] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
+        fra.me.REG[2] = CALL_abstractmetamodel___MMGlobalProperty___intro(fra.me.REG[2])(fra.me.REG[2]);
+        fra.me.REG[2] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[2])(fra.me.REG[2]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        if (!once_value_55) {
+          fra.me.REG[2] = BOX_NativeString("");
+          REGB0 = TAG_Int(0);
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+          once_value_55 = fra.me.REG[2];
+          register_static_object(&once_value_55);
+        } else fra.me.REG[2] = once_value_55;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+        fra.me.REG[1] = CALL_string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
+        /* ./compiling//compiling_global.nit:431 */
+        fra.me.REG[2] = CALL_program___MMLocalClass___new_instance_iroutine(closctx->REG[0])(closctx->REG[0]);
+        fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        REGB0 = TAG_Int(5);
+        fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+        if (!once_value_56) {
+          fra.me.REG[4] = BOX_NativeString("new ");
+          REGB0 = TAG_Int(4);
+          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+          once_value_56 = fra.me.REG[4];
+          register_static_object(&once_value_56);
+        } else fra.me.REG[4] = once_value_56;
+        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]);
+        fra.me.REG[4] = CALL_string___Object___to_s(closctx->REG[0])(closctx->REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+        if (!once_value_57) {
+          fra.me.REG[4] = BOX_NativeString(" ");
+          REGB0 = TAG_Int(1);
+          fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+          once_value_57 = fra.me.REG[4];
+          register_static_object(&once_value_57);
+        } else fra.me.REG[4] = once_value_57;
+        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]);
+        fra.me.REG[4] = CALL_abstractmetamodel___MMLocalProperty___full_name(fra.me.REG[0])(fra.me.REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+        if (!once_value_58) {
+          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_58 = fra.me.REG[4];
+          register_static_object(&once_value_58);
+        } else fra.me.REG[4] = once_value_58;
+        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]);
+        fra.me.REG[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+          nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 431);
+        }
+        fra.me.REG[3] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[2])(fra.me.REG[2], closctx->REG[1], fra.me.REG[1], fra.me.REG[3], NIT_NULL, NIT_NULL);
+        /* ./compiling//compiling_global.nit:432 */
+        fra.me.REG[2] = CALL_compiling_base___CompilerVisitor___decl_writer(closctx->REG[1])(closctx->REG[1]);
+        /* ./compiling//compiling_global.nit:433 */
+        fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___writer(closctx->REG[1])(closctx->REG[1]);
+        fra.me.REG[4] = CALL_compiling_writer___Writer___sub(fra.me.REG[4])(fra.me.REG[4]);
+        CALL_compiling_base___CompilerVisitor___decl_writer__eq(closctx->REG[1])(closctx->REG[1], fra.me.REG[4]);
+        /* ./compiling//compiling_global.nit:434 */
+        CALL_compiling_base___CompilerVisitor___add_instr(closctx->REG[1])(closctx->REG[1], closctx->REG[3]);
+        /* ./compiling//compiling_global.nit:435 */
+        fra.me.REG[4] = CALL_program___MMLocalClass___new_instance_iroutine(closctx->REG[0])(closctx->REG[0]);
+        fra.me.REG[0] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+        REGB0 = TAG_Bool(fra.me.REG[0]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+          nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 435);
+        }
+        fra.me.REG[3] = CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[0])(fra.me.REG[0], closctx->REG[1], fra.me.REG[1], fra.me.REG[3]);
+        REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_String, ID_String)) /*cast String*/;
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_compiling_global, 435);
+        }
+        /* ./compiling//compiling_global.nit:436 */
+        REGB0 = TAG_Int(3);
+        fra.me.REG[1] = NEW_Array_array___Array___with_capacity(REGB0);
+        if (!once_value_59) {
+          fra.me.REG[0] = BOX_NativeString("return ");
+          REGB0 = TAG_Int(7);
+          fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+          once_value_59 = fra.me.REG[0];
+          register_static_object(&once_value_59);
+        } else fra.me.REG[0] = once_value_59;
+        fra.me.REG[0] = fra.me.REG[0];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+        if (!once_value_60) {
+          fra.me.REG[3] = BOX_NativeString(";");
+          REGB0 = TAG_Int(1);
+          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB0);
+          once_value_60 = fra.me.REG[3];
+          register_static_object(&once_value_60);
+        } else fra.me.REG[3] = once_value_60;
+        fra.me.REG[3] = fra.me.REG[3];
+        CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+        fra.me.REG[1] = CALL_string___Object___to_s(fra.me.REG[1])(fra.me.REG[1]);
+        CALL_compiling_base___CompilerVisitor___add_instr(closctx->REG[1])(closctx->REG[1], fra.me.REG[1]);
+        /* ./compiling//compiling_global.nit:437 */
+        CALL_compiling_base___CompilerVisitor___decl_writer__eq(closctx->REG[1])(closctx->REG[1], fra.me.REG[2]);
+        /* ./compiling//compiling_global.nit:438 */
+        CALL_compiling_base___CompilerVisitor___unindent(closctx->REG[1])(closctx->REG[1]);
+        /* ./compiling//compiling_global.nit:439 */
+        if (!once_value_61) {
+          fra.me.REG[2] = BOX_NativeString("}");
+          REGB0 = TAG_Int(1);
+          fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+          once_value_61 = fra.me.REG[2];
+          register_static_object(&once_value_61);
+        } else fra.me.REG[2] = once_value_61;
+        fra.me.REG[2] = fra.me.REG[2];
+        CALL_compiling_base___CompilerVisitor___add_instr(closctx->REG[1])(closctx->REG[1], fra.me.REG[2]);
+        label52: while(0);
+        stack_frame_head = fra.me.prev;
+        return;
+      }
 void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -4296,7 +4172,7 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
   static val_t once_value_15; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_compiling_global;
-  fra.me.line = 559;
+  fra.me.line = 459;
   fra.me.meth = LOCATE_compiling_global___MMMethod___compile_property_to_c;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
@@ -4311,9 +4187,10 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./compiling//compiling_global.nit:461 */
   fra.me.REG[2] = CALL_icode_base___MMMethod___iroutine(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:462 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:562 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -4328,14 +4205,13 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 562);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_compiling_global, 462);
   }
+  /* ./compiling//compiling_global.nit:464 */
   fra.me.REG[3] = NIT_NULL;
+  /* ./compiling//compiling_global.nit:465 */
   fra.me.REG[4] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./compiling//compiling_global.nit:565 */
   if (UNTAG_Bool(REGB0)) {
     if (!once_value_1) {
       fra.me.REG[4] = BOX_NativeString("int* init_table");
@@ -4344,59 +4220,64 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       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];
     fra.me.REG[3] = fra.me.REG[4];
   }
+  /* ./compiling//compiling_global.nit:466 */
   fra.me.REG[4] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[0])(fra.me.REG[0]);
   fra.me.REG[5] = CALL_abstractmetamodel___MMLocalProperty___full_name(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:566 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 566);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 466);
   }
   fra.me.REG[3] = CALL_compiling_icode___IRoutine___compile_signature_to_c(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[4], fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  fra.me.REG[5] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[4] = NEW_CContext_compiling_base___CContext___init();
-  /* ./compiling//compiling_global.nit:568 */
-  CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-  fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___out_contexts(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./compiling//compiling_global.nit:570 */
-  CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[6] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
-  REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./compiling//compiling_global.nit:573 */
+  /* ./compiling//compiling_global.nit:467 */
+  fra.me.REG[5] = CALL_compiling_base___CompilerVisitor___writer(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:468 */
+  fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___writer(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[4] = CALL_compiling_writer___Writer___sub(fra.me.REG[4])(fra.me.REG[4]);
+  CALL_compiling_base___CompilerVisitor___writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* ./compiling//compiling_global.nit:469 */
+  fra.me.REG[4] = CALL_compiling_base___CompilerVisitor___decl_writer(fra.me.REG[1])(fra.me.REG[1]);
+  /* ./compiling//compiling_global.nit:470 */
+  fra.me.REG[6] = CALL_compiling_base___CompilerVisitor___writer(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[6] = CALL_compiling_writer___Writer___sub(fra.me.REG[6])(fra.me.REG[6]);
+  CALL_compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+  /* ./compiling//compiling_global.nit:472 */
+  fra.me.REG[6] = NIT_NULL;
+  /* ./compiling//compiling_global.nit:473 */
+  fra.me.REG[7] = CALL_abstractmetamodel___MMLocalProperty___global(fra.me.REG[0])(fra.me.REG[0]);
+  REGB0 = CALL_abstractmetamodel___MMGlobalProperty___is_init(fra.me.REG[7])(fra.me.REG[7]);
   if (UNTAG_Bool(REGB0)) {
+    /* ./compiling//compiling_global.nit:474 */
     REGB0 = TAG_Int(3);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:574 */
+    fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB0);
     if (!once_value_2) {
-      fra.me.REG[7] = BOX_NativeString("itpos");
+      fra.me.REG[8] = BOX_NativeString("itpos");
       REGB0 = TAG_Int(5);
-      fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB0);
-      once_value_2 = fra.me.REG[7];
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      once_value_2 = fra.me.REG[8];
       register_static_object(&once_value_2);
-    } else fra.me.REG[7] = once_value_2;
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
+    } else fra.me.REG[8] = once_value_2;
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     REGB0 = CALL_compiling_base___CompilerVisitor___new_number(fra.me.REG[1])(fra.me.REG[1]);
-    fra.me.REG[7] = CALL_string___Object___to_s(REGB0)(REGB0);
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
+    fra.me.REG[8] = CALL_string___Object___to_s(REGB0)(REGB0);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     if (!once_value_3) {
-      fra.me.REG[7] = BOX_NativeString("");
+      fra.me.REG[8] = BOX_NativeString("");
       REGB0 = TAG_Int(0);
-      fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB0);
-      once_value_3 = fra.me.REG[7];
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      once_value_3 = fra.me.REG[8];
       register_static_object(&once_value_3);
-    } else fra.me.REG[7] = once_value_3;
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-    fra.me.REG[6] = CALL_string___Object___to_s(fra.me.REG[6])(fra.me.REG[6]);
-    fra.me.REG[4] = fra.me.REG[6];
-    REGB0 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB0);
+    } else fra.me.REG[8] = once_value_3;
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
+    fra.me.REG[6] = fra.me.REG[7];
+    /* ./compiling//compiling_global.nit:475 */
     REGB0 = TAG_Int(7);
     fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:575 */
     if (!once_value_4) {
       fra.me.REG[8] = BOX_NativeString("int ");
       REGB0 = TAG_Int(4);
@@ -4404,8 +4285,9 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_4 = fra.me.REG[8];
       register_static_object(&once_value_4);
     } else fra.me.REG[8] = once_value_4;
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
     if (!once_value_5) {
       fra.me.REG[8] = BOX_NativeString(" = VAL2OBJ(");
       REGB0 = TAG_Int(11);
@@ -4413,9 +4295,10 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_5 = fra.me.REG[8];
       register_static_object(&once_value_5);
     } else fra.me.REG[8] = once_value_5;
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     fra.me.REG[8] = CALL_abstract_collection___Collection___first(fra.me.REG[3])(fra.me.REG[3]);
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     if (!once_value_6) {
       fra.me.REG[8] = BOX_NativeString(")->vft[");
       REGB0 = TAG_Int(7);
@@ -4423,11 +4306,12 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_6 = fra.me.REG[8];
       register_static_object(&once_value_6);
     } else fra.me.REG[8] = once_value_6;
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     fra.me.REG[8] = CALL_abstractmetamodel___MMLocalProperty___local_class(fra.me.REG[0])(fra.me.REG[0]);
     fra.me.REG[8] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[8])(fra.me.REG[8]);
     fra.me.REG[8] = CALL_compiling_base___MMGlobalClass___init_table_pos_id(fra.me.REG[8])(fra.me.REG[8]);
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     if (!once_value_7) {
       fra.me.REG[8] = BOX_NativeString("].i;");
       REGB0 = TAG_Int(4);
@@ -4435,15 +4319,13 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_7 = fra.me.REG[8];
       register_static_object(&once_value_7);
     } else fra.me.REG[8] = once_value_7;
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
-    REGB0 = TAG_Int(0);
-    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB0);
+    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+    /* ./compiling//compiling_global.nit:476 */
     REGB0 = TAG_Int(3);
     fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:576 */
     if (!once_value_8) {
       fra.me.REG[8] = BOX_NativeString("if (init_table[");
       REGB0 = TAG_Int(15);
@@ -4451,8 +4333,9 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_8 = fra.me.REG[8];
       register_static_object(&once_value_8);
     } else fra.me.REG[8] = once_value_8;
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
-    array___Array___add(fra.me.REG[7], fra.me.REG[4]);
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[6]);
     if (!once_value_9) {
       fra.me.REG[8] = BOX_NativeString("]) return;");
       REGB0 = TAG_Int(10);
@@ -4460,63 +4343,60 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_9 = fra.me.REG[8];
       register_static_object(&once_value_9);
     } else fra.me.REG[8] = once_value_9;
-    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    fra.me.REG[8] = fra.me.REG[8];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
     fra.me.REG[7] = CALL_string___Object___to_s(fra.me.REG[7])(fra.me.REG[7]);
-    array___Array___add(fra.me.REG[6], fra.me.REG[7]);
-    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[6]);
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
   }
+  /* ./compiling//compiling_global.nit:479 */
   fra.me.REG[0] = CALL_compiling_base___MMLocalProperty___cname(fra.me.REG[0])(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:579 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 579);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_compiling_global, 479);
   }
   fra.me.REG[3] = CALL_compiling_icode___IRoutine___compile_to_c(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1], fra.me.REG[0], fra.me.REG[3]);
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:581 */
+  /* ./compiling//compiling_global.nit:481 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    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[4])(fra.me.REG[4], NIT_NULL);
+      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_Int(0);
-    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:482 */
     REGB0 = TAG_Int(3);
-    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:582 */
+    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
     if (!once_value_10) {
-      fra.me.REG[6] = BOX_NativeString("init_table[");
+      fra.me.REG[2] = BOX_NativeString("init_table[");
       REGB0 = TAG_Int(11);
-      fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
-      once_value_10 = fra.me.REG[6];
+      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
+      once_value_10 = fra.me.REG[2];
       register_static_object(&once_value_10);
-    } else fra.me.REG[6] = once_value_10;
-    array___Array___add(fra.me.REG[2], fra.me.REG[6]);
-    array___Array___add(fra.me.REG[2], fra.me.REG[4]);
+    } else fra.me.REG[2] = once_value_10;
+    fra.me.REG[2] = fra.me.REG[2];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6]);
     if (!once_value_11) {
-      fra.me.REG[4] = BOX_NativeString("] = 1;");
+      fra.me.REG[6] = BOX_NativeString("] = 1;");
       REGB0 = TAG_Int(6);
-      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
-      once_value_11 = fra.me.REG[4];
+      fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
+      once_value_11 = fra.me.REG[6];
       register_static_object(&once_value_11);
-    } else fra.me.REG[4] = once_value_11;
-    array___Array___add(fra.me.REG[2], fra.me.REG[4]);
-    fra.me.REG[2] = CALL_string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
-    array___Array___add(fra.me.REG[0], fra.me.REG[2]);
+    } else fra.me.REG[6] = once_value_11;
+    fra.me.REG[6] = fra.me.REG[6];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6]);
+    fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
+  /* ./compiling//compiling_global.nit:484 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./compiling//compiling_global.nit:584 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -4529,31 +4409,30 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Int(0);
-    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:585 */
+    /* ./compiling//compiling_global.nit:485 */
     if (!once_value_12) {
-      fra.me.REG[2] = BOX_NativeString("return;");
+      fra.me.REG[0] = BOX_NativeString("return;");
       REGB0 = TAG_Int(7);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
-      once_value_12 = fra.me.REG[2];
+      fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+      once_value_12 = fra.me.REG[0];
       register_static_object(&once_value_12);
-    } else fra.me.REG[2] = once_value_12;
-    array___Array___add(fra.me.REG[0], fra.me.REG[2]);
+    } else fra.me.REG[0] = once_value_12;
+    fra.me.REG[0] = fra.me.REG[0];
     CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   } else {
-    REGB0 = TAG_Int(2);
+    /* ./compiling//compiling_global.nit:487 */
+    REGB0 = TAG_Int(3);
     fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
-    /* ./compiling//compiling_global.nit:587 */
     if (!once_value_13) {
-      fra.me.REG[2] = BOX_NativeString("return ");
+      fra.me.REG[6] = BOX_NativeString("return ");
       REGB0 = TAG_Int(7);
-      fra.me.REG[2] = NEW_String_string___String___with_native(fra.me.REG[2], REGB0);
-      once_value_13 = fra.me.REG[2];
+      fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
+      once_value_13 = fra.me.REG[6];
       register_static_object(&once_value_13);
-    } else fra.me.REG[2] = once_value_13;
-    array___Array___add(fra.me.REG[0], fra.me.REG[2]);
-    array___Array___add(fra.me.REG[0], fra.me.REG[3]);
+    } else fra.me.REG[6] = once_value_13;
+    fra.me.REG[6] = fra.me.REG[6];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[3]);
     if (!once_value_14) {
       fra.me.REG[3] = BOX_NativeString(";");
       REGB0 = TAG_Int(1);
@@ -4561,19 +4440,14 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
       once_value_14 = fra.me.REG[3];
       register_static_object(&once_value_14);
     } else fra.me.REG[3] = once_value_14;
-    array___Array___add(fra.me.REG[0], fra.me.REG[3]);
+    fra.me.REG[3] = fra.me.REG[3];
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[3]);
+    fra.me.REG[0] = CALL_string___Object___to_s(fra.me.REG[0])(fra.me.REG[0]);
     CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  fra.me.REG[0] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./compiling//compiling_global.nit:590 */
-  CALL_compiling_base___CContext___append(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./compiling//compiling_global.nit:591 */
-  CALL_compiling_base___CompilerVisitor___ctx__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  /* ./compiling//compiling_global.nit:592 */
+  /* ./compiling//compiling_global.nit:489 */
   CALL_compiling_base___CompilerVisitor___unindent(fra.me.REG[1])(fra.me.REG[1]);
-  REGB0 = TAG_Int(0);
-  fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./compiling//compiling_global.nit:593 */
+  /* ./compiling//compiling_global.nit:490 */
   if (!once_value_15) {
     fra.me.REG[0] = BOX_NativeString("}");
     REGB0 = TAG_Int(1);
@@ -4581,23 +4455,12 @@ void compiling_global___MMMethod___compile_property_to_c(val_t p0, val_t p1){
     once_value_15 = fra.me.REG[0];
     register_static_object(&once_value_15);
   } else fra.me.REG[0] = once_value_15;
-  array___Array___add(fra.me.REG[5], fra.me.REG[0]);
-  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
-  fra.me.REG[5] = CALL_compiling_base___CompilerVisitor___out_contexts(fra.me.REG[1])(fra.me.REG[1]);
-  fra.me.REG[5] = CALL_abstract_collection___Collection___iterator(fra.me.REG[5])(fra.me.REG[5]);
-  /* ./compiling//compiling_global.nit:595 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[5])(fra.me.REG[5]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[0] = CALL_abstract_collection___Iterator___item(fra.me.REG[5])(fra.me.REG[5]);
-      fra.me.REG[3] = CALL_compiling_base___CompilerVisitor___ctx(fra.me.REG[1])(fra.me.REG[1]);
-      CALL_compiling_base___CContext___merge(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    } else {
-      goto label16;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[5])(fra.me.REG[5]);
-  }
-  label16: while(0);
+  fra.me.REG[0] = fra.me.REG[0];
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:492 */
+  CALL_compiling_base___CompilerVisitor___writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[5]);
+  /* ./compiling//compiling_global.nit:493 */
+  CALL_compiling_base___CompilerVisitor___decl_writer__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
   stack_frame_head = fra.me.prev;
   return;
 }