gc: show default GC on warnings
[nit.git] / c_src / compiling_global._sep.c
index 3bdb16e..19d0bb3 100644 (file)
 /* This C file is generated by NIT to compile module compiling_global. */
 #include "compiling_global._sep.h"
-val_t compiling_global___ColorContext___color(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 28, LOCATE_compiling_global___ColorContext___color};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_compiling_global___ColorContext____colors(variable[3]) /*ColorContext::_colors*/;
-  variable[3] = CALL_abstract_collection___Map_____bra(variable[3])(variable[3],  variable[1] /*e*/) /*CoupleMap::[]*/;
-  variable[2] = variable[3];
-  goto return_label0;
-  return_label0: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___ColorContext___has_color(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 34, LOCATE_compiling_global___ColorContext___has_color};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_compiling_global___ColorContext____colors(variable[3]) /*ColorContext::_colors*/;
-  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[3] ==  NIT_NULL /*null*/) || ((variable[3] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[3])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[3])(variable[3],  NIT_NULL /*null*/) /*Object::==*/)))))));
-  variable[4] = variable[3];
-  if (UNTAG_Bool(variable[4])) { /* and */
-    variable[4] = variable[0];
-    variable[4] = ATTR_compiling_global___ColorContext____colors(variable[4]) /*ColorContext::_colors*/;
-    variable[4] = CALL_abstract_collection___Map___has_key(variable[4])(variable[4],  variable[1] /*e*/) /*CoupleMap::has_key*/;
-  }
-  variable[3] = variable[4];
-  variable[2] = variable[3];
-  goto return_label1;
-  return_label1: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-void compiling_global___ColorContext___color__eq(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 40, LOCATE_compiling_global___ColorContext___color__eq};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = variable[0];
-  variable[4] = ATTR_compiling_global___ColorContext____colors(variable[4]) /*ColorContext::_colors*/;
-  variable[4] = TAG_Bool((variable[4] ==  NIT_NULL /*null*/) || ((variable[4] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[4])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[4])(variable[4],  NIT_NULL /*null*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[4] = variable[0];
-    variable[5] = NEW_HashMap_hash___HashMap___init(); /*new HashMap[TableElt, Int]*/
-    ATTR_compiling_global___ColorContext____colors(variable[4]) /*ColorContext::_colors*/ = variable[5];
-  }
-  variable[4] = variable[0];
-  variable[4] = ATTR_compiling_global___ColorContext____colors(variable[4]) /*ColorContext::_colors*/;
-  CALL_abstract_collection___Map_____braeq(variable[4])(variable[4],  variable[1] /*e*/,  variable[2] /*c*/) /*HashMap::[]=*/;
-  variable[4] =  variable[2] /*c*/;
-  variable[5] = CALL_compiling_global___TableElt___length( variable[1] /*e*/)( variable[1] /*e*/) /*TableElt::length*/;
-  variable[6] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[5]); /*new Range[Int]*/
-  variable[5] = variable[6];
-  variable[5] = CALL_abstract_collection___Collection___iterator(variable[5])(variable[5]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[6] = CALL_abstract_collection___Iterator___is_ok(variable[5])(variable[5]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = CALL_abstract_collection___Iterator___item(variable[5])(variable[5]) /*Iterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = variable[0];
-    variable[8] = ATTR_compiling_global___ColorContext____colors(variable[8]) /*ColorContext::_colors*/;
-    variable[9] = CALL_compiling_global___TableElt___item( variable[1] /*e*/)( variable[1] /*e*/,  variable[7] /*i*/) /*TableElt::item*/;
-    CALL_abstract_collection___Map_____braeq(variable[8])(variable[8], variable[9],  variable[4] /*idx*/) /*HashMap::[]=*/;
-    variable[8] = TAG_Int(UNTAG_Int( variable[4] /*idx*/)+UNTAG_Int( TAG_Int(1)));
-    variable[4] = variable[8] /*idx=*/;
-    continue_3: while(0);
-    CALL_abstract_collection___Iterator___next(variable[5])(variable[5]) /*Iterator::next*/;
+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);
   }
-  break_3: while(0);
-  return_label2: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___ColorContext___init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 0, LOCATE_compiling_global___ColorContext___init};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___GlobalAnalysis___compiled_classes(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 56, LOCATE_compiling_global___GlobalAnalysis___compiled_classes};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___GlobalAnalysis____compiled_classes( self) /*GlobalAnalysis::_compiled_classes*/;
-}
-val_t compiling_global___GlobalAnalysis___module(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 59, LOCATE_compiling_global___GlobalAnalysis___module};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___GlobalAnalysis____module( self) /*GlobalAnalysis::_module*/;
-}
-val_t compiling_global___GlobalAnalysis___max_class_table_length(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 62, LOCATE_compiling_global___GlobalAnalysis___max_class_table_length};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___GlobalAnalysis____max_class_table_length( self) /*GlobalAnalysis::_max_class_table_length*/;
-}
-void compiling_global___GlobalAnalysis___max_class_table_length__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 62, LOCATE_compiling_global___GlobalAnalysis___max_class_table_length__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___GlobalAnalysis____max_class_table_length( self) /*GlobalAnalysis::_max_class_table_length*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___GlobalAnalysis___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 65, LOCATE_compiling_global___GlobalAnalysis___init};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_GlobalAnalysis].i]) return;
-  variable[3] = variable[0];
-  variable[4] = NEW_HashMap_hash___HashMap___init(); /*new HashMap[MMGlobalClass, CompiledClass]*/
-  ATTR_compiling_global___GlobalAnalysis____compiled_classes(variable[3]) /*GlobalAnalysis::_compiled_classes*/ = variable[4];
-  variable[3] = variable[0];
-  ATTR_compiling_global___GlobalAnalysis____module(variable[3]) /*GlobalAnalysis::_module*/ =  variable[1] /*module*/;
-  return_label4: while(false);
-  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_GlobalAnalysis].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___CompilerVisitor___global_analysis(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 73, LOCATE_compiling_global___CompilerVisitor___global_analysis};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompilerVisitor____global_analysis( self) /*CompilerVisitor::_global_analysis*/;
-}
-void compiling_global___CompilerVisitor___global_analysis__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 73, LOCATE_compiling_global___CompilerVisitor___global_analysis__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___CompilerVisitor____global_analysis( self) /*CompilerVisitor::_global_analysis*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___CompiledClass___local_class(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 80, LOCATE_compiling_global___CompiledClass___local_class};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompiledClass____local_class( self) /*CompiledClass::_local_class*/;
-}
-val_t compiling_global___CompiledClass___id(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 83, LOCATE_compiling_global___CompiledClass___id};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompiledClass____id( self) /*CompiledClass::_id*/;
-}
-void compiling_global___CompiledClass___id__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 83, LOCATE_compiling_global___CompiledClass___id__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___CompiledClass____id( self) /*CompiledClass::_id*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___CompiledClass___class_table(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 86, LOCATE_compiling_global___CompiledClass___class_table};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompiledClass____class_table( self) /*CompiledClass::_class_table*/;
-}
-void compiling_global___CompiledClass___class_table__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 86, LOCATE_compiling_global___CompiledClass___class_table__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___CompiledClass____class_table( self) /*CompiledClass::_class_table*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___CompiledClass___instance_table(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 89, LOCATE_compiling_global___CompiledClass___instance_table};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompiledClass____instance_table( self) /*CompiledClass::_instance_table*/;
-}
-void compiling_global___CompiledClass___instance_table__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 89, LOCATE_compiling_global___CompiledClass___instance_table__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___CompiledClass____instance_table( self) /*CompiledClass::_instance_table*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___CompiledClass___class_layout(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 92, LOCATE_compiling_global___CompiledClass___class_layout};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompiledClass____class_layout( self) /*CompiledClass::_class_layout*/;
+  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___CompiledClass___class_layout__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 92, LOCATE_compiling_global___CompiledClass___class_layout__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___CompiledClass____class_layout( self) /*CompiledClass::_class_layout*/ =  param0;
-  tracehead = trace.prev;
+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;
 }
-val_t compiling_global___CompiledClass___instance_layout(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 95, LOCATE_compiling_global___CompiledClass___instance_layout};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___CompiledClass____instance_layout( self) /*CompiledClass::_instance_layout*/;
-}
-void compiling_global___CompiledClass___instance_layout__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 95, LOCATE_compiling_global___CompiledClass___instance_layout__eq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  ATTR_compiling_global___CompiledClass____instance_layout( self) /*CompiledClass::_instance_layout*/ =  param0;
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___CompiledClass___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 98, LOCATE_compiling_global___CompiledClass___init};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_CompiledClass].i]) return;
-  variable[3] = variable[0];
-  ATTR_compiling_global___CompiledClass____local_class(variable[3]) /*CompiledClass::_local_class*/ =  variable[1] /*c*/;
-  return_label5: while(false);
-  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_CompiledClass].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___MMSrcLocalClass___class_color_pos(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 102, LOCATE_compiling_global___MMSrcLocalClass___class_color_pos};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___MMSrcLocalClass____class_color_pos( self) /*MMSrcLocalClass::_class_color_pos*/;
-}
-val_t compiling_global___MMSrcLocalClass___class_layout(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 105, LOCATE_compiling_global___MMSrcLocalClass___class_layout};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___MMSrcLocalClass____class_layout( self) /*MMSrcLocalClass::_class_layout*/;
-}
-val_t compiling_global___MMSrcLocalClass___instance_layout(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 108, LOCATE_compiling_global___MMSrcLocalClass___instance_layout};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___MMSrcLocalClass____instance_layout( self) /*MMSrcLocalClass::_instance_layout*/;
-}
-void compiling_global___MMSrcLocalClass___build_layout_in(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 111, LOCATE_compiling_global___MMSrcLocalClass___build_layout_in};
-  val_t variable[12];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = NEW_Array_array___Array___init(); /*new Array[TableElt]*/
-  variable[4] = variable[5];
-  variable[5] = variable[0];
-  ATTR_compiling_global___MMSrcLocalClass____class_layout(variable[5]) /*MMSrcLocalClass::_class_layout*/ =  variable[4] /*clt*/;
-  variable[6] = NEW_Array_array___Array___init(); /*new Array[TableElt]*/
-  variable[5] = variable[6];
-  variable[6] = variable[0];
-  ATTR_compiling_global___MMSrcLocalClass____instance_layout(variable[6]) /*MMSrcLocalClass::_instance_layout*/ =  variable[5] /*ilt*/;
-  variable[6] = variable[0];
-  variable[6] = CALL_abstractmetamodel___MMLocalClass___global(variable[6])(variable[6]) /*MMLocalClass::global*/;
-  variable[6] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[6])(variable[6]) /*MMGlobalClass::intro*/;
-  variable[7] = variable[0];
-  variable[6] = TAG_Bool((variable[6] == variable[7]) || ((variable[6] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[6])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[6],variable[7])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[6])(variable[6], variable[7]) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = variable[0];
-    variable[7] = NEW_TableEltClassId_compiling_global___AbsTableEltClass___init(variable[6]); /*new TableEltClassId*/
-    variable[6] = variable[7];
-    CALL_abstract_collection___SimpleCollection___add( variable[2] /*module_table*/)( variable[2] /*module_table*/, variable[6]) /*AbstractArray::add*/;
-    variable[6] = variable[0];
-    variable[7] = variable[0];
-    variable[8] = NEW_TableEltClassColor_compiling_global___AbsTableEltClass___init(variable[7]); /*new TableEltClassColor*/
-    variable[7] = variable[8];
-    ATTR_compiling_global___MMSrcLocalClass____class_color_pos(variable[6]) /*MMSrcLocalClass::_class_color_pos*/ = variable[7];
-    variable[6] = variable[0];
-    variable[6] = ATTR_compiling_global___MMSrcLocalClass____class_color_pos(variable[6]) /*MMSrcLocalClass::_class_color_pos*/;
-    CALL_abstract_collection___SimpleCollection___add( variable[2] /*module_table*/)( variable[2] /*module_table*/, variable[6]) /*AbstractArray::add*/;
-    variable[6] = variable[0];
-    variable[7] = NEW_TableEltClassInitTable_compiling_global___AbsTableEltClass___init(variable[6]); /*new TableEltClassInitTable*/
-    variable[6] = variable[7];
-    CALL_abstract_collection___SimpleCollection___add( variable[4] /*clt*/)( variable[4] /*clt*/, variable[6]) /*AbstractArray::add*/;
+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;
+  val_t REGB0;
+  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_8; /* Once value */
+        static val_t once_value_9; /* Once value */
+  static val_t once_value_11; /* 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.meth = LOCATE_compiling_global___Program___compile_tables_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = CALL_program___Program___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);
   }
-  variable[6] = variable[0];
-  variable[6] = CALL_syntax_base___MMSrcLocalClass___src_local_properties(variable[6])(variable[6]) /*MMSrcLocalClass::src_local_properties*/;
-  variable[6] = CALL_abstract_collection___Collection___iterator(variable[6])(variable[6]) /*Map::iterator*/;
-  while (true) { /*for*/
-    variable[7] = CALL_abstract_collection___Iterator___is_ok(variable[6])(variable[6]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = CALL_abstract_collection___Iterator___item(variable[6])(variable[6]) /*Iterator::item*/;
-    variable[8] = variable[7];
-    variable[10] = CALL_abstractmetamodel___MMLocalProperty___global( variable[8] /*p*/)( variable[8] /*p*/) /*MMLocalProperty::global*/;
-    variable[9] = variable[10];
-    variable[10] = CALL_abstractmetamodel___MMGlobalProperty___intro( variable[9] /*pg*/)( variable[9] /*pg*/) /*MMGlobalProperty::intro*/;
-    variable[10] = TAG_Bool((variable[10] ==  variable[8] /*p*/) || ((variable[10] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[10])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[10], variable[8] /*p*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[10])(variable[10],  variable[8] /*p*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[10])) { /*if*/
-      variable[10] = TAG_Bool(( variable[8] /*p*/==NIT_NULL) || VAL_ISA( variable[8] /*p*/, COLOR_MMSrcAttribute, ID_MMSrcAttribute)) /*cast MMSrcAttribute*/;
-      if (UNTAG_Bool(variable[10])) { /*if*/
-        variable[10] = NEW_TableEltAttr_compiling_global___TableEltProp___init( variable[8] /*p*/); /*new TableEltAttr*/
-        CALL_abstract_collection___SimpleCollection___add( variable[5] /*ilt*/)( variable[5] /*ilt*/, variable[10]) /*AbstractArray::add*/;
-      } else { /*if*/
-        variable[10] = TAG_Bool(( variable[8] /*p*/==NIT_NULL) || VAL_ISA( variable[8] /*p*/, COLOR_MMSrcMethod, ID_MMSrcMethod)) /*cast MMSrcMethod*/;
-        if (UNTAG_Bool(variable[10])) { /*if*/
-          variable[10] = NEW_TableEltMeth_compiling_global___TableEltProp___init( variable[8] /*p*/); /*new TableEltMeth*/
-          CALL_abstract_collection___SimpleCollection___add( variable[4] /*clt*/)( variable[4] /*clt*/, variable[10]) /*AbstractArray::add*/;
-        }
-      }
-    }
-    variable[10] = TAG_Bool(( variable[8] /*p*/==NIT_NULL) || VAL_ISA( variable[8] /*p*/, COLOR_MMSrcMethod, ID_MMSrcMethod)) /*cast MMSrcMethod*/;
-    variable[11] = variable[10];
-    if (UNTAG_Bool(variable[11])) { /* and */
-      variable[11] = CALL_abstractmetamodel___MMLocalProperty___need_super( variable[8] /*p*/)( variable[8] /*p*/) /*MMLocalProperty::need_super*/;
+  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;
     }
-    variable[10] = variable[11];
-    if (UNTAG_Bool(variable[10])) { /*if*/
-      variable[10] = NEW_TableEltSuper_compiling_global___TableEltProp___init( variable[8] /*p*/); /*new TableEltSuper*/
-      CALL_abstract_collection___SimpleCollection___add( variable[4] /*clt*/)( variable[4] /*clt*/, variable[10]) /*AbstractArray::add*/;
-    }
-    continue_7: while(0);
-    CALL_abstract_collection___Iterator___next(variable[6])(variable[6]) /*Iterator::next*/;
-  }
-  break_7: while(0);
-  variable[6] = CALL_abstract_collection___Collection___is_empty( variable[5] /*ilt*/)( variable[5] /*ilt*/) /*AbstractArray::is_empty*/;
-  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[6])))) { /*if*/
-    variable[7] = NEW_ModuleTableEltGroup_compiling_global___AbsTableElt___init(); /*new ModuleTableEltGroup*/
-    variable[6] = variable[7];
-    variable[7] = CALL_compiling_global___ModuleTableEltGroup___elements( variable[6] /*teg*/)( variable[6] /*teg*/) /*ModuleTableEltGroup::elements*/;
-    CALL_abstract_collection___IndexedCollection___append(variable[7])(variable[7],  variable[5] /*ilt*/) /*IndexedCollection::append*/;
-    CALL_abstract_collection___SimpleCollection___add( variable[2] /*module_table*/)( variable[2] /*module_table*/,  variable[6] /*teg*/) /*AbstractArray::add*/;
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
   }
-  variable[6] = CALL_abstract_collection___Collection___is_empty( variable[4] /*clt*/)( variable[4] /*clt*/) /*AbstractArray::is_empty*/;
-  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[6])))) { /*if*/
-    variable[7] = NEW_ModuleTableEltGroup_compiling_global___AbsTableElt___init(); /*new ModuleTableEltGroup*/
-    variable[6] = variable[7];
-    variable[7] = CALL_compiling_global___ModuleTableEltGroup___elements( variable[6] /*teg*/)( variable[6] /*teg*/) /*ModuleTableEltGroup::elements*/;
-    CALL_abstract_collection___IndexedCollection___append(variable[7])(variable[7],  variable[4] /*clt*/) /*IndexedCollection::append*/;
-    CALL_abstract_collection___SimpleCollection___add( variable[2] /*module_table*/)( variable[2] /*module_table*/,  variable[6] /*teg*/) /*AbstractArray::add*/;
+  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]);
   }
-  return_label6: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___MMSrcModule___local_analysis(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 157, LOCATE_compiling_global___MMSrcModule___local_analysis};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = NEW_Array_array___Array___init(); /*new Array[ModuleTableElt]*/
-  variable[3] = variable[4];
-  variable[4] = variable[0];
-  ATTR_compiling_global___MMSrcModule____local_table(variable[4]) /*MMSrcModule::_local_table*/ =  variable[3] /*lt*/;
-  variable[4] = variable[0];
-  variable[4] = CALL_syntax_base___MMSrcModule___src_local_classes(variable[4])(variable[4]) /*MMSrcModule::src_local_classes*/;
-  variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*Map::iterator*/;
-  while (true) { /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___is_ok(variable[4])(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___item(variable[4])(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    CALL_compiling_global___MMSrcLocalClass___build_layout_in( variable[6] /*c*/)( variable[6] /*c*/,  variable[1] /*tc*/,  variable[3] /*lt*/) /*MMSrcLocalClass::build_layout_in*/;
-    continue_9: while(0);
-    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*Iterator::next*/;
+  label2: while(0);
+  /* ./compiling//compiling_global.nit:45 */
+  if (!once_value_3) {
+    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;
+  fra.me.REG[2] = NEW_Buffer_string___Buffer___from(fra.me.REG[2]);
+  REGB0 = TAG_Int(3);
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:46 */
+  if (!once_value_4) {
+    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]);
+  if (!once_value_6) {
+    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_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]);
+  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]);
+        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];
+          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 */
+        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];
+          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 {
+      /* ./compiling//compiling_global.nit:46 */
+      goto label10;
+    }
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
-  break_9: while(0);
-  return_label8: while(false);
-  tracehead = trace.prev;
+  label10: while(0);
+  /* ./compiling//compiling_global.nit:53 */
+  if (!once_value_11) {
+    fra.me.REG[3] = 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[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]);
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t compiling_global___MMSrcModule___global_analysis(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 167, LOCATE_compiling_global___MMSrcModule___global_analysis};
-  val_t variable[25];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[5] = NEW_GlobalAnalysis_compiling_global___GlobalAnalysis___init(variable[4]); /*new GlobalAnalysis*/
-  variable[4] = variable[5];
-  variable[3] = variable[4];
-  variable[5] = NEW_Array_array___Array___init(); /*new Array[MMLocalClass]*/
-  variable[4] = variable[5];
-  variable[6] = NEW_HashSet_hash___HashSet___init(); /*new HashSet[MMGlobalProperty]*/
-  variable[5] = variable[6];
-  variable[7] = NEW_Array_array___Array___init(); /*new Array[TableElt]*/
-  variable[6] = variable[7];
-  variable[8] = NEW_Array_array___Array___init(); /*new Array[TableElt]*/
-  variable[7] = variable[8];
-  variable[8] = NEW_TableEltClassSelfId_compiling_global___AbsTableElt___init(); /*new TableEltClassSelfId*/
-  CALL_abstract_collection___SimpleCollection___add( variable[6] /*ctab*/)( variable[6] /*ctab*/, variable[8]) /*AbstractArray::add*/;
-  variable[8] = NEW_TableEltVftPointer_compiling_global___AbsTableElt___init(); /*new TableEltVftPointer*/
-  CALL_abstract_collection___SimpleCollection___add( variable[7] /*itab*/)( variable[7] /*itab*/, variable[8]) /*AbstractArray::add*/;
-  variable[9] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-  variable[8] = variable[9];
-  variable[9] =  TAG_Int(3);
-  variable[11] = NEW_Array_array___Array___init(); /*new Array[MMLocalClass]*/
-  variable[10] = variable[11];
-  variable[11] = variable[0];
-  variable[11] = CALL_abstractmetamodel___MMModule___local_classes(variable[11])(variable[11]) /*MMModule::local_classes*/;
-  variable[11] = CALL_abstract_collection___Collection___iterator(variable[11])(variable[11]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[12] = CALL_abstract_collection___Iterator___is_ok(variable[11])(variable[11]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[12])) break; /*for*/
-    variable[12] = CALL_abstract_collection___Iterator___item(variable[11])(variable[11]) /*ArrayIterator::item*/;
-    variable[13] = variable[12];
-    CALL_inheritance___MMLocalClass___compute_super_classes( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::compute_super_classes*/;
-    CALL_abstract_collection___SimpleCollection___add( variable[10] /*classes*/)( variable[10] /*classes*/,  variable[13] /*c*/) /*AbstractArray::add*/;
-    continue_11: while(0);
-    CALL_abstract_collection___Iterator___next(variable[11])(variable[11]) /*ArrayIterator::next*/;
-  }
-  break_11: while(0);
-  variable[11] = NEW_ClassSorter_compiling_global___ClassSorter___init(); /*new ClassSorter*/
-  CALL_sorter___AbstractSorter___sort(variable[11])(variable[11],  variable[10] /*classes*/) /*AbstractSorter::sort*/;
-  variable[11] = CALL_abstract_collection___Collection___iterator( variable[10] /*classes*/)( variable[10] /*classes*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[12] = CALL_abstract_collection___Iterator___is_ok(variable[11])(variable[11]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[12])) break; /*for*/
-    variable[12] = CALL_abstract_collection___Iterator___item(variable[11])(variable[11]) /*ArrayIterator::item*/;
-    variable[13] = variable[12];
-    CALL_inheritance___MMLocalClass___compute_ancestors( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::compute_ancestors*/;
-    CALL_inheritance___MMLocalClass___inherit_global_properties( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::inherit_global_properties*/;
-    variable[15] = NEW_CompiledClass_compiling_global___CompiledClass___init( variable[13] /*c*/); /*new CompiledClass*/
-    variable[14] = variable[15];
-    variable[15] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[3] /*ga*/)( variable[3] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-    variable[16] = CALL_abstractmetamodel___MMLocalClass___global( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::global*/;
-    CALL_abstract_collection___Map_____braeq(variable[15])(variable[15], variable[16],  variable[14] /*cc*/) /*HashMap::[]=*/;
-    variable[16] = CALL_abstractmetamodel___MMLocalClass___global( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::global*/;
-    variable[15] = variable[16];
-    variable[17] = CALL_abstractmetamodel___MMGlobalClass___module( variable[15] /*gc*/)( variable[15] /*gc*/) /*MMGlobalClass::module*/;
-    variable[16] = variable[17];
-    variable[17] = CALL_compiling_base___MMLocalClass___primitive_info( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::primitive_info*/;
-    variable[17] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[17] ==  NIT_NULL /*null*/) || ((variable[17] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[17])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[17], NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[17])(variable[17],  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable[17])) { /*if*/
-      CALL_compiling_global___CompiledClass___id__eq( variable[14] /*cc*/)( variable[14] /*cc*/,  variable[8] /*pclassid*/) /*CompiledClass::id=*/;
-      variable[17] = TAG_Int(UNTAG_Int( variable[8] /*pclassid*/)-UNTAG_Int( TAG_Int(4)));
-      variable[8] = variable[17] /*pclassid=*/;
-    } else { /*if*/
-      CALL_compiling_global___CompiledClass___id__eq( variable[14] /*cc*/)( variable[14] /*cc*/,  variable[9] /*classid*/) /*CompiledClass::id=*/;
-      variable[17] = TAG_Int(UNTAG_Int( variable[9] /*classid*/)+UNTAG_Int( TAG_Int(4)));
-      variable[9] = variable[17] /*classid=*/;
-    }
-    variable[17] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::cshe*/;
-    variable[17] = CALL_partial_order___PartialOrderElement___direct_smallers(variable[17])(variable[17]) /*PartialOrderElement::direct_smallers*/;
-    variable[17] = CALL_abstract_collection___Collection___is_empty(variable[17])(variable[17]) /*AbstractArray::is_empty*/;
-    if (UNTAG_Bool(variable[17])) { /*if*/
-      CALL_abstract_collection___SimpleCollection___add( variable[4] /*smallest_classes*/)( variable[4] /*smallest_classes*/,  variable[13] /*c*/) /*AbstractArray::add*/;
+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;
+  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_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 */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 57;
+  fra.me.meth = LOCATE_compiling_global___Program___compile_main_part;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:60 */
+  if (!once_value_1) {
+    fra.me.REG[3] = 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];
+    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]);
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./compiling//compiling_global.nit:61 */
+  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 */
+  if (!once_value_2) {
+    fra.me.REG[3] = 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];
+    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]);
+  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 */
+  if (!once_value_3) {
+    fra.me.REG[3] = 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];
+    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]);
+  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]);
+  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);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
     }
-    variable[18] = CALL_abstractmetamodel___MMLocalClass___global( variable[13] /*c*/)( variable[13] /*c*/) /*MMLocalClass::global*/;
-    variable[18] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[18])(variable[18]) /*MMGlobalClass::intro*/;
-    variable[17] = variable[18];
-    variable[18] = TAG_Bool(( variable[17] /*bc*/==NIT_NULL) || VAL_ISA( variable[17] /*bc*/, COLOR_MMSrcLocalClass, ID_MMSrcLocalClass)) /*cast MMSrcLocalClass*/;
-    if (!UNTAG_Bool(variable[18])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___MMSrcModule___global_analysis, LOCATE_compiling_global, 219); nit_exit(1);}
-    variable[18] = CALL_compiling_global___MMSrcLocalClass___class_color_pos( variable[17] /*bc*/)( variable[17] /*bc*/) /*MMSrcLocalClass::class_color_pos*/;
-    CALL_abstract_collection___SimpleCollection___add( variable[6] /*ctab*/)( variable[6] /*ctab*/, variable[18]) /*AbstractArray::add*/;
-    continue_12: while(0);
-    CALL_abstract_collection___Iterator___next(variable[11])(variable[11]) /*ArrayIterator::next*/;
   }
-  break_12: while(0);
-  variable[12] = NEW_HashSet_hash___HashSet___init(); /*new HashSet[MMLocalClass]*/
-  variable[11] = variable[12];
-  variable[13] = NEW_HashSet_hash___HashSet___init(); /*new HashSet[MMLocalClass]*/
-  variable[12] = variable[13];
-  variable[13] = CALL_abstract_collection___Collection___iterator( variable[4] /*smallest_classes*/)( variable[4] /*smallest_classes*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[14] = CALL_abstract_collection___Iterator___is_ok(variable[13])(variable[13]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[14])) break; /*for*/
-    variable[14] = CALL_abstract_collection___Iterator___item(variable[13])(variable[13]) /*ArrayIterator::item*/;
-    variable[15] = variable[14];
-    while (true) { /*while*/
-      variable[16] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[15] /*c*/)( variable[15] /*c*/) /*MMLocalClass::cshe*/;
-      variable[16] = CALL_partial_order___PartialOrderElement___direct_greaters(variable[16])(variable[16]) /*PartialOrderElement::direct_greaters*/;
-      variable[16] = CALL_abstract_collection___Collection___length(variable[16])(variable[16]) /*AbstractArray::length*/;
-      variable[16] = TAG_Bool((variable[16])==( TAG_Int(1)));
-      if (!UNTAG_Bool(variable[16])) break; /* while*/
-      variable[16] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[15] /*c*/)( variable[15] /*c*/) /*MMLocalClass::cshe*/;
-      variable[16] = CALL_partial_order___PartialOrderElement___direct_greaters(variable[16])(variable[16]) /*PartialOrderElement::direct_greaters*/;
-      variable[16] = CALL_abstract_collection___Collection___first(variable[16])(variable[16]) /*IndexedCollection::first*/;
-      variable[15] = variable[16] /*c=*/;
-      continue_14: while(0);
+  if (UNTAG_Bool(REGB0)) {
+    /* ./compiling//compiling_global.nit:65 */
+    if (!once_value_4) {
+      fra.me.REG[2] = BOX_NativeString("No main");
+      REGB0 = TAG_Int(7);
+      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;
+    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 */
+    if (!once_value_5) {
+      fra.me.REG[0] = 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];
+      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]);
+    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 */
+    if (!once_value_6) {
+      fra.me.REG[0] = 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];
+      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]);
+    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);
+    REGB0 = TAG_Int(3);
+    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:69 */
+    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[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);
+    if (UNTAG_Bool(REGB0)) {
+      fprintf(stderr, "Reciever is null");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 69);
+      nit_exit(1);
     }
-    break_14: while(0);
-    CALL_abstract_collection___SimpleCollection___add( variable[11] /*crown_classes*/)( variable[11] /*crown_classes*/,  variable[15] /*c*/) /*HashSet::add*/;
-    variable[16] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[15] /*c*/)( variable[15] /*c*/) /*MMLocalClass::cshe*/;
-    variable[16] = CALL_partial_order___PartialOrderElement___greaters_and_self(variable[16])(variable[16]) /*PartialOrderElement::greaters_and_self*/;
-    CALL_abstract_collection___SimpleCollection___add_all( variable[12] /*core_classes*/)( variable[12] /*core_classes*/, variable[16]) /*SimpleCollection::add_all*/;
-    continue_13: while(0);
-    CALL_abstract_collection___Iterator___next(variable[13])(variable[13]) /*ArrayIterator::next*/;
+    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]);
+    if (!once_value_8) {
+      fra.me.REG[3] = 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];
+      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]);
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  break_13: while(0);
-  variable[13] = variable[0];
-  CALL_compiling_global___MMSrcModule___colorize(variable[13])(variable[13],  variable[3] /*ga*/,  variable[6] /*ctab*/,  variable[11] /*crown_classes*/,  TAG_Int(0)) /*MMSrcModule::colorize*/;
-  variable[13] =  TAG_Int(0);
-  variable[14] = CALL_abstract_collection___Collection___iterator( variable[10] /*classes*/)( variable[10] /*classes*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[15] = CALL_abstract_collection___Iterator___is_ok(variable[14])(variable[14]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[15])) break; /*for*/
-    variable[15] = CALL_abstract_collection___Iterator___item(variable[14])(variable[14]) /*ArrayIterator::item*/;
-    variable[16] = variable[15];
-    variable[18] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[3] /*ga*/)( variable[3] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-    variable[19] = CALL_abstractmetamodel___MMLocalClass___global( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::global*/;
-    variable[18] = CALL_abstract_collection___Map_____bra(variable[18])(variable[18], variable[19]) /*CoupleMap::[]*/;
-    variable[17] = variable[18];
-    variable[18] = CALL_abstract_collection___Collection___has( variable[12] /*core_classes*/)( variable[12] /*core_classes*/,  variable[16] /*c*/) /*HashSet::has*/;
-    if (UNTAG_Bool(variable[18])) { /*if*/
-      variable[18] = variable[0];
-      variable[18] = CALL_compiling_global___MMSrcModule___build_tables(variable[18])(variable[18],  variable[3] /*ga*/,  variable[16] /*c*/,  variable[6] /*ctab*/) /*MMSrcModule::build_tables*/;
-      CALL_compiling_global___CompiledClass___class_table__eq( variable[17] /*cc*/)( variable[17] /*cc*/, variable[18]) /*CompiledClass::class_table=*/;
-      variable[18] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-      variable[18] = CALL_abstract_collection___Collection___length(variable[18])(variable[18]) /*AbstractArray::length*/;
-      variable[18] = TAG_Bool(UNTAG_Int( variable[13] /*maxcolor*/)<UNTAG_Int(variable[18]));
-      if (UNTAG_Bool(variable[18])) { /*if*/
-        variable[18] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-        variable[18] = CALL_abstract_collection___Collection___length(variable[18])(variable[18]) /*AbstractArray::length*/;
-        variable[13] = variable[18] /*maxcolor=*/;
-      }
-    } else { /*if*/
-      variable[19] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::cshe*/;
-      variable[19] = CALL_partial_order___PartialOrderElement___direct_greaters(variable[19])(variable[19]) /*PartialOrderElement::direct_greaters*/;
-      variable[19] = CALL_abstract_collection___Collection___first(variable[19])(variable[19]) /*IndexedCollection::first*/;
-      variable[18] = variable[19];
-      variable[20] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[3] /*ga*/)( variable[3] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-      variable[21] = CALL_abstractmetamodel___MMLocalClass___global( variable[18] /*sc*/)( variable[18] /*sc*/) /*MMLocalClass::global*/;
-      variable[20] = CALL_abstract_collection___Map_____bra(variable[20])(variable[20], variable[21]) /*CoupleMap::[]*/;
-      variable[19] = variable[20];
-      variable[20] = CALL_compiling_global___CompiledClass___class_table( variable[19] /*scc*/)( variable[19] /*scc*/) /*CompiledClass::class_table*/;
-      variable[20] = CALL_array___Collection___to_a(variable[20])(variable[20]) /*Collection::to_a*/;
-      CALL_compiling_global___CompiledClass___class_table__eq( variable[17] /*cc*/)( variable[17] /*cc*/, variable[20]) /*CompiledClass::class_table=*/;
-      variable[21] = CALL_abstractmetamodel___MMLocalClass___global( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::global*/;
-      variable[21] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[21])(variable[21]) /*MMGlobalClass::intro*/;
-      variable[20] = variable[21];
-      variable[21] = TAG_Bool(( variable[20] /*bc*/==NIT_NULL) || VAL_ISA( variable[20] /*bc*/, COLOR_MMSrcLocalClass, ID_MMSrcLocalClass)) /*cast MMSrcLocalClass*/;
-      if (!UNTAG_Bool(variable[21])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___MMSrcModule___global_analysis, LOCATE_compiling_global, 252); nit_exit(1);}
-      variable[22] = CALL_compiling_global___MMSrcLocalClass___class_color_pos( variable[20] /*bc*/)( variable[20] /*bc*/) /*MMSrcLocalClass::class_color_pos*/;
-      variable[21] = variable[22];
-      variable[23] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-      variable[23] = CALL_abstract_collection___Collection___length(variable[23])(variable[23]) /*AbstractArray::length*/;
-      variable[22] = variable[23];
-      CALL_compiling_global___ColorContext___color__eq( variable[3] /*ga*/)( variable[3] /*ga*/,  variable[21] /*colpos*/,  variable[22] /*colposcolor*/) /*ColorContext::color=*/;
-      variable[23] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23],  variable[21] /*colpos*/) /*AbstractArray::add*/;
-      variable[23] = TAG_Bool(UNTAG_Int( variable[13] /*maxcolor*/)<UNTAG_Int( variable[22] /*colposcolor*/));
-      if (UNTAG_Bool(variable[23])) { /*if*/
-        variable[13] =  variable[22] /*colposcolor*/ /*maxcolor=*/;
-      }
-    }
-    continue_15: while(0);
-    CALL_abstract_collection___Iterator___next(variable[14])(variable[14]) /*ArrayIterator::next*/;
-  }
-  break_15: while(0);
-  variable[14] = TAG_Int(UNTAG_Int( variable[13] /*maxcolor*/)+UNTAG_Int( TAG_Int(1)));
-  CALL_compiling_global___GlobalAnalysis___max_class_table_length__eq( variable[3] /*ga*/)( variable[3] /*ga*/, variable[14]) /*GlobalAnalysis::max_class_table_length=*/;
-  variable[14] = CALL_abstract_collection___Collection___iterator( variable[10] /*classes*/)( variable[10] /*classes*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[15] = CALL_abstract_collection___Iterator___is_ok(variable[14])(variable[14]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[15])) break; /*for*/
-    variable[15] = CALL_abstract_collection___Iterator___item(variable[14])(variable[14]) /*ArrayIterator::item*/;
-    variable[16] = variable[15];
-    variable[18] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[3] /*ga*/)( variable[3] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-    variable[19] = CALL_abstractmetamodel___MMLocalClass___global( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::global*/;
-    variable[18] = CALL_abstract_collection___Map_____bra(variable[18])(variable[18], variable[19]) /*CoupleMap::[]*/;
-    variable[17] = variable[18];
-    variable[19] = NEW_TableEltComposite_compiling_global___TableEltComposite___init( variable[17] /*cc*/); /*new TableEltComposite*/
-    variable[18] = variable[19];
-    variable[20] = NEW_TableEltComposite_compiling_global___TableEltComposite___init( variable[17] /*cc*/); /*new TableEltComposite*/
-    variable[19] = variable[20];
-    variable[20] = CALL_abstractmetamodel___MMLocalClass___crhe( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::crhe*/;
-    variable[20] = CALL_partial_order___PartialOrderElement___greaters_and_self(variable[20])(variable[20]) /*PartialOrderElement::greaters_and_self*/;
-    variable[20] = CALL_abstract_collection___Collection___iterator(variable[20])(variable[20]) /*Collection::iterator*/;
-    while (true) { /*for*/
-      variable[21] = CALL_abstract_collection___Iterator___is_ok(variable[20])(variable[20]) /*Iterator::is_ok*/;
-      if (!UNTAG_Bool(variable[21])) break; /*for*/
-      variable[21] = CALL_abstract_collection___Iterator___item(variable[20])(variable[20]) /*Iterator::item*/;
-      variable[22] = variable[21];
-      variable[23] = TAG_Bool(( variable[22] /*sc*/==NIT_NULL) || VAL_ISA( variable[22] /*sc*/, COLOR_MMSrcLocalClass, ID_MMSrcLocalClass)) /*cast MMSrcLocalClass*/;
-      if (UNTAG_Bool(variable[23])) { /*if*/
-        variable[23] = CALL_compiling_global___MMSrcLocalClass___class_layout( variable[22] /*sc*/)( variable[22] /*sc*/) /*MMSrcLocalClass::class_layout*/;
-        CALL_compiling_global___TableEltComposite___add( variable[18] /*cte*/)( variable[18] /*cte*/,  variable[22] /*sc*/, variable[23]) /*TableEltComposite::add*/;
-        variable[23] = CALL_compiling_global___MMSrcLocalClass___instance_layout( variable[22] /*sc*/)( variable[22] /*sc*/) /*MMSrcLocalClass::instance_layout*/;
-        CALL_compiling_global___TableEltComposite___add( variable[19] /*ite*/)( variable[19] /*ite*/,  variable[22] /*sc*/, variable[23]) /*TableEltComposite::add*/;
-      }
-      CALL_compiling_global___CompiledClass___class_layout__eq( variable[17] /*cc*/)( variable[17] /*cc*/,  variable[18] /*cte*/) /*CompiledClass::class_layout=*/;
-      CALL_compiling_global___CompiledClass___instance_layout__eq( variable[17] /*cc*/)( variable[17] /*cc*/,  variable[19] /*ite*/) /*CompiledClass::instance_layout=*/;
-      continue_17: while(0);
-      CALL_abstract_collection___Iterator___next(variable[20])(variable[20]) /*Iterator::next*/;
-    }
-    break_17: while(0);
-    variable[20] = CALL_abstract_collection___Collection___has( variable[12] /*core_classes*/)( variable[12] /*core_classes*/,  variable[16] /*c*/) /*HashSet::has*/;
-    if (UNTAG_Bool(variable[20])) { /*if*/
-      variable[20] = CALL_compiling_global___TableElt___length( variable[18] /*cte*/)( variable[18] /*cte*/) /*TableEltComposite::length*/;
-      variable[20] = TAG_Bool(UNTAG_Int(variable[20])>UNTAG_Int( TAG_Int(0)));
-      if (UNTAG_Bool(variable[20])) { /*if*/
-        CALL_abstract_collection___SimpleCollection___add( variable[6] /*ctab*/)( variable[6] /*ctab*/,  variable[18] /*cte*/) /*AbstractArray::add*/;
-      }
-      variable[20] = CALL_compiling_global___TableElt___length( variable[19] /*ite*/)( variable[19] /*ite*/) /*TableEltComposite::length*/;
-      variable[20] = TAG_Bool(UNTAG_Int(variable[20])>UNTAG_Int( TAG_Int(0)));
-      if (UNTAG_Bool(variable[20])) { /*if*/
-        CALL_abstract_collection___SimpleCollection___add( variable[7] /*itab*/)( variable[7] /*itab*/,  variable[19] /*ite*/) /*AbstractArray::add*/;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:71 */
+  if (!once_value_9) {
+    fra.me.REG[0] = 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];
+    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]);
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./compiling//compiling_global.nit:72 */
+  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 */
+  if (!once_value_10) {
+    fra.me.REG[0] = 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];
+    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]);
+  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;
+  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.meth = LOCATE_compiling_global___MMModule___declare_class_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.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  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]);
+    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;
       }
-    }
-    continue_16: while(0);
-    CALL_abstract_collection___Iterator___next(variable[14])(variable[14]) /*ArrayIterator::next*/;
-  }
-  break_16: while(0);
-  variable[14] = variable[0];
-  variable[15] = TAG_Int(UNTAG_Int( variable[13] /*maxcolor*/)+UNTAG_Int( TAG_Int(1)));
-  CALL_compiling_global___MMSrcModule___colorize(variable[14])(variable[14],  variable[3] /*ga*/,  variable[6] /*ctab*/,  variable[11] /*crown_classes*/, variable[15]) /*MMSrcModule::colorize*/;
-  variable[14] = variable[0];
-  CALL_compiling_global___MMSrcModule___colorize(variable[14])(variable[14],  variable[3] /*ga*/,  variable[7] /*itab*/,  variable[11] /*crown_classes*/,  TAG_Int(0)) /*MMSrcModule::colorize*/;
-  CALL_compiling_global___GlobalAnalysis___max_class_table_length__eq( variable[3] /*ga*/)( variable[3] /*ga*/,  TAG_Int(0)) /*GlobalAnalysis::max_class_table_length=*/;
-  variable[14] = CALL_abstract_collection___Collection___iterator( variable[10] /*classes*/)( variable[10] /*classes*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[15] = CALL_abstract_collection___Iterator___is_ok(variable[14])(variable[14]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[15])) break; /*for*/
-    variable[15] = CALL_abstract_collection___Iterator___item(variable[14])(variable[14]) /*ArrayIterator::item*/;
-    variable[16] = variable[15];
-    variable[18] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[3] /*ga*/)( variable[3] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-    variable[19] = CALL_abstractmetamodel___MMLocalClass___global( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::global*/;
-    variable[18] = CALL_abstract_collection___Map_____bra(variable[18])(variable[18], variable[19]) /*CoupleMap::[]*/;
-    variable[17] = variable[18];
-    variable[18] = CALL_abstract_collection___Collection___has( variable[12] /*core_classes*/)( variable[12] /*core_classes*/,  variable[16] /*c*/) /*HashSet::has*/;
-    if (UNTAG_Bool(variable[18])) { /*if*/
-      variable[18] = variable[0];
-      variable[18] = CALL_compiling_global___MMSrcModule___build_tables(variable[18])(variable[18],  variable[3] /*ga*/,  variable[16] /*c*/,  variable[6] /*ctab*/) /*MMSrcModule::build_tables*/;
-      CALL_compiling_global___CompiledClass___class_table__eq( variable[17] /*cc*/)( variable[17] /*cc*/, variable[18]) /*CompiledClass::class_table=*/;
-      variable[18] = variable[0];
-      variable[18] = CALL_compiling_global___MMSrcModule___build_tables(variable[18])(variable[18],  variable[3] /*ga*/,  variable[16] /*c*/,  variable[7] /*itab*/) /*MMSrcModule::build_tables*/;
-      CALL_compiling_global___CompiledClass___instance_table__eq( variable[17] /*cc*/)( variable[17] /*cc*/, variable[18]) /*CompiledClass::instance_table=*/;
-    } else { /*if*/
-      variable[19] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::cshe*/;
-      variable[19] = CALL_partial_order___PartialOrderElement___direct_greaters(variable[19])(variable[19]) /*PartialOrderElement::direct_greaters*/;
-      variable[19] = CALL_abstract_collection___Collection___first(variable[19])(variable[19]) /*IndexedCollection::first*/;
-      variable[18] = variable[19];
-      variable[20] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[3] /*ga*/)( variable[3] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-      variable[21] = CALL_abstractmetamodel___MMLocalClass___global( variable[18] /*sc*/)( variable[18] /*sc*/) /*MMLocalClass::global*/;
-      variable[20] = CALL_abstract_collection___Map_____bra(variable[20])(variable[20], variable[21]) /*CoupleMap::[]*/;
-      variable[19] = variable[20];
-      variable[20] = CALL_compiling_global___CompiledClass___class_table( variable[19] /*scc*/)( variable[19] /*scc*/) /*CompiledClass::class_table*/;
-      variable[20] = CALL_array___Collection___to_a(variable[20])(variable[20]) /*Collection::to_a*/;
-      CALL_compiling_global___CompiledClass___class_table__eq( variable[17] /*cc*/)( variable[17] /*cc*/, variable[20]) /*CompiledClass::class_table=*/;
-      variable[21] = CALL_abstractmetamodel___MMLocalClass___global( variable[16] /*c*/)( variable[16] /*c*/) /*MMLocalClass::global*/;
-      variable[21] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[21])(variable[21]) /*MMGlobalClass::intro*/;
-      variable[20] = variable[21];
-      variable[21] = TAG_Bool(( variable[20] /*bc*/==NIT_NULL) || VAL_ISA( variable[20] /*bc*/, COLOR_MMSrcLocalClass, ID_MMSrcLocalClass)) /*cast MMSrcLocalClass*/;
-      if (!UNTAG_Bool(variable[21])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___MMSrcModule___global_analysis, LOCATE_compiling_global, 304); nit_exit(1);}
-      variable[22] = CALL_compiling_global___MMSrcLocalClass___class_color_pos( variable[20] /*bc*/)( variable[20] /*bc*/) /*MMSrcLocalClass::class_color_pos*/;
-      variable[21] = variable[22];
-      variable[22] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-      variable[23] = CALL_compiling_global___ColorContext___color( variable[3] /*ga*/)( variable[3] /*ga*/,  variable[21] /*colpos*/) /*ColorContext::color*/;
-      CALL_abstract_collection___Map_____braeq(variable[22])(variable[22], variable[23],  variable[21] /*colpos*/) /*Array::[]=*/;
-      while (true) { /*while*/
-        variable[22] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-        variable[22] = CALL_abstract_collection___Collection___length(variable[22])(variable[22]) /*AbstractArray::length*/;
-        variable[22] = TAG_Bool(UNTAG_Int(variable[22])<=UNTAG_Int( variable[13] /*maxcolor*/));
-        if (!UNTAG_Bool(variable[22])) break; /* while*/
-        variable[22] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-        CALL_abstract_collection___SimpleCollection___add(variable[22])(variable[22],  NIT_NULL /*null*/) /*AbstractArray::add*/;
-        continue_19: while(0);
+      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]);
       }
-      break_19: while(0);
-      variable[22] = variable[0];
-      variable[23] = CALL_compiling_global___CompiledClass___class_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_table*/;
-      variable[24] = CALL_compiling_global___CompiledClass___class_layout( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::class_layout*/;
-      CALL_compiling_global___MMSrcModule___append_to_table(variable[22])(variable[22],  variable[3] /*ga*/, variable[23], variable[24]) /*MMSrcModule::append_to_table*/;
-      variable[22] = CALL_compiling_global___CompiledClass___instance_table( variable[19] /*scc*/)( variable[19] /*scc*/) /*CompiledClass::instance_table*/;
-      variable[22] = CALL_array___Collection___to_a(variable[22])(variable[22]) /*Collection::to_a*/;
-      CALL_compiling_global___CompiledClass___instance_table__eq( variable[17] /*cc*/)( variable[17] /*cc*/, variable[22]) /*CompiledClass::instance_table=*/;
-      variable[22] = variable[0];
-      variable[23] = CALL_compiling_global___CompiledClass___instance_table( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::instance_table*/;
-      variable[24] = CALL_compiling_global___CompiledClass___instance_layout( variable[17] /*cc*/)( variable[17] /*cc*/) /*CompiledClass::instance_layout*/;
-      CALL_compiling_global___MMSrcModule___append_to_table(variable[22])(variable[22],  variable[3] /*ga*/, variable[23], variable[24]) /*MMSrcModule::append_to_table*/;
+    } else {
+      /* ./compiling//compiling_global.nit:81 */
+      goto label1;
     }
-    continue_18: while(0);
-    CALL_abstract_collection___Iterator___next(variable[14])(variable[14]) /*ArrayIterator::next*/;
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
   }
-  break_18: while(0);
-  variable[2] =  variable[3] /*ga*/;
-  goto return_label10;
-  return_label10: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-void compiling_global___MMSrcModule___append_to_table(val_t  self, val_t  param0, val_t  param1, val_t  param2) {
-  struct trace_t trace = {NULL, NULL, 319, LOCATE_compiling_global___MMSrcModule___append_to_table};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[5] = CALL_compiling_global___TableElt___length( variable[3] /*cmp*/)( variable[3] /*cmp*/) /*TableEltComposite::length*/;
-  variable[6] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[5]); /*new Range[Int]*/
-  variable[5] = variable[6];
-  variable[5] = CALL_abstract_collection___Collection___iterator(variable[5])(variable[5]) /*Range::iterator*/;
-  while (true) { /*for*/
-    variable[6] = CALL_abstract_collection___Iterator___is_ok(variable[5])(variable[5]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = CALL_abstract_collection___Iterator___item(variable[5])(variable[5]) /*Iterator::item*/;
-    variable[7] = variable[6];
-    variable[9] = CALL_compiling_global___TableElt___item( variable[3] /*cmp*/)( variable[3] /*cmp*/,  variable[7] /*j*/) /*TableEltComposite::item*/;
-    variable[8] = variable[9];
-    variable[9] = CALL_abstract_collection___Collection___length( variable[2] /*table*/)( variable[2] /*table*/) /*AbstractArray::length*/;
-    CALL_compiling_global___ColorContext___color__eq( variable[1] /*cc*/)( variable[1] /*cc*/,  variable[8] /*e*/, variable[9]) /*ColorContext::color=*/;
-    CALL_abstract_collection___SimpleCollection___add( variable[2] /*table*/)( variable[2] /*table*/,  variable[8] /*e*/) /*AbstractArray::add*/;
-    continue_21: while(0);
-    CALL_abstract_collection___Iterator___next(variable[5])(variable[5]) /*Iterator::next*/;
-  }
-  break_21: while(0);
-  return_label20: while(false);
-  tracehead = trace.prev;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t compiling_global___MMSrcModule___build_tables(val_t  self, val_t  param0, val_t  param1, val_t  param2) {
-  struct trace_t trace = {NULL, NULL, 328, LOCATE_compiling_global___MMSrcModule___build_tables};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[6] = NEW_HashMap_hash___HashMap___init(); /*new HashMap[Int, TableElt]*/
-  variable[5] = variable[6];
-  variable[6] =  TAG_Int(0);
-  variable[7] = CALL_abstract_collection___Collection___iterator( variable[3] /*elts*/)( variable[3] /*elts*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[8] = CALL_abstract_collection___Iterator___is_ok(variable[7])(variable[7]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[8])) break; /*for*/
-    variable[8] = CALL_abstract_collection___Iterator___item(variable[7])(variable[7]) /*ArrayIterator::item*/;
-    variable[9] = variable[8];
-    variable[10] = CALL_compiling_global___TableElt___is_related_to( variable[9] /*e*/)( variable[9] /*e*/,  variable[2] /*c*/) /*TableElt::is_related_to*/;
-    if (UNTAG_Bool(variable[10])) { /*if*/
-      variable[11] = CALL_compiling_global___ColorContext___color( variable[1] /*ga*/)( variable[1] /*ga*/,  variable[9] /*e*/) /*ColorContext::color*/;
-      variable[10] = variable[11];
-      variable[12] = CALL_compiling_global___TableElt___length( variable[9] /*e*/)( variable[9] /*e*/) /*TableElt::length*/;
-      variable[12] = TAG_Int(UNTAG_Int( variable[10] /*col*/)+UNTAG_Int(variable[12]));
-      variable[11] = variable[12];
-      CALL_abstract_collection___Map_____braeq( variable[5] /*tab*/)( variable[5] /*tab*/,  variable[10] /*col*/,  variable[9] /*e*/) /*HashMap::[]=*/;
-      variable[12] = TAG_Bool(UNTAG_Int( variable[6] /*len*/)<UNTAG_Int( variable[11] /*l*/));
-      if (UNTAG_Bool(variable[12])) { /*if*/
-        variable[6] =  variable[11] /*l*/ /*len=*/;
-      }
-    }
-    continue_23: while(0);
-    CALL_abstract_collection___Iterator___next(variable[7])(variable[7]) /*ArrayIterator::next*/;
+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;
+  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_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_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.meth = LOCATE_compiling_global___MMModule___compile_mod_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  REGB0 = TAG_Int(3);
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:91 */
+  if (!once_value_1) {
+    fra.me.REG[4] = 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];
+    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]);
+  if (!once_value_2) {
+    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_2 = fra.me.REG[4];
+    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]);
+  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]);
+  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);
+    REGB0 = TAG_Int(3);
+    fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:93 */
+    if (!once_value_3) {
+      fra.me.REG[4] = 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];
+      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]);
+    if (!once_value_4) {
+      fra.me.REG[4] = 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];
+      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]);
+    CALL_compiling_base___CompilerVisitor___add_decl(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  break_23: while(0);
-  variable[8] = NEW_Array_array___Array___init(); /*new Array[TableElt]*/
-  variable[7] = variable[8];
-  variable[8] =  TAG_Int(0);
-  while (true) { /*while*/
-    variable[9] = TAG_Bool(UNTAG_Int( variable[8] /*i*/)<UNTAG_Int( variable[6] /*len*/));
-    if (!UNTAG_Bool(variable[9])) break; /* while*/
-    variable[9] = CALL_abstract_collection___Map___has_key( variable[5] /*tab*/)( variable[5] /*tab*/,  variable[8] /*i*/) /*CoupleMap::has_key*/;
-    if (UNTAG_Bool(variable[9])) { /*if*/
-      variable[10] = CALL_abstract_collection___Map_____bra( variable[5] /*tab*/)( variable[5] /*tab*/,  variable[8] /*i*/) /*CoupleMap::[]*/;
-      variable[9] = variable[10];
-      variable[10] = CALL_compiling_global___TableElt___length( variable[9] /*e*/)( variable[9] /*e*/) /*TableElt::length*/;
-      variable[11] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[10]); /*new Range[Int]*/
-      variable[10] = variable[11];
-      variable[10] = CALL_abstract_collection___Collection___iterator(variable[10])(variable[10]) /*Range::iterator*/;
-      while (true) { /*for*/
-        variable[11] = CALL_abstract_collection___Iterator___is_ok(variable[10])(variable[10]) /*Iterator::is_ok*/;
-        if (!UNTAG_Bool(variable[11])) break; /*for*/
-        variable[11] = CALL_abstract_collection___Iterator___item(variable[10])(variable[10]) /*Iterator::item*/;
-        variable[12] = variable[11];
-        variable[13] = CALL_compiling_global___TableElt___item( variable[9] /*e*/)( variable[9] /*e*/,  variable[12] /*j*/) /*TableElt::item*/;
-        CALL_abstract_collection___Map_____braeq( variable[7] /*res*/)( variable[7] /*res*/,  variable[8] /*i*/, variable[13]) /*Array::[]=*/;
-        variable[13] = TAG_Int(UNTAG_Int( variable[8] /*i*/)+UNTAG_Int( TAG_Int(1)));
-        variable[8] = variable[13] /*i=*/;
-        continue_25: while(0);
-        CALL_abstract_collection___Iterator___next(variable[10])(variable[10]) /*Iterator::next*/;
+  REGB0 = TAG_Int(0);
+  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 */
+  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 */
+        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];
+          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]);
+        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];
+          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 {
+        REGB1 = TAG_Int(5);
+        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB1);
+        /* ./compiling//compiling_global.nit:101 */
+        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];
+          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]);
+        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];
+          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]);
+        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];
+          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 */
       }
-      break_25: while(0);
-    } else { /*if*/
-      CALL_abstract_collection___Map_____braeq( variable[7] /*res*/)( variable[7] /*res*/,  variable[8] /*i*/,  NIT_NULL /*null*/) /*Array::[]=*/;
-      variable[9] = TAG_Int(UNTAG_Int( variable[8] /*i*/)+UNTAG_Int( TAG_Int(1)));
-      variable[8] = variable[9] /*i=*/;
+      /* ./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]);
+    } else {
+      /* ./compiling//compiling_global.nit:96 */
+      goto label10;
     }
-    continue_24: while(0);
+    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
   }
-  break_24: while(0);
-  variable[4] =  variable[7] /*res*/;
-  goto return_label22;
-  return_label22: while(false);
-  tracehead = trace.prev;
-  return variable[4];
-}
-void compiling_global___MMSrcModule___colorize(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3) {
-  struct trace_t trace = {NULL, NULL, 359, LOCATE_compiling_global___MMSrcModule___colorize};
-  val_t variable[21];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[3] =  param2;
-  variable[4] =  param3;
-  variable[7] = NEW_HashMap_hash___HashMap___init(); /*new HashMap[Int, Array[TableElt]]*/
-  variable[6] = variable[7];
-  variable[8] = NEW_Array_array___Array___init(); /*new Array[MMLocalClass]*/
-  variable[7] = variable[8];
-  variable[8] = CALL_abstract_collection___Collection___iterator( variable[2] /*elts*/)( variable[2] /*elts*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[9] = CALL_abstract_collection___Iterator___is_ok(variable[8])(variable[8]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[9])) break; /*for*/
-    variable[9] = CALL_abstract_collection___Iterator___item(variable[8])(variable[8]) /*ArrayIterator::item*/;
-    variable[10] = variable[9];
-    variable[12] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-    variable[11] = variable[12];
-    variable[13] = CALL_compiling_global___TableElt___length( variable[10] /*e*/)( variable[10] /*e*/) /*TableElt::length*/;
-    variable[12] = variable[13];
-    variable[13] = CALL_compiling_global___ColorContext___has_color( variable[1] /*ga*/)( variable[1] /*ga*/,  variable[10] /*e*/) /*ColorContext::has_color*/;
-    if (UNTAG_Bool(variable[13])) { /*if*/
-      variable[13] = CALL_compiling_global___ColorContext___color( variable[1] /*ga*/)( variable[1] /*ga*/,  variable[10] /*e*/) /*ColorContext::color*/;
-      variable[11] = variable[13] /*color=*/;
-    } else { /*if*/
-      CALL_abstract_collection___RemovableCollection___clear( variable[7] /*rel_classes*/)( variable[7] /*rel_classes*/) /*AbstractArray::clear*/;
-      variable[13] = CALL_abstract_collection___Collection___iterator( variable[3] /*classes*/)( variable[3] /*classes*/) /*Collection::iterator*/;
-      while (true) { /*for*/
-        variable[14] = CALL_abstract_collection___Iterator___is_ok(variable[13])(variable[13]) /*Iterator::is_ok*/;
-        if (!UNTAG_Bool(variable[14])) break; /*for*/
-        variable[14] = CALL_abstract_collection___Iterator___item(variable[13])(variable[13]) /*Iterator::item*/;
-        variable[15] = variable[14];
-        variable[16] = CALL_compiling_global___TableElt___is_related_to( variable[10] /*e*/)( variable[10] /*e*/,  variable[15] /*c*/) /*TableElt::is_related_to*/;
-        if (UNTAG_Bool(variable[16])) { /*if*/
-          CALL_abstract_collection___SimpleCollection___add( variable[7] /*rel_classes*/)( variable[7] /*rel_classes*/,  variable[15] /*c*/) /*AbstractArray::add*/;
-        }
-        continue_28: while(0);
-        CALL_abstract_collection___Iterator___next(variable[13])(variable[13]) /*Iterator::next*/;
+  label10: while(0);
+  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]);
+    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 */
+      if (UNTAG_Bool(REGB0)) {
+        goto label11;
       }
-      break_28: while(0);
-      variable[13] =  variable[4] /*startcolor*/;
-      while (true) { /*while*/
-        variable[14] = TAG_Bool(( variable[13] /*trycolor*/)!=( variable[11] /*color*/));
-        if (!UNTAG_Bool(variable[14])) break; /* while*/
-        variable[11] =  variable[13] /*trycolor*/ /*color=*/;
-        variable[14] = CALL_abstract_collection___Collection___iterator( variable[7] /*rel_classes*/)( variable[7] /*rel_classes*/) /*AbstractArray::iterator*/;
-        while (true) { /*for*/
-          variable[15] = CALL_abstract_collection___Iterator___is_ok(variable[14])(variable[14]) /*ArrayIterator::is_ok*/;
-          if (!UNTAG_Bool(variable[15])) break; /*for*/
-          variable[15] = CALL_abstract_collection___Iterator___item(variable[14])(variable[14]) /*ArrayIterator::item*/;
-          variable[16] = variable[15];
-          variable[17] =  TAG_Int(0);
-          while (true) { /*while*/
-            variable[18] = TAG_Bool(UNTAG_Int( variable[17] /*idx*/)<UNTAG_Int( variable[12] /*len*/));
-            if (!UNTAG_Bool(variable[18])) break; /* while*/
-            variable[18] = TAG_Int(UNTAG_Int( variable[13] /*trycolor*/)+UNTAG_Int( variable[17] /*idx*/));
-            variable[18] = CALL_abstract_collection___Map___has_key( variable[6] /*colors*/)( variable[6] /*colors*/, variable[18]) /*CoupleMap::has_key*/;
-            variable[19] = variable[18];
-            if (UNTAG_Bool(variable[19])) { /* and */
-              variable[19] = variable[0];
-              variable[20] = TAG_Int(UNTAG_Int( variable[13] /*trycolor*/)+UNTAG_Int( variable[17] /*idx*/));
-              variable[20] = CALL_abstract_collection___Map_____bra( variable[6] /*colors*/)( variable[6] /*colors*/, variable[20]) /*CoupleMap::[]*/;
-              variable[19] = CALL_compiling_global___MMSrcModule___free_color(variable[19])(variable[19], variable[20],  variable[16] /*c*/) /*MMSrcModule::free_color*/;
-              variable[19] =  TAG_Bool(!UNTAG_Bool(variable[19]));
+      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);
             }
-            variable[18] = variable[19];
-            if (UNTAG_Bool(variable[18])) { /*if*/
-              variable[18] = TAG_Int(UNTAG_Int( variable[13] /*trycolor*/)+UNTAG_Int( variable[17] /*idx*/));
-              variable[18] = TAG_Int(UNTAG_Int(variable[18])+UNTAG_Int( TAG_Int(1)));
-              variable[13] = variable[18] /*trycolor=*/;
-              variable[17] =  TAG_Int(0) /*idx=*/;
-            } else { /*if*/
-              variable[18] = TAG_Int(UNTAG_Int( variable[17] /*idx*/)+UNTAG_Int( TAG_Int(1)));
-              variable[17] = variable[18] /*idx=*/;
+            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]);
             }
-            continue_31: while(0);
+            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 (!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];
+              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]);
           }
-          break_31: while(0);
-          continue_30: while(0);
-          CALL_abstract_collection___Iterator___next(variable[14])(variable[14]) /*ArrayIterator::next*/;
+        } else {
+          /* ./compiling//compiling_global.nit:108 */
+          goto label20;
         }
-        break_30: while(0);
-        continue_29: while(0);
+        CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
       }
-      break_29: while(0);
-      CALL_compiling_global___ColorContext___color__eq( variable[1] /*ga*/)( variable[1] /*ga*/,  variable[10] /*e*/,  variable[11] /*color*/) /*ColorContext::color=*/;
-    }
-    variable[13] = NEW_Range_range___Range___without_last( TAG_Int(0),  variable[12] /*len*/); /*new Range[Int]*/
-    variable[13] = CALL_abstract_collection___Collection___iterator(variable[13])(variable[13]) /*Range::iterator*/;
-    while (true) { /*for*/
-      variable[14] = CALL_abstract_collection___Iterator___is_ok(variable[13])(variable[13]) /*Iterator::is_ok*/;
-      if (!UNTAG_Bool(variable[14])) break; /*for*/
-      variable[14] = CALL_abstract_collection___Iterator___item(variable[13])(variable[13]) /*Iterator::item*/;
-      variable[15] = variable[14];
-      variable[16] = TAG_Int(UNTAG_Int( variable[11] /*color*/)+UNTAG_Int( variable[15] /*idx*/));
-      variable[16] = CALL_abstract_collection___Map___has_key( variable[6] /*colors*/)( variable[6] /*colors*/, variable[16]) /*CoupleMap::has_key*/;
-      if (UNTAG_Bool(variable[16])) { /*if*/
-        variable[16] = TAG_Int(UNTAG_Int( variable[11] /*color*/)+UNTAG_Int( variable[15] /*idx*/));
-        variable[16] = CALL_abstract_collection___Map_____bra( variable[6] /*colors*/)( variable[6] /*colors*/, variable[16]) /*CoupleMap::[]*/;
-        CALL_abstract_collection___SimpleCollection___add(variable[16])(variable[16],  variable[10] /*e*/) /*AbstractArray::add*/;
-      } else { /*if*/
-        variable[16] = TAG_Int(UNTAG_Int( variable[11] /*color*/)+UNTAG_Int( variable[15] /*idx*/));
-        variable[17] = NEW_Array_array___Array___with_capacity(TAG_Int(1)); /*new Array[TableElt]*/
-        CALL_abstract_collection___SimpleCollection___add(variable[17])(variable[17],  variable[10] /*e*/) /*AbstractArray::add*/;
-        CALL_abstract_collection___Map_____braeq( variable[6] /*colors*/)( variable[6] /*colors*/, variable[16], variable[17]) /*HashMap::[]=*/;
-      }
-      continue_32: while(0);
-      CALL_abstract_collection___Iterator___next(variable[13])(variable[13]) /*Iterator::next*/;
-    }
-    break_32: while(0);
-    continue_27: while(0);
-    CALL_abstract_collection___Iterator___next(variable[8])(variable[8]) /*ArrayIterator::next*/;
-  }
-  break_27: while(0);
-  return_label26: while(false);
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___MMSrcModule___free_color(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 403, LOCATE_compiling_global___MMSrcModule___free_color};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = CALL_abstract_collection___Collection___iterator( variable[1] /*es*/)( variable[1] /*es*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___is_ok(variable[4])(variable[4]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___item(variable[4])(variable[4]) /*ArrayIterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = CALL_compiling_global___TableElt___is_related_to( variable[6] /*e2*/)( variable[6] /*e2*/,  variable[2] /*c*/) /*TableElt::is_related_to*/;
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[3] =  TAG_Bool(false);
-      goto return_label33;
-    }
-    continue_34: while(0);
-    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*ArrayIterator::next*/;
-  }
-  break_34: while(0);
-  variable[3] =  TAG_Bool(true);
-  goto return_label33;
-  return_label33: while(false);
-  tracehead = trace.prev;
-  return variable[3];
-}
-void compiling_global___MMSrcModule___compile_tables_to_c(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 413, LOCATE_compiling_global___MMSrcModule___compile_tables_to_c};
-  val_t variable[13];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_abstractmetamodel___MMModule___mhe(variable[3])(variable[3]) /*MMModule::mhe*/;
-  variable[3] = CALL_partial_order___PartialOrderElement___greaters_and_self(variable[3])(variable[3]) /*PartialOrderElement::greaters_and_self*/;
-  variable[3] = CALL_abstract_collection___Collection___iterator(variable[3])(variable[3]) /*Collection::iterator*/;
-  while (true) { /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*Iterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = TAG_Bool(( variable[5] /*m*/==NIT_NULL) || VAL_ISA( variable[5] /*m*/, COLOR_MMSrcModule, ID_MMSrcModule)) /*cast MMSrcModule*/;
-    if (!UNTAG_Bool(variable[6])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___MMSrcModule___compile_tables_to_c, LOCATE_compiling_global, 417); nit_exit(1);}
-    CALL_compiling_global___MMSrcModule___compile_local_table_to_c( variable[5] /*m*/)( variable[5] /*m*/,  variable[1] /*v*/) /*MMSrcModule::compile_local_table_to_c*/;
-    continue_36: while(0);
-    CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*Iterator::next*/;
-  }
-  break_36: while(0);
-  variable[3] = variable[0];
-  variable[3] = CALL_abstractmetamodel___MMModule___local_classes(variable[3])(variable[3]) /*MMModule::local_classes*/;
-  variable[3] = CALL_abstract_collection___Collection___iterator(variable[3])(variable[3]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    CALL_compiling_global___MMLocalClass___compile_tables_to_c( variable[5] /*c*/)( variable[5] /*c*/,  variable[1] /*v*/) /*MMLocalClass::compile_tables_to_c*/;
-    continue_37: while(0);
-    CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_37: while(0);
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("classtable_t TAG2VFT[4] = {NULL"), TAG_Int(31)); /*new String*/
-  variable[3] = variable[4];
-  variable[4] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-  variable[5] = NEW_String_string___String___with_native(BOX_NativeString("Int"), TAG_Int(3)); /*new String*/
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[5]) /*AbstractArray::add*/;
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString("Char"), TAG_Int(4)); /*new String*/
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[6]) /*AbstractArray::add*/;
-  variable[7] = NEW_String_string___String___with_native(BOX_NativeString("Bool"), TAG_Int(4)); /*new String*/
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[7]) /*AbstractArray::add*/;
-  variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___is_ok(variable[4])(variable[4]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___item(variable[4])(variable[4]) /*ArrayIterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = variable[0];
-    variable[8] = CALL_symbol___String___to_symbol( variable[6] /*t*/)( variable[6] /*t*/) /*String::to_symbol*/;
-    variable[7] = CALL_abstractmetamodel___MMModule___has_global_class_named(variable[7])(variable[7], variable[8]) /*MMModule::has_global_class_named*/;
-    if (UNTAG_Bool(variable[7])) { /*if*/
-      variable[7] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[8] = NEW_String_string___String___with_native(BOX_NativeString(", (const classtable_t)VFT_"), TAG_Int(26)); /*new String*/
-      variable[9] = variable[8];
-      CALL_abstract_collection___SimpleCollection___add(variable[7])(variable[7], variable[9]) /*AbstractArray::add*/;
-      variable[10] =  variable[6] /*t*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[7])(variable[7], variable[10]) /*AbstractArray::add*/;
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[7])(variable[7], variable[12]) /*AbstractArray::add*/;
-      variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-      CALL_abstract_collection___IndexedCollection___append( variable[3] /*s*/)( variable[3] /*s*/, variable[7]) /*String::append*/;
-    } else { /*if*/
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString(", NULL"), TAG_Int(6)); /*new String*/
-      CALL_abstract_collection___IndexedCollection___append( variable[3] /*s*/)( variable[3] /*s*/, variable[7]) /*String::append*/;
-    }
-    continue_38: while(0);
-    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*ArrayIterator::next*/;
-  }
-  break_38: while(0);
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("};"), TAG_Int(2)); /*new String*/
-  CALL_abstract_collection___IndexedCollection___append( variable[3] /*s*/)( variable[3] /*s*/, variable[4]) /*String::append*/;
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/,  variable[3] /*s*/) /*CompilerVisitor::add_instr*/;
-  return_label35: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___MMSrcModule___declare_class_tables_to_c(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 436, LOCATE_compiling_global___MMSrcModule___declare_class_tables_to_c};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_abstractmetamodel___MMModule___local_classes(variable[3])(variable[3]) /*MMModule::local_classes*/;
-  variable[3] = CALL_abstract_collection___Collection___iterator(variable[3])(variable[3]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = CALL_abstractmetamodel___MMLocalClass___global( variable[5] /*c*/)( variable[5] /*c*/) /*MMLocalClass::global*/;
-    variable[6] = CALL_abstractmetamodel___MMGlobalClass___module(variable[6])(variable[6]) /*MMGlobalClass::module*/;
-    variable[7] = variable[0];
-    variable[6] = TAG_Bool((variable[6] == variable[7]) || ((variable[6] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[6])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[6],variable[7])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[6])(variable[6], variable[7]) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[6])) { /*if*/
-      CALL_compiling_global___MMLocalClass___declare_tables_to_c( variable[5] /*c*/)( variable[5] /*c*/,  variable[1] /*v*/) /*MMLocalClass::declare_tables_to_c*/;
+      label20: while(0);
+      label11: while(0);
+    } else {
+      /* ./compiling//compiling_global.nit:106 */
+      goto label21;
     }
-    continue_40: while(0);
-    CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*ArrayIterator::next*/;
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
   }
-  break_40: while(0);
-  return_label39: while(false);
-  tracehead = trace.prev;
+  label21: while(0);
+  stack_frame_head = fra.me.prev;
   return;
 }
-void compiling_global___MMSrcModule___compile_main_part(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 446, LOCATE_compiling_global___MMSrcModule___compile_main_part};
-  static val_t once_value_42; static int once_bool_42; /* Once value for variable[4]*/
-    static val_t once_value_43; static int once_bool_43; /* Once value for variable[6]*/
-  val_t variable[13];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_String_string___String___with_native(BOX_NativeString("int main(int argc, char **argv) {"), TAG_Int(33)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_instr*/;
-  CALL_compiling_base___CompilerVisitor___indent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::indent*/;
-  variable[3] = NEW_String_string___String___with_native(BOX_NativeString("prepare_signals();"), TAG_Int(18)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_instr*/;
-  variable[3] = NEW_String_string___String___with_native(BOX_NativeString("glob_argc = argc; glob_argv = argv;"), TAG_Int(35)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_instr*/;
-  if (once_bool_42) variable[4] = once_value_42;
-  else {
-    variable[4] = NEW_String_string___String___with_native(BOX_NativeString("Sys"), TAG_Int(3)); /*new String*/
-    variable[4] = CALL_symbol___String___to_symbol(variable[4])(variable[4]) /*String::to_symbol*/;
-    once_value_42 = variable[4];
-    once_bool_42 = true;
+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;
+  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_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_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.meth = LOCATE_compiling_global___MMModule___compile_local_table_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.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  REGB0 = TAG_Int(5);
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:128 */
+  if (!once_value_1) {
+    fra.me.REG[4] = 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];
+    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]);
+  if (!once_value_2) {
+    fra.me.REG[4] = 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];
+    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]);
+  if (!once_value_3) {
+    fra.me.REG[4] = 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];
+    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]);
+  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 */
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Bool(true);
+  } else {
+    fra.me.REG[2] = CALL_table_computation___MMModule___local_table(fra.me.REG[0])(fra.me.REG[0]);
+    REGB1 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[2])(fra.me.REG[2]);
+    REGB0 = REGB1;
   }
-  variable[3] = variable[4];
-  variable[4] = variable[0];
-  variable[4] = CALL_abstractmetamodel___MMModule___has_global_class_named(variable[4])(variable[4],  variable[3] /*sysname*/) /*MMModule::has_global_class_named*/;
-  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[4])))) { /*if*/
-    variable[4] = variable[0];
-    variable[5] = NEW_String_string___String___with_native(BOX_NativeString("No main"), TAG_Int(7)); /*new String*/
-    CALL_file___Object___print(variable[4])(variable[4], variable[5]) /*Object::print*/;
-  } else { /*if*/
-    variable[5] = variable[0];
-    variable[5] = CALL_abstractmetamodel___MMModule___class_by_name(variable[5])(variable[5],  variable[3] /*sysname*/) /*MMModule::class_by_name*/;
-    variable[4] = variable[5];
-    if (once_bool_43) variable[6] = once_value_43;
-    else {
-      variable[6] = NEW_String_string___String___with_native(BOX_NativeString("main"), TAG_Int(4)); /*new String*/
-      variable[6] = CALL_symbol___String___to_symbol(variable[6])(variable[6]) /*String::to_symbol*/;
-      once_value_43 = variable[6];
-      once_bool_43 = true;
-    }
-    variable[6] = CALL_abstractmetamodel___MMLocalClass___select_method( variable[4] /*sys*/)( variable[4] /*sys*/, variable[6]) /*MMLocalClass::select_method*/;
-    variable[5] = variable[6];
-    variable[6] = TAG_Bool(( variable[5] /*mainm*/ ==  NIT_NULL /*null*/) || (( variable[5] /*mainm*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[5] /*mainm*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*mainm*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[5] /*mainm*/)( variable[5] /*mainm*/,  NIT_NULL /*null*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[6])) { /*if*/
-      variable[6] = variable[0];
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString("No main"), TAG_Int(7)); /*new String*/
-      CALL_file___Object___print(variable[6])(variable[6], variable[7]) /*Object::print*/;
-    } else { /*if*/
-      variable[6] = NEW_String_string___String___with_native(BOX_NativeString("G_sys = NEW_Sys();"), TAG_Int(18)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_instr*/;
-      variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[8] = variable[7];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-      variable[9] = CALL_compiling_base___MMLocalProperty___cname( variable[5] /*mainm*/)( variable[5] /*mainm*/) /*MMLocalProperty::cname*/;
-      variable[10] = variable[9];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString("(G_sys);"), TAG_Int(8)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-      variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_instr*/;
-    }
+  if (UNTAG_Bool(REGB0)) {
+    /* ./compiling//compiling_global.nit:131 */
+    goto label4;
   }
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("return 0;"), TAG_Int(9)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[4]) /*CompilerVisitor::add_instr*/;
-  CALL_compiling_base___CompilerVisitor___unindent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::unindent*/;
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("}"), TAG_Int(1)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[4]) /*CompilerVisitor::add_instr*/;
-  return_label41: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___MMSrcModule___compile_mod_to_c(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 473, LOCATE_compiling_global___MMSrcModule___compile_mod_to_c};
-  val_t variable[26];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("extern const char *LOCATE_"), TAG_Int(26)); /*new String*/
-  variable[5] = variable[4];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-  variable[6] = variable[0];
-  variable[6] = CALL_abstractmetamodel___MMModule___name(variable[6])(variable[6]) /*MMModule::name*/;
-  variable[7] = variable[6];
-  variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-  variable[8] = NEW_String_string___String___with_native(BOX_NativeString(";"), TAG_Int(1)); /*new String*/
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_decl*/;
-  variable[3] = CALL_compiling_base___CompilerVisitor___tc( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::tc*/;
-  variable[3] = CALL_compiling_base___ToolContext___global(variable[3])(variable[3]) /*ToolContext::global*/;
-  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[3])))) { /*if*/
-    variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-    variable[4] = NEW_String_string___String___with_native(BOX_NativeString("extern const int SFT_"), TAG_Int(21)); /*new String*/
-    variable[5] = variable[4];
-    CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-    variable[6] = variable[0];
-    variable[6] = CALL_abstractmetamodel___MMModule___name(variable[6])(variable[6]) /*MMModule::name*/;
-    variable[7] = variable[6];
-    variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-    variable[8] = NEW_String_string___String___with_native(BOX_NativeString("[];"), TAG_Int(3)); /*new String*/
-    variable[9] = variable[8];
-    CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-    variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-    CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_decl*/;
-  }
-  variable[3] =  TAG_Int(0);
-  variable[4] = variable[0];
-  variable[4] = ATTR_compiling_global___MMSrcModule____local_table(variable[4]) /*MMSrcModule::_local_table*/;
-  variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___is_ok(variable[4])(variable[4]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___item(variable[4])(variable[4]) /*ArrayIterator::item*/;
-    variable[6] = variable[5];
-    /*variable[7] is variable value*/
-    variable[8] = CALL_compiling_base___CompilerVisitor___tc( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::tc*/;
-    variable[8] = CALL_compiling_base___ToolContext___global(variable[8])(variable[8]) /*ToolContext::global*/;
-    if (UNTAG_Bool(variable[8])) { /*if*/
-      variable[8] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[9] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[10] = variable[9];
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[10]) /*AbstractArray::add*/;
-      variable[11] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-      variable[11] = CALL_compiling_global___ModuleTableElt___value( variable[6] /*e*/)( variable[6] /*e*/, variable[11]) /*ModuleTableElt::value*/;
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[12]) /*AbstractArray::add*/;
-      variable[13] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[14] = variable[13];
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[14]) /*AbstractArray::add*/;
-      variable[8] = CALL_string___Object___to_s(variable[8])(variable[8]) /*Object::to_s*/;
-      variable[7] = variable[8] /*value=*/;
-    } else { /*if*/
-      variable[8] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-      variable[9] = NEW_String_string___String___with_native(BOX_NativeString("SFT_"), TAG_Int(4)); /*new String*/
-      variable[10] = variable[9];
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[10]) /*AbstractArray::add*/;
-      variable[11] = variable[0];
-      variable[11] = CALL_abstractmetamodel___MMModule___name(variable[11])(variable[11]) /*MMModule::name*/;
-      variable[12] = variable[11];
-      variable[12] = CALL_string___Object___to_s(variable[12])(variable[12]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[12]) /*AbstractArray::add*/;
-      variable[13] = NEW_String_string___String___with_native(BOX_NativeString("["), TAG_Int(1)); /*new String*/
-      variable[14] = variable[13];
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[14]) /*AbstractArray::add*/;
-      variable[15] =  variable[3] /*i*/;
-      variable[15] = CALL_string___Object___to_s(variable[15])(variable[15]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[15]) /*AbstractArray::add*/;
-      variable[16] = NEW_String_string___String___with_native(BOX_NativeString("]"), TAG_Int(1)); /*new String*/
-      variable[17] = variable[16];
-      CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[17]) /*AbstractArray::add*/;
-      variable[8] = CALL_string___Object___to_s(variable[8])(variable[8]) /*Object::to_s*/;
-      variable[7] = variable[8] /*value=*/;
-      variable[8] = TAG_Int(UNTAG_Int( variable[3] /*i*/)+UNTAG_Int( TAG_Int(1)));
-      variable[3] = variable[8] /*i=*/;
-    }
-    CALL_compiling_global___AbsTableElt___compile_macros( variable[6] /*e*/)( variable[6] /*e*/,  variable[1] /*v*/,  variable[7] /*value*/) /*AbsTableElt::compile_macros*/;
-    continue_45: while(0);
-    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*ArrayIterator::next*/;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  REGB0 = TAG_Int(5);
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:134 */
+  if (!once_value_5) {
+    fra.me.REG[4] = 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];
+    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]);
+  if (!once_value_6) {
+    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_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[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);
+  /* ./../lib/standard//collection//array.nit:23 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_length");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
+    nit_exit(1);
   }
-  break_45: while(0);
-  variable[4] = variable[0];
-  variable[4] = CALL_syntax_base___MMSrcModule___src_local_classes(variable[4])(variable[4]) /*MMSrcModule::src_local_classes*/;
-  variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*Map::iterator*/;
-  while (true) { /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___is_ok(variable[4])(variable[4]) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable[5])) break; /*for*/
-    variable[5] = CALL_abstract_collection___Iterator___item(variable[4])(variable[4]) /*Iterator::item*/;
-    variable[6] = variable[5];
-    variable[7] = CALL_abstractmetamodel___MMLocalClass___global_properties( variable[6] /*c*/)( variable[6] /*c*/) /*MMLocalClass::global_properties*/;
-    variable[7] = CALL_abstract_collection___Collection___iterator(variable[7])(variable[7]) /*Collection::iterator*/;
-    while (true) { /*for*/
-      variable[8] = CALL_abstract_collection___Iterator___is_ok(variable[7])(variable[7]) /*Iterator::is_ok*/;
-      if (!UNTAG_Bool(variable[8])) break; /*for*/
-      variable[8] = CALL_abstract_collection___Iterator___item(variable[7])(variable[7]) /*Iterator::item*/;
-      variable[9] = variable[8];
-      variable[11] = CALL_abstractmetamodel___MMLocalClass_____bra( variable[6] /*c*/)( variable[6] /*c*/,  variable[9] /*pg*/) /*MMLocalClass::[]*/;
-      variable[10] = variable[11];
-      variable[11] = CALL_abstractmetamodel___MMLocalProperty___local_class( variable[10] /*p*/)( variable[10] /*p*/) /*MMLocalProperty::local_class*/;
-      variable[11] = TAG_Bool((variable[11] ==  variable[6] /*c*/) || ((variable[11] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[11])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[11], variable[6] /*c*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[11])(variable[11],  variable[6] /*c*/) /*Object::==*/)))));
-      if (UNTAG_Bool(variable[11])) { /*if*/
-        CALL_compiling_methods___MMLocalProperty___compile_property_to_c( variable[10] /*p*/)( variable[10] /*p*/,  variable[1] /*v*/) /*MMLocalProperty::compile_property_to_c*/;
-      }
-      variable[11] = CALL_abstractmetamodel___MMGlobalProperty___is_init_for( variable[9] /*pg*/)( variable[9] /*pg*/,  variable[6] /*c*/) /*MMGlobalProperty::is_init_for*/;
-      if (UNTAG_Bool(variable[11])) { /*if*/
-        variable[12] = NEW_Array_array___Array___init(); /*new Array[String]*/
-        variable[11] = variable[12];
-        variable[12] = CALL_static_type___MMLocalProperty___signature( variable[10] /*p*/)( variable[10] /*p*/) /*MMLocalProperty::signature*/;
-        variable[12] = CALL_static_type___MMSignature___arity(variable[12])(variable[12]) /*MMSignature::arity*/;
-        variable[13] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[12]); /*new Range[Int]*/
-        variable[12] = variable[13];
-        variable[12] = CALL_abstract_collection___Collection___iterator(variable[12])(variable[12]) /*Range::iterator*/;
-        while (true) { /*for*/
-          variable[13] = CALL_abstract_collection___Iterator___is_ok(variable[12])(variable[12]) /*Iterator::is_ok*/;
-          if (!UNTAG_Bool(variable[13])) break; /*for*/
-          variable[13] = CALL_abstract_collection___Iterator___item(variable[12])(variable[12]) /*Iterator::item*/;
-          variable[14] = variable[13];
-          variable[15] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-          variable[16] = NEW_String_string___String___with_native(BOX_NativeString("val_t p"), TAG_Int(7)); /*new String*/
-          variable[17] = variable[16];
-          CALL_abstract_collection___SimpleCollection___add(variable[15])(variable[15], variable[17]) /*AbstractArray::add*/;
-          variable[18] =  variable[14] /*i*/;
-          variable[18] = CALL_string___Object___to_s(variable[18])(variable[18]) /*Object::to_s*/;
-          CALL_abstract_collection___SimpleCollection___add(variable[15])(variable[15], variable[18]) /*AbstractArray::add*/;
-          variable[19] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-          variable[20] = variable[19];
-          CALL_abstract_collection___SimpleCollection___add(variable[15])(variable[15], variable[20]) /*AbstractArray::add*/;
-          variable[15] = CALL_string___Object___to_s(variable[15])(variable[15]) /*Object::to_s*/;
-          CALL_abstract_collection___SimpleCollection___add( variable[11] /*params*/)( variable[11] /*params*/, variable[15]) /*AbstractArray::add*/;
-          continue_48: while(0);
-          CALL_abstract_collection___Iterator___next(variable[12])(variable[12]) /*Iterator::next*/;
-        }
-        break_48: while(0);
-        variable[12] = NEW_Array_array___Array___with_capacity(TAG_Int(7)); /*new Array[String]*/
-        variable[13] = NEW_String_string___String___with_native(BOX_NativeString("val_t NEW_"), TAG_Int(10)); /*new String*/
-        variable[14] = variable[13];
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[14]) /*AbstractArray::add*/;
-        variable[15] =  variable[6] /*c*/;
-        variable[15] = CALL_string___Object___to_s(variable[15])(variable[15]) /*Object::to_s*/;
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[15]) /*AbstractArray::add*/;
-        variable[16] = NEW_String_string___String___with_native(BOX_NativeString("_"), TAG_Int(1)); /*new String*/
-        variable[17] = variable[16];
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[17]) /*AbstractArray::add*/;
-        variable[18] = CALL_abstractmetamodel___MMLocalProperty___global( variable[10] /*p*/)( variable[10] /*p*/) /*MMLocalProperty::global*/;
-        variable[18] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[18])(variable[18]) /*MMGlobalProperty::intro*/;
-        variable[18] = CALL_compiling_base___MMLocalProperty___cname(variable[18])(variable[18]) /*MMLocalProperty::cname*/;
-        variable[19] = variable[18];
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[19]) /*AbstractArray::add*/;
-        variable[20] = NEW_String_string___String___with_native(BOX_NativeString("("), TAG_Int(1)); /*new String*/
-        variable[21] = variable[20];
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[21]) /*AbstractArray::add*/;
-        variable[22] = NEW_String_string___String___with_native(BOX_NativeString(", "), TAG_Int(2)); /*new String*/
-        variable[22] = CALL_string___Collection___join( variable[11] /*params*/)( variable[11] /*params*/, variable[22]) /*Collection::join*/;
-        variable[23] = variable[22];
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[23]) /*AbstractArray::add*/;
-        variable[24] = NEW_String_string___String___with_native(BOX_NativeString(");"), TAG_Int(2)); /*new String*/
-        variable[25] = variable[24];
-        CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[25]) /*AbstractArray::add*/;
-        variable[12] = CALL_string___Object___to_s(variable[12])(variable[12]) /*Object::to_s*/;
-        CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[12]) /*CompilerVisitor::add_decl*/;
-      }
-      continue_47: while(0);
-      CALL_abstract_collection___Iterator___next(variable[7])(variable[7]) /*Iterator::next*/;
+  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]);
+  if (!once_value_7) {
+    fra.me.REG[4] = 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];
+    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]);
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./compiling//compiling_global.nit:135 */
+  CALL_compiling_base___CompilerVisitor___indent(fra.me.REG[1])(fra.me.REG[1]);
+  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 */
+  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 */
+      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];
+        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]);
+      CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
+    } else {
+      /* ./compiling//compiling_global.nit:136 */
+      goto label9;
     }
-    break_47: while(0);
-    continue_46: while(0);
-    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*Iterator::next*/;
+    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
   }
-  break_46: while(0);
-  return_label44: while(false);
-  tracehead = trace.prev;
+  label9: while(0);
+  /* ./compiling//compiling_global.nit:139 */
+  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 */
+  if (!once_value_10) {
+    fra.me.REG[3] = 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];
+    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]);
+  label4: while(0);
+  stack_frame_head = fra.me.prev;
   return;
 }
-void compiling_global___MMSrcModule___compile_local_table_to_c(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 509, LOCATE_compiling_global___MMSrcModule___compile_local_table_to_c};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("const char *LOCATE_"), TAG_Int(19)); /*new String*/
-  variable[5] = variable[4];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-  variable[6] = variable[0];
-  variable[6] = CALL_abstractmetamodel___MMModule___name(variable[6])(variable[6]) /*MMModule::name*/;
-  variable[7] = variable[6];
-  variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-  variable[8] = NEW_String_string___String___with_native(BOX_NativeString(" = \""), TAG_Int(4)); /*new String*/
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-  variable[10] = variable[0];
-  variable[10] = CALL_mmloader___MMModule___filename(variable[10])(variable[10]) /*MMModule::filename*/;
-  variable[11] = variable[10];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[11]) /*AbstractArray::add*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString("\";"), TAG_Int(2)); /*new String*/
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[13]) /*AbstractArray::add*/;
-  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_instr*/;
-  variable[3] = CALL_compiling_base___CompilerVisitor___tc( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::tc*/;
-  variable[3] = CALL_compiling_base___ToolContext___global(variable[3])(variable[3]) /*ToolContext::global*/;
-  variable[4] = variable[3];
-  if (!UNTAG_Bool(variable[4])) { /* or */
-    variable[4] = variable[0];
-    variable[4] = ATTR_compiling_global___MMSrcModule____local_table(variable[4]) /*MMSrcModule::_local_table*/;
-    variable[4] = CALL_abstract_collection___Collection___is_empty(variable[4])(variable[4]) /*AbstractArray::is_empty*/;
-  }
-  variable[3] = variable[4];
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    goto return_label49;
-  }
-  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString("const int SFT_"), TAG_Int(14)); /*new String*/
-  variable[5] = variable[4];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-  variable[6] = variable[0];
-  variable[6] = CALL_abstractmetamodel___MMModule___name(variable[6])(variable[6]) /*MMModule::name*/;
-  variable[7] = variable[6];
-  variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-  variable[8] = NEW_String_string___String___with_native(BOX_NativeString("["), TAG_Int(1)); /*new String*/
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-  variable[10] = variable[0];
-  variable[10] = ATTR_compiling_global___MMSrcModule____local_table(variable[10]) /*MMSrcModule::_local_table*/;
-  variable[10] = CALL_abstract_collection___Collection___length(variable[10])(variable[10]) /*AbstractArray::length*/;
-  variable[11] = variable[10];
-  variable[11] = CALL_string___Object___to_s(variable[11])(variable[11]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[11]) /*AbstractArray::add*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString("] = {"), TAG_Int(5)); /*new String*/
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[13]) /*AbstractArray::add*/;
-  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_instr*/;
-  CALL_compiling_base___CompilerVisitor___indent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::indent*/;
-  variable[3] = variable[0];
-  variable[3] = ATTR_compiling_global___MMSrcModule____local_table(variable[3]) /*MMSrcModule::_local_table*/;
-  variable[3] = CALL_abstract_collection___Collection___iterator(variable[3])(variable[3]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[4])) break; /*for*/
-    variable[4] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*ArrayIterator::item*/;
-    variable[5] = variable[4];
-    variable[6] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-    variable[6] = CALL_compiling_global___ModuleTableElt___value( variable[5] /*e*/)( variable[5] /*e*/, variable[6]) /*ModuleTableElt::value*/;
-    variable[7] = NEW_String_string___String___with_native(BOX_NativeString(","), TAG_Int(1)); /*new String*/
-    variable[6] = CALL_string___String_____plus(variable[6])(variable[6], variable[7]) /*String::+*/;
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_instr*/;
-    continue_50: while(0);
-    CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*ArrayIterator::next*/;
-  }
-  break_50: while(0);
-  CALL_compiling_base___CompilerVisitor___unindent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::unindent*/;
-  variable[3] = NEW_String_string___String___with_native(BOX_NativeString("};"), TAG_Int(2)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_instr*/;
-  return_label49: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___AbsTableElt___compile_macros(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 532, LOCATE_compiling_global___AbsTableElt___compile_macros};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
+void compiling_global___AbsTableElt___compile_macros(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 147;
+  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, 532);
+  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 147);
   nit_exit(1);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___AbsTableElt___init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 0, LOCATE_compiling_global___AbsTableElt___init};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t compiling_global___TableElt___is_related_to(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 540, LOCATE_compiling_global___TableElt___is_related_to};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
+val_t compiling_global___TableElt___compile_to_c(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 152;
+  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, 540);
+  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 152);
   nit_exit(1);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-val_t compiling_global___TableElt___length(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 543, LOCATE_compiling_global___TableElt___length};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  TAG_Int(1);
-  goto return_label51;
-  return_label51: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t compiling_global___TableElt___item(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 546, LOCATE_compiling_global___TableElt___item};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[2] = variable[3];
-  goto return_label52;
-  return_label52: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___TableElt___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 549, LOCATE_compiling_global___TableElt___compile_to_c};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
+val_t compiling_global___ModuleTableElt___value(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 157;
+  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, 549);
+  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 157);
   nit_exit(1);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-val_t compiling_global___ModuleTableElt___value(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 557, LOCATE_compiling_global___ModuleTableElt___value};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 557);
-  nit_exit(1);
-  tracehead = trace.prev;
-  return NIT_NULL;
-}
-void compiling_global___ModuleTableEltGroup___compile_macros(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 567, LOCATE_compiling_global___ModuleTableEltGroup___compile_macros};
-  val_t variable[17];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] =  TAG_Int(0);
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___ModuleTableEltGroup____elements(variable[5]) /*ModuleTableEltGroup::_elements*/;
-  variable[5] = CALL_abstract_collection___Collection___iterator(variable[5])(variable[5]) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[6] = CALL_abstract_collection___Iterator___is_ok(variable[5])(variable[5]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[6])) break; /*for*/
-    variable[6] = CALL_abstract_collection___Iterator___item(variable[5])(variable[5]) /*ArrayIterator::item*/;
-    variable[7] = variable[6];
-    variable[8] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-    variable[9] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable[10] = variable[9];
-    CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[10]) /*AbstractArray::add*/;
-    variable[11] =  variable[2] /*value*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[11]) /*AbstractArray::add*/;
-    variable[12] = NEW_String_string___String___with_native(BOX_NativeString(" + "), TAG_Int(3)); /*new String*/
-    variable[13] = variable[12];
-    CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[13]) /*AbstractArray::add*/;
-    variable[14] =  variable[4] /*i*/;
-    variable[14] = CALL_string___Object___to_s(variable[14])(variable[14]) /*Object::to_s*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[14]) /*AbstractArray::add*/;
-    variable[15] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable[16] = variable[15];
-    CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[16]) /*AbstractArray::add*/;
-    variable[8] = CALL_string___Object___to_s(variable[8])(variable[8]) /*Object::to_s*/;
-    CALL_compiling_global___AbsTableElt___compile_macros( variable[7] /*e*/)( variable[7] /*e*/,  variable[1] /*v*/, variable[8]) /*AbsTableElt::compile_macros*/;
-    variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
-    continue_54: while(0);
-    CALL_abstract_collection___Iterator___next(variable[5])(variable[5]) /*ArrayIterator::next*/;
+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]);
   }
-  break_54: while(0);
-  return_label53: while(false);
-  tracehead = trace.prev;
+  label4: while(0);
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t compiling_global___ModuleTableEltGroup___value(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 566, LOCATE_compiling_global___ModuleTableEltGroup___value};
-  val_t variable[10];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[5] = variable[4];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-  variable[6] = variable[0];
-  variable[6] = ATTR_compiling_global___ModuleTableEltGroup____elements(variable[6]) /*ModuleTableEltGroup::_elements*/;
-  variable[6] = CALL_abstract_collection___Collection___first(variable[6])(variable[6]) /*IndexedCollection::first*/;
-  variable[6] = CALL_compiling_global___ColorContext___color( variable[1] /*ga*/)( variable[1] /*ga*/, variable[6]) /*ColorContext::color*/;
-  variable[7] = variable[6];
-  variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-  variable[8] = NEW_String_string___String___with_native(BOX_NativeString(" /* Group of ? */"), TAG_Int(17)); /*new String*/
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-  variable[2] = variable[3];
-  goto return_label55;
-  return_label55: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___ModuleTableEltGroup___elements(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 564, LOCATE_compiling_global___ModuleTableEltGroup___elements};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  tracehead = trace.prev;
-  return ATTR_compiling_global___ModuleTableEltGroup____elements( self) /*ModuleTableEltGroup::_elements*/;
-}
-void compiling_global___TableEltProp___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 582, LOCATE_compiling_global___TableEltProp___init};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_TableEltProp].i]) return;
-  variable[3] = variable[0];
-  ATTR_compiling_global___TableEltProp____property(variable[3]) /*TableEltProp::_property*/ =  variable[1] /*p*/;
-  return_label56: while(false);
-  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_TableEltProp].i] = 1;
-  tracehead = trace.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;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  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.meth = LOCATE_compiling_global___ModuleTableEltGroup___value;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_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);
+    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[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]);
+  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]);
+  if (!once_value_2) {
+    fra.me.REG[0] = BOX_NativeString(" /* Group of ? */");
+    REGB0 = TAG_Int(17);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    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[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  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 591, LOCATE_compiling_global___TableEltMeth___compile_macros};
-  val_t variable[19];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___TableEltProp____property(variable[5]) /*TableEltProp::_property*/;
-  variable[5] = CALL_abstractmetamodel___MMLocalProperty___global(variable[5])(variable[5]) /*MMLocalProperty::global*/;
-  variable[4] = variable[5];
-  variable[5] = NEW_Array_array___Array___with_capacity(TAG_Int(7)); /*new Array[String]*/
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString("#define "), TAG_Int(8)); /*new String*/
-  variable[7] = variable[6];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[7]) /*AbstractArray::add*/;
-  variable[8] = CALL_compiling_base___MMGlobalProperty___meth_call( variable[4] /*pg*/)( variable[4] /*pg*/) /*MMGlobalProperty::meth_call*/;
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[9]) /*AbstractArray::add*/;
-  variable[10] = NEW_String_string___String___with_native(BOX_NativeString("(recv) (("), TAG_Int(9)); /*new String*/
-  variable[11] = variable[10];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[11]) /*AbstractArray::add*/;
-  variable[12] = CALL_abstractmetamodel___MMGlobalProperty___intro( variable[4] /*pg*/)( variable[4] /*pg*/) /*MMGlobalProperty::intro*/;
-  variable[12] = CALL_compiling_base___MMLocalProperty___cname(variable[12])(variable[12]) /*MMLocalProperty::cname*/;
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[13]) /*AbstractArray::add*/;
-  variable[14] = NEW_String_string___String___with_native(BOX_NativeString("_t)CALL((recv), ("), TAG_Int(17)); /*new String*/
-  variable[15] = variable[14];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[15]) /*AbstractArray::add*/;
-  variable[16] =  variable[2] /*value*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[16]) /*AbstractArray::add*/;
-  variable[17] = NEW_String_string___String___with_native(BOX_NativeString(")))"), TAG_Int(3)); /*new String*/
-  variable[18] = variable[17];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[18]) /*AbstractArray::add*/;
-  variable[5] = CALL_string___Object___to_s(variable[5])(variable[5]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[5]) /*CompilerVisitor::add_decl*/;
-  return_label57: while(false);
-  tracehead = trace.prev;
+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;
+  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 = 174;
+  fra.me.meth = LOCATE_compiling_global___TableEltMeth___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;
+  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);
+  REGB0 = TAG_Int(7);
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:177 */
+  if (!once_value_1) {
+    fra.me.REG[5] = 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];
+    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]);
+  if (!once_value_2) {
+    fra.me.REG[5] = 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];
+    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[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]);
+  if (!once_value_3) {
+    fra.me.REG[0] = BOX_NativeString("_t)CALL((recv), (");
+    REGB0 = TAG_Int(17);
+    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[4], fra.me.REG[0]);
+  array___Array___add(fra.me.REG[4], 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[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]);
+  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___TableEltMeth___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 597, LOCATE_compiling_global___TableEltMeth___compile_to_c};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___TableEltProp____property(variable[5]) /*TableEltProp::_property*/;
-  variable[5] = CALL_abstractmetamodel___MMLocalProperty___global(variable[5])(variable[5]) /*MMLocalProperty::global*/;
-  variable[5] = CALL_abstractmetamodel___MMLocalClass_____bra( variable[2] /*c*/)( variable[2] /*c*/, variable[5]) /*MMLocalClass::[]*/;
-  variable[4] = variable[5];
-  variable[5] = CALL_compiling_base___MMLocalProperty___cname( variable[4] /*p*/)( variable[4] /*p*/) /*MMLocalProperty::cname*/;
-  variable[3] = variable[5];
-  goto return_label58;
-  return_label58: while(false);
-  tracehead = trace.prev;
-  return variable[3];
+val_t compiling_global___TableEltMeth___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 = 180;
+  fra.me.meth = LOCATE_compiling_global___TableEltMeth___compile_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  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]);
+  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  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 607, LOCATE_compiling_global___TableEltSuper___compile_macros};
-  val_t variable[19];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___TableEltProp____property(variable[5]) /*TableEltProp::_property*/;
-  variable[4] = variable[5];
-  variable[5] = NEW_Array_array___Array___with_capacity(TAG_Int(7)); /*new Array[String]*/
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString("#define "), TAG_Int(8)); /*new String*/
-  variable[7] = variable[6];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[7]) /*AbstractArray::add*/;
-  variable[8] = CALL_compiling_base___MMLocalProperty___super_meth_call( variable[4] /*p*/)( variable[4] /*p*/) /*MMLocalProperty::super_meth_call*/;
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[9]) /*AbstractArray::add*/;
-  variable[10] = NEW_String_string___String___with_native(BOX_NativeString("(recv) (("), TAG_Int(9)); /*new String*/
-  variable[11] = variable[10];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[11]) /*AbstractArray::add*/;
-  variable[12] = CALL_compiling_base___MMLocalProperty___cname( variable[4] /*p*/)( variable[4] /*p*/) /*MMLocalProperty::cname*/;
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[13]) /*AbstractArray::add*/;
-  variable[14] = NEW_String_string___String___with_native(BOX_NativeString("_t)CALL((recv), ("), TAG_Int(17)); /*new String*/
-  variable[15] = variable[14];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[15]) /*AbstractArray::add*/;
-  variable[16] =  variable[2] /*value*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[16]) /*AbstractArray::add*/;
-  variable[17] = NEW_String_string___String___with_native(BOX_NativeString(")))"), TAG_Int(3)); /*new String*/
-  variable[18] = variable[17];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[18]) /*AbstractArray::add*/;
-  variable[5] = CALL_string___Object___to_s(variable[5])(variable[5]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[5]) /*CompilerVisitor::add_decl*/;
-  return_label59: while(false);
-  tracehead = trace.prev;
+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;
+  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 = 188;
+  fra.me.meth = LOCATE_compiling_global___TableEltSuper___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;
+  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);
+  REGB0 = TAG_Int(7);
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:191 */
+  if (!once_value_1) {
+    fra.me.REG[5] = 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];
+    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]);
+  if (!once_value_2) {
+    fra.me.REG[5] = 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];
+    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[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]);
+  if (!once_value_3) {
+    fra.me.REG[0] = BOX_NativeString("_t)CALL((recv), (");
+    REGB0 = TAG_Int(17);
+    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[4], fra.me.REG[0]);
+  array___Array___add(fra.me.REG[4], 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[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]);
+  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  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 613, LOCATE_compiling_global___TableEltSuper___compile_to_c};
-  val_t variable[13];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___TableEltProp____property(variable[5]) /*TableEltProp::_property*/;
-  variable[5] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[5])(variable[5]) /*MMLocalProperty::local_class*/;
-  variable[4] = variable[5];
-  variable[6] = variable[0];
-  variable[6] = ATTR_compiling_global___TableEltProp____property(variable[6]) /*TableEltProp::_property*/;
-  variable[6] = CALL_abstractmetamodel___MMLocalProperty___global(variable[6])(variable[6]) /*MMLocalProperty::global*/;
-  variable[5] = variable[6];
-  variable[7] = CALL_abstractmetamodel___MMLocalClass___che( variable[2] /*c*/)( variable[2] /*c*/) /*MMLocalClass::che*/;
-  variable[7] = CALL_partial_order___PartialOrderElement___linear_extension(variable[7])(variable[7]) /*PartialOrderElement::linear_extension*/;
-  variable[6] = variable[7];
-  variable[7] =  TAG_Bool(false);
-  variable[8] = CALL_abstract_collection___Collection___iterator( variable[6] /*lin*/)( variable[6] /*lin*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[9] = CALL_abstract_collection___Iterator___is_ok(variable[8])(variable[8]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[9])) break; /*for*/
-    variable[9] = CALL_abstract_collection___Iterator___item(variable[8])(variable[8]) /*ArrayIterator::item*/;
-    variable[10] = variable[9];
-    variable[11] = TAG_Bool(( variable[10] /*s*/ ==  variable[4] /*pc*/) || (( variable[10] /*s*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[10] /*s*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[10] /*s*/, variable[4] /*pc*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[10] /*s*/)( variable[10] /*s*/,  variable[4] /*pc*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[11])) { /*if*/
-      variable[7] =  TAG_Bool(true) /*found=*/;
-    } else { /*if*/
-      variable[11] =  variable[7] /*found*/;
-      if (UNTAG_Bool(variable[11])) { /* and */
-        variable[11] = CALL_abstractmetamodel___MMLocalClass___che( variable[2] /*c*/)( variable[2] /*c*/) /*MMLocalClass::che*/;
-        variable[11] = CALL_partial_order___PartialOrderElement_____l(variable[11])(variable[11],  variable[10] /*s*/) /*PartialOrderElement::<*/;
+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;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 194;
+  fra.me.meth = LOCATE_compiling_global___TableEltSuper___compile_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[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]);
+  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[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]);
+  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 */
+  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)) {
+      } else {
+        REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
+        REGB1 = REGB2;
       }
-      if (UNTAG_Bool(variable[11])) { /*if*/
-        variable[12] = CALL_abstractmetamodel___MMLocalClass_____bra( variable[10] /*s*/)( variable[10] /*s*/,  variable[5] /*g*/) /*MMLocalClass::[]*/;
-        variable[11] = variable[12];
-        variable[12] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[11] /*p*/ ==  NIT_NULL /*null*/) || (( variable[11] /*p*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[11] /*p*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[11] /*p*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[11] /*p*/)( variable[11] /*p*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-        if (UNTAG_Bool(variable[12])) { /*if*/
-          variable[12] = CALL_compiling_base___MMLocalProperty___cname( variable[11] /*p*/)( variable[11] /*p*/) /*MMLocalProperty::cname*/;
-          variable[3] = variable[12];
-          goto return_label60;
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(true);
+        REGB0 = REGB1;
+      /* ./compiling//compiling_global.nit:203 */
+      } else {
+        /* ./compiling//compiling_global.nit:204 */
+        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]);
+        } else {
+          REGB2 = TAG_Bool(false);
+          REGB1 = REGB2;
+        }
+        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 */
+            goto label1;
+          }
         }
       }
+    } else {
+      /* ./compiling//compiling_global.nit:200 */
+      goto label2;
     }
-    continue_61: while(0);
-    CALL_abstract_collection___Iterator___next(variable[8])(variable[8]) /*ArrayIterator::next*/;
+    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
-  break_61: while(0);
-  if (!UNTAG_Bool( TAG_Bool(false))) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___TableEltSuper___compile_to_c, LOCATE_compiling_global, 631); nit_exit(1);}
-  variable[3] =  NIT_NULL /*null*/;
-  goto return_label60;
-  return_label60: while(false);
-  tracehead = trace.prev;
-  return variable[3];
+  label2: while(0);
+  /* ./compiling//compiling_global.nit:211 */
+  fprintf(stderr, "Aborted");
+  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 211);
+  nit_exit(1);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[4];
 }
-void compiling_global___TableEltAttr___compile_macros(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 639, LOCATE_compiling_global___TableEltAttr___compile_macros};
-  val_t variable[15];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___TableEltProp____property(variable[5]) /*TableEltProp::_property*/;
-  variable[5] = CALL_abstractmetamodel___MMLocalProperty___global(variable[5])(variable[5]) /*MMLocalProperty::global*/;
-  variable[4] = variable[5];
-  variable[5] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString("#define "), TAG_Int(8)); /*new String*/
-  variable[7] = variable[6];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[7]) /*AbstractArray::add*/;
-  variable[8] = CALL_compiling_base___MMGlobalProperty___attr_access( variable[4] /*pg*/)( variable[4] /*pg*/) /*MMGlobalProperty::attr_access*/;
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[9]) /*AbstractArray::add*/;
-  variable[10] = NEW_String_string___String___with_native(BOX_NativeString("(recv) ATTR(recv, ("), TAG_Int(19)); /*new String*/
-  variable[11] = variable[10];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[11]) /*AbstractArray::add*/;
-  variable[12] =  variable[2] /*value*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[12]) /*AbstractArray::add*/;
-  variable[13] = NEW_String_string___String___with_native(BOX_NativeString("))"), TAG_Int(2)); /*new String*/
-  variable[14] = variable[13];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[14]) /*AbstractArray::add*/;
-  variable[5] = CALL_string___Object___to_s(variable[5])(variable[5]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[5]) /*CompilerVisitor::add_decl*/;
-  return_label62: while(false);
-  tracehead = trace.prev;
+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;
+  val_t REGB0;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  static val_t once_value_2; /* Once value */
+  static val_t once_value_3; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 216;
+  fra.me.meth = LOCATE_compiling_global___TableEltAttr___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;
+  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);
+  REGB0 = TAG_Int(5);
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:219 */
+  if (!once_value_1) {
+    fra.me.REG[5] = 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];
+    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[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]);
+  if (!once_value_2) {
+    fra.me.REG[0] = BOX_NativeString("(recv) ATTR(recv, (");
+    REGB0 = TAG_Int(19);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    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]);
+  if (!once_value_3) {
+    fra.me.REG[2] = BOX_NativeString("))");
+    REGB0 = TAG_Int(2);
+    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;
+  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]);
+  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___TableEltAttr___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 645, LOCATE_compiling_global___TableEltAttr___compile_to_c};
-  val_t variable[19];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[4] = variable[5];
-  variable[6] = variable[0];
-  variable[6] = ATTR_compiling_global___TableEltProp____property(variable[6]) /*TableEltProp::_property*/;
-  variable[6] = CALL_abstractmetamodel___MMLocalProperty___global(variable[6])(variable[6]) /*MMLocalProperty::global*/;
-  variable[6] = CALL_abstractmetamodel___MMLocalClass_____bra( variable[2] /*c*/)( variable[2] /*c*/, variable[6]) /*MMLocalClass::[]*/;
-  variable[5] = variable[6];
-  variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(7)); /*new Array[String]*/
-  variable[7] = NEW_String_string___String___with_native(BOX_NativeString("/* "), TAG_Int(3)); /*new String*/
-  variable[8] = variable[7];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-  variable[9] = variable[0];
-  variable[9] = CALL_compiling_global___ColorContext___color( variable[4] /*ga*/)( variable[4] /*ga*/, variable[9]) /*ColorContext::color*/;
-  variable[10] = variable[9];
-  variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-  variable[11] = NEW_String_string___String___with_native(BOX_NativeString(": Attribute "), TAG_Int(12)); /*new String*/
-  variable[12] = variable[11];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-  variable[13] =  variable[2] /*c*/;
-  variable[13] = CALL_string___Object___to_s(variable[13])(variable[13]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[13]) /*AbstractArray::add*/;
-  variable[14] = NEW_String_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)); /*new String*/
-  variable[15] = variable[14];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[15]) /*AbstractArray::add*/;
-  variable[16] =  variable[5] /*p*/;
-  variable[16] = CALL_string___Object___to_s(variable[16])(variable[16]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[16]) /*AbstractArray::add*/;
-  variable[17] = NEW_String_string___String___with_native(BOX_NativeString(" */"), TAG_Int(3)); /*new String*/
-  variable[18] = variable[17];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[18]) /*AbstractArray::add*/;
-  variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-  variable[3] = variable[6];
-  goto return_label63;
-  return_label63: while(false);
-  tracehead = trace.prev;
-  return variable[3];
+val_t compiling_global___TableEltAttr___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 */
+  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___TableEltAttr___compile_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  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]);
+  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);
+    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[5] = once_value_1;
+  array___Array___add(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]);
+  if (!once_value_2) {
+    fra.me.REG[0] = BOX_NativeString(": Attribute ");
+    REGB0 = TAG_Int(12);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    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[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]);
+  if (!once_value_3) {
+    fra.me.REG[2] = BOX_NativeString("::");
+    REGB0 = TAG_Int(2);
+    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;
+  array___Array___add(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]);
+  if (!once_value_4) {
+    fra.me.REG[3] = BOX_NativeString(" */");
+    REGB0 = TAG_Int(3);
+    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[3] = once_value_4;
+  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]);
+  goto label5;
+  label5: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[4];
 }
-void compiling_global___AbsTableEltClass___compile_macros(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 667, LOCATE_compiling_global___AbsTableEltClass___compile_macros};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[5] = NEW_String_string___String___with_native(BOX_NativeString("#define "), TAG_Int(8)); /*new String*/
-  variable[6] = variable[5];
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[6]) /*AbstractArray::add*/;
-  variable[7] = variable[0];
-  variable[7] = CALL_compiling_global___AbsTableEltClass___symbol(variable[7])(variable[7]) /*AbsTableEltClass::symbol*/;
-  variable[8] = variable[7];
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[8]) /*AbstractArray::add*/;
-  variable[9] = NEW_String_string___String___with_native(BOX_NativeString(" ("), TAG_Int(2)); /*new String*/
-  variable[10] = variable[9];
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[10]) /*AbstractArray::add*/;
-  variable[11] =  variable[2] /*value*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[11]) /*AbstractArray::add*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString(")"), TAG_Int(1)); /*new String*/
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[13]) /*AbstractArray::add*/;
-  variable[4] = CALL_string___Object___to_s(variable[4])(variable[4]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[4]) /*CompilerVisitor::add_decl*/;
-  return_label64: while(false);
-  tracehead = trace.prev;
+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;
+  val_t REGB0;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  static val_t once_value_2; /* Once value */
+  static val_t once_value_3; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 234;
+  fra.me.meth = LOCATE_compiling_global___AbsTableEltClass___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[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  REGB0 = TAG_Int(5);
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:236 */
+  if (!once_value_1) {
+    fra.me.REG[5] = 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];
+    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[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]);
+  if (!once_value_2) {
+    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_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]);
+  if (!once_value_3) {
+    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_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]);
+  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___AbsTableEltClass___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 659, LOCATE_compiling_global___AbsTableEltClass___init};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_AbsTableEltClass].i]) return;
-  variable[3] = variable[0];
-  ATTR_compiling_global___AbsTableEltClass____local_class(variable[3]) /*AbsTableEltClass::_local_class*/ =  variable[1] /*c*/;
-  return_label65: while(false);
-  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_AbsTableEltClass].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-val_t compiling_global___AbsTableEltClass___symbol(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 664, LOCATE_compiling_global___AbsTableEltClass___symbol};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
+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 = 231;
+  fra.me.meth = LOCATE_compiling_global___AbsTableEltClass___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, 664);
+  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 231);
   nit_exit(1);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-val_t compiling_global___TableEltClass___is_related_to(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 677, LOCATE_compiling_global___TableEltClass___is_related_to};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = CALL_abstractmetamodel___MMLocalClass___module( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::module*/;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[5]) /*AbsTableEltClass::_local_class*/;
-  variable[5] = CALL_abstractmetamodel___MMLocalClass___global(variable[5])(variable[5]) /*MMLocalClass::global*/;
-  variable[4] = CALL_abstractmetamodel___MMModule_____bra(variable[4])(variable[4], variable[5]) /*MMModule::[]*/;
-  variable[3] = variable[4];
-  variable[4] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::cshe*/;
-  variable[4] = CALL_partial_order___PartialOrderElement_____leq(variable[4])(variable[4],  variable[3] /*bc*/) /*PartialOrderElement::<=*/;
-  variable[2] = variable[4];
-  goto return_label66;
-  return_label66: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___TableEltClassId___value(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 690, LOCATE_compiling_global___TableEltClassId___value};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[5] = variable[4];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-  variable[6] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[1] /*ga*/)( variable[1] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-  variable[7] = variable[0];
-  variable[7] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[7]) /*AbsTableEltClass::_local_class*/;
-  variable[7] = CALL_abstractmetamodel___MMLocalClass___global(variable[7])(variable[7]) /*MMLocalClass::global*/;
-  variable[6] = CALL_abstract_collection___Map_____bra(variable[6])(variable[6], variable[7]) /*CoupleMap::[]*/;
-  variable[6] = CALL_compiling_global___CompiledClass___id(variable[6])(variable[6]) /*CompiledClass::id*/;
-  variable[7] = variable[6];
-  variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-  variable[8] = NEW_String_string___String___with_native(BOX_NativeString(" /* Id of "), TAG_Int(10)); /*new String*/
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-  variable[10] = variable[0];
-  variable[10] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[10]) /*AbsTableEltClass::_local_class*/;
-  variable[11] = variable[10];
-  variable[11] = CALL_string___Object___to_s(variable[11])(variable[11]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[11]) /*AbstractArray::add*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString(" */"), TAG_Int(3)); /*new String*/
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[13]) /*AbstractArray::add*/;
-  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-  variable[2] = variable[3];
-  goto return_label67;
-  return_label67: while(false);
-  tracehead = trace.prev;
-  return variable[2];
+val_t compiling_global___TableEltClassId___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 */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 243;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassId___value;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_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);
+    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[3] = once_value_1;
+  array___Array___add(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);
+  }
+  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]);
+  if (!once_value_2) {
+    fra.me.REG[3] = BOX_NativeString(" /* Id of ");
+    REGB0 = TAG_Int(10);
+    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[3] = once_value_2;
+  array___Array___add(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]);
+  if (!once_value_3) {
+    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[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  self) {
-  struct trace_t trace = {NULL, NULL, 688, LOCATE_compiling_global___TableEltClassId___symbol};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[2]) /*AbsTableEltClass::_local_class*/;
-  variable[2] = CALL_abstractmetamodel___MMLocalClass___global(variable[2])(variable[2]) /*MMLocalClass::global*/;
-  variable[2] = CALL_compiling_base___MMGlobalClass___id_id(variable[2])(variable[2]) /*MMGlobalClass::id_id*/;
-  variable[1] = variable[2];
-  goto return_label68;
-  return_label68: while(false);
-  tracehead = trace.prev;
-  return variable[1];
+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 = 241;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassId___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___id_id(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./compiling//compiling_global.nit:241 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
 }
-val_t compiling_global___TableEltClassInitTable___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 701, LOCATE_compiling_global___TableEltClassInitTable___compile_to_c};
-  val_t variable[25];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[4] = variable[5];
-  variable[6] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[4] /*ga*/)( variable[4] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-  variable[7] = variable[0];
-  variable[7] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[7]) /*AbsTableEltClass::_local_class*/;
-  variable[7] = CALL_abstractmetamodel___MMLocalClass___global(variable[7])(variable[7]) /*MMLocalClass::global*/;
-  variable[6] = CALL_abstract_collection___Map_____bra(variable[6])(variable[6], variable[7]) /*CoupleMap::[]*/;
-  variable[5] = variable[6];
-  variable[7] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[2] /*c*/)( variable[2] /*c*/) /*MMLocalClass::cshe*/;
-  variable[7] = CALL_partial_order___PartialOrderElement___reverse_linear_extension(variable[7])(variable[7]) /*PartialOrderElement::reverse_linear_extension*/;
-  variable[6] = variable[7];
-  variable[7] =  TAG_Int(0);
-  while (true) { /*while*/
-    variable[8] =  variable[6] /*linext*/;
-    variable[9] =  variable[7] /*i*/;
-    variable[11] = TAG_Bool(UNTAG_Int( variable[9] /*index*/)>=UNTAG_Int( TAG_Int(0)));
-    variable[12] = variable[11];
-    if (UNTAG_Bool(variable[12])) { /* and */
-      variable[12] = variable[8];
-      variable[12] = ATTR_array___AbstractArray____length(variable[12]) /*AbstractArray::_length*/;
-      variable[12] = TAG_Bool(UNTAG_Int( variable[9] /*index*/)<UNTAG_Int(variable[12]));
+val_t compiling_global___TableEltClassInitTable___compile_to_c(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 REGB3;
+  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 */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 252;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassInitTable___compile_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[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]);
+  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]);
+  REGB0 = TAG_Int(0);
+  /* ./compiling//compiling_global.nit:258 */
+  while(1) {
+    fra.me.REG[5] = fra.me.REG[3];
+    REGB1 = REGB0;
+    REGB2 = TAG_Int(0);
+    REGB2 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB2));
+    /* ./../lib/standard//collection//array.nit:233 */
+    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);
+      }
+      REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[5]);
+      REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB2));
+    /* ./../lib/standard//collection//array.nit:233 */
+    } else {
+      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);
+    }
+    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);
+    }
+    fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[5])->val[UNTAG_Int(REGB1)];
+    /* ./../lib/standard//collection//array.nit:234 */
+    goto label1;
+    label1: while(0);
+    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);
+    }
+    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]);
+    fra.me.REG[6] = CALL_abstractmetamodel___MMLocalClass___global(fra.me.REG[6])(fra.me.REG[6]);
+    REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[5],fra.me.REG[6]));
+    if (UNTAG_Bool(REGB1)) {
+    } else {
+      REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+      REGB1 = REGB2;
+    }
+    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Int(1);
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+      REGB0 = REGB1;
+    /* ./compiling//compiling_global.nit:259 */
+    } else {
+      /* ./compiling//compiling_global.nit:258 */
+      goto label2;
     }
-    variable[11] = variable[12];
-    if (!UNTAG_Bool(variable[11])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_compiling_global, 229); nit_exit(1);}
-    variable[11] = variable[8];
-    variable[11] = ATTR_array___Array____items(variable[11]) /*Array::_items*/;
-    variable[11] = UNBOX_NativeArray(variable[11])[UNTAG_Int( variable[9] /*index*/)];
-    variable[10] = variable[11];
-    goto return_label71;
-    return_label71: while(false);
-    variable[8] = variable[10];
-    variable[8] = CALL_abstractmetamodel___MMLocalClass___global(variable[8])(variable[8]) /*MMLocalClass::global*/;
-    variable[9] = variable[0];
-    variable[9] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[9]) /*AbsTableEltClass::_local_class*/;
-    variable[9] = CALL_abstractmetamodel___MMLocalClass___global(variable[9])(variable[9]) /*MMLocalClass::global*/;
-    variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[8] == variable[9]) || ((variable[8] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[8])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[8],variable[9])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[8])(variable[8], variable[9]) /*Object::==*/)))))));
-    if (!UNTAG_Bool(variable[8])) break; /* while*/
-    variable[7] = TAG_Int(UNTAG_Int(variable[7])+UNTAG_Int( TAG_Int(1))) /*i*/;
-    continue_70: while(0);
   }
-  break_70: while(0);
-  variable[8] = NEW_Array_array___Array___with_capacity(TAG_Int(9)); /*new Array[String]*/
-  variable[9] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[10] = variable[9];
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[10]) /*AbstractArray::add*/;
-  variable[11] =  variable[7] /*i*/;
-  variable[11] = CALL_string___Object___to_s(variable[11])(variable[11]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[11]) /*AbstractArray::add*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString(" /* "), TAG_Int(4)); /*new String*/
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[13]) /*AbstractArray::add*/;
-  variable[14] = variable[0];
-  variable[14] = CALL_compiling_global___ColorContext___color( variable[4] /*ga*/)( variable[4] /*ga*/, variable[14]) /*ColorContext::color*/;
-  variable[15] = variable[14];
-  variable[15] = CALL_string___Object___to_s(variable[15])(variable[15]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[15]) /*AbstractArray::add*/;
-  variable[16] = NEW_String_string___String___with_native(BOX_NativeString(": "), TAG_Int(2)); /*new String*/
-  variable[17] = variable[16];
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[17]) /*AbstractArray::add*/;
-  variable[18] =  variable[2] /*c*/;
-  variable[18] = CALL_string___Object___to_s(variable[18])(variable[18]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[18]) /*AbstractArray::add*/;
-  variable[19] = NEW_String_string___String___with_native(BOX_NativeString(" < "), TAG_Int(3)); /*new String*/
-  variable[20] = variable[19];
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[20]) /*AbstractArray::add*/;
-  variable[21] = CALL_compiling_global___CompiledClass___local_class( variable[5] /*cc*/)( variable[5] /*cc*/) /*CompiledClass::local_class*/;
-  variable[22] = variable[21];
-  variable[22] = CALL_string___Object___to_s(variable[22])(variable[22]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[22]) /*AbstractArray::add*/;
-  variable[23] = NEW_String_string___String___with_native(BOX_NativeString(": superclass init_table position */"), TAG_Int(35)); /*new String*/
-  variable[24] = variable[23];
-  CALL_abstract_collection___SimpleCollection___add(variable[8])(variable[8], variable[24]) /*AbstractArray::add*/;
-  variable[8] = CALL_string___Object___to_s(variable[8])(variable[8]) /*Object::to_s*/;
-  variable[3] = variable[8];
-  goto return_label69;
-  return_label69: while(false);
-  tracehead = trace.prev;
-  return variable[3];
-}
-val_t compiling_global___TableEltClassInitTable___symbol(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 699, LOCATE_compiling_global___TableEltClassInitTable___symbol};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[2]) /*AbsTableEltClass::_local_class*/;
-  variable[2] = CALL_abstractmetamodel___MMLocalClass___global(variable[2])(variable[2]) /*MMLocalClass::global*/;
-  variable[2] = CALL_compiling_base___MMGlobalClass___init_table_pos_id(variable[2])(variable[2]) /*MMGlobalClass::init_table_pos_id*/;
-  variable[1] = variable[2];
-  goto return_label72;
-  return_label72: while(false);
-  tracehead = trace.prev;
-  return variable[1];
+  label2: while(0);
+  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);
+    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB1);
+    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] = CALL_string___Object___to_s(REGB0)(REGB0);
+  array___Array___add(fra.me.REG[3], fra.me.REG[6]);
+  if (!once_value_4) {
+    fra.me.REG[6] = BOX_NativeString(" /* ");
+    REGB0 = TAG_Int(4);
+    fra.me.REG[6] = NEW_String_string___String___with_native(fra.me.REG[6], REGB0);
+    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[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]);
+  if (!once_value_5) {
+    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_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[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_6) {
+    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_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[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_7) {
+    fra.me.REG[4] = BOX_NativeString(": superclass init_table position */");
+    REGB0 = TAG_Int(35);
+    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;
+  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 label8;
+  label8: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[3];
 }
-val_t compiling_global___TableEltClassColor___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 728, LOCATE_compiling_global___TableEltClassColor___compile_to_c};
-  val_t variable[24];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[4] = variable[5];
-  variable[6] = CALL_compiling_global___GlobalAnalysis___compiled_classes( variable[4] /*ga*/)( variable[4] /*ga*/) /*GlobalAnalysis::compiled_classes*/;
-  variable[7] = variable[0];
-  variable[7] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[7]) /*AbsTableEltClass::_local_class*/;
-  variable[7] = CALL_abstractmetamodel___MMLocalClass___global(variable[7])(variable[7]) /*MMLocalClass::global*/;
-  variable[6] = CALL_abstract_collection___Map_____bra(variable[6])(variable[6], variable[7]) /*CoupleMap::[]*/;
-  variable[5] = variable[6];
-  variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(9)); /*new Array[String]*/
-  variable[7] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[8] = variable[7];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-  variable[9] = CALL_compiling_global___CompiledClass___id( variable[5] /*cc*/)( variable[5] /*cc*/) /*CompiledClass::id*/;
-  variable[10] = variable[9];
-  variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-  variable[11] = NEW_String_string___String___with_native(BOX_NativeString(" /* "), TAG_Int(4)); /*new String*/
-  variable[12] = variable[11];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-  variable[13] = variable[0];
-  variable[13] = CALL_compiling_global___ColorContext___color( variable[4] /*ga*/)( variable[4] /*ga*/, variable[13]) /*ColorContext::color*/;
-  variable[14] = variable[13];
-  variable[14] = CALL_string___Object___to_s(variable[14])(variable[14]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[14]) /*AbstractArray::add*/;
-  variable[15] = NEW_String_string___String___with_native(BOX_NativeString(": "), TAG_Int(2)); /*new String*/
-  variable[16] = variable[15];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[16]) /*AbstractArray::add*/;
-  variable[17] =  variable[2] /*c*/;
-  variable[17] = CALL_string___Object___to_s(variable[17])(variable[17]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[17]) /*AbstractArray::add*/;
-  variable[18] = NEW_String_string___String___with_native(BOX_NativeString(" < "), TAG_Int(3)); /*new String*/
-  variable[19] = variable[18];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[19]) /*AbstractArray::add*/;
-  variable[20] = CALL_compiling_global___CompiledClass___local_class( variable[5] /*cc*/)( variable[5] /*cc*/) /*CompiledClass::local_class*/;
-  variable[21] = variable[20];
-  variable[21] = CALL_string___Object___to_s(variable[21])(variable[21]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[21]) /*AbstractArray::add*/;
-  variable[22] = NEW_String_string___String___with_native(BOX_NativeString(": superclass typecheck marker */"), TAG_Int(32)); /*new String*/
-  variable[23] = variable[22];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[23]) /*AbstractArray::add*/;
-  variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-  variable[3] = variable[6];
-  goto return_label73;
-  return_label73: while(false);
-  tracehead = trace.prev;
-  return variable[3];
+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 = 250;
+  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;
+  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 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
 }
-val_t compiling_global___TableEltClassColor___symbol(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 721, LOCATE_compiling_global___TableEltClassColor___symbol};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[2]) /*AbsTableEltClass::_local_class*/;
-  variable[2] = CALL_abstractmetamodel___MMLocalClass___global(variable[2])(variable[2]) /*MMLocalClass::global*/;
-  variable[2] = CALL_compiling_base___MMGlobalClass___color_id(variable[2])(variable[2]) /*MMGlobalClass::color_id*/;
-  variable[1] = variable[2];
-  goto return_label74;
-  return_label74: while(false);
-  tracehead = trace.prev;
-  return variable[1];
+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 = 273;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___compile_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 6;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[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 */
+  if (!once_value_1) {
+    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_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[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]);
+  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]);
+  if (!once_value_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[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]);
+  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___value(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 723, LOCATE_compiling_global___TableEltClassColor___value};
-  val_t variable[14];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[5] = variable[4];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[5]) /*AbstractArray::add*/;
-  variable[6] = variable[0];
-  variable[6] = CALL_compiling_global___ColorContext___color( variable[1] /*ga*/)( variable[1] /*ga*/, variable[6]) /*ColorContext::color*/;
-  variable[7] = variable[6];
-  variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[7]) /*AbstractArray::add*/;
-  variable[8] = NEW_String_string___String___with_native(BOX_NativeString(" /* Color of "), TAG_Int(13)); /*new String*/
-  variable[9] = variable[8];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[9]) /*AbstractArray::add*/;
-  variable[10] = variable[0];
-  variable[10] = ATTR_compiling_global___AbsTableEltClass____local_class(variable[10]) /*AbsTableEltClass::_local_class*/;
-  variable[11] = variable[10];
-  variable[11] = CALL_string___Object___to_s(variable[11])(variable[11]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[11]) /*AbstractArray::add*/;
-  variable[12] = NEW_String_string___String___with_native(BOX_NativeString(" */"), TAG_Int(3)); /*new String*/
-  variable[13] = variable[12];
-  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[13]) /*AbstractArray::add*/;
-  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
-  variable[2] = variable[3];
-  goto return_label75;
-  return_label75: while(false);
-  tracehead = trace.prev;
-  return variable[2];
+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);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
 }
-val_t compiling_global___TableEltComposite___is_related_to(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 743, LOCATE_compiling_global___TableEltComposite___is_related_to};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::cshe*/;
-  variable[4] = variable[0];
-  variable[4] = ATTR_compiling_global___TableEltComposite____cc(variable[4]) /*TableEltComposite::_cc*/;
-  variable[4] = CALL_compiling_global___CompiledClass___local_class(variable[4])(variable[4]) /*CompiledClass::local_class*/;
-  variable[3] = CALL_partial_order___PartialOrderElement_____leq(variable[3])(variable[3], variable[4]) /*PartialOrderElement::<=*/;
-  variable[2] = variable[3];
-  goto return_label76;
-  return_label76: while(false);
-  tracehead = trace.prev;
-  return variable[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 REGB0;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  static val_t once_value_2; /* Once value */
+  static val_t once_value_3; /* Once value */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 268;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassColor___value;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Int(5);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:270 */
+  if (!once_value_1) {
+    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_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[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]);
+  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;
+  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]);
+  if (!once_value_3) {
+    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[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___TableEltComposite___length(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 742, LOCATE_compiling_global___TableEltComposite___length};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = ATTR_compiling_global___TableEltComposite____table(variable[2]) /*TableEltComposite::_table*/;
-  variable[2] = CALL_abstract_collection___Collection___length(variable[2])(variable[2]) /*AbstractArray::length*/;
-  variable[1] = variable[2];
-  goto return_label77;
-  return_label77: while(false);
-  tracehead = trace.prev;
-  return variable[1];
+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.meth = LOCATE_compiling_global___TableEltComposite___compile_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./compiling//compiling_global.nit:282 */
+  fprintf(stderr, "Aborted");
+  fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 282);
+  nit_exit(1);
+  stack_frame_head = fra.me.prev;
+  return NIT_NULL;
 }
-val_t compiling_global___TableEltComposite___item(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 751, LOCATE_compiling_global___TableEltComposite___item};
-  val_t variable[9];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = ATTR_compiling_global___TableEltComposite____table(variable[3]) /*TableEltComposite::_table*/;
-  variable[4] = variable[3];
-  variable[5] =  variable[1] /*i*/;
-  variable[7] = TAG_Bool(UNTAG_Int( variable[5] /*index*/)>=UNTAG_Int( TAG_Int(0)));
-  variable[8] = variable[7];
-  if (UNTAG_Bool(variable[8])) { /* and */
-    variable[8] = variable[4];
-    variable[8] = ATTR_array___AbstractArray____length(variable[8]) /*AbstractArray::_length*/;
-    variable[8] = TAG_Bool(UNTAG_Int( variable[5] /*index*/)<UNTAG_Int(variable[8]));
+val_t compiling_global___TableEltClassSelfId___compile_to_c(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 */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 286;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassSelfId___compile_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.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]);
+  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);
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+    once_value_1 = fra.me.REG[4];
+    register_static_object(&once_value_1);
+  } else fra.me.REG[4] = once_value_1;
+  array___Array___add(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);
   }
-  variable[7] = variable[8];
-  if (!UNTAG_Bool(variable[7])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_compiling_global, 229); nit_exit(1);}
-  variable[7] = variable[4];
-  variable[7] = ATTR_array___Array____items(variable[7]) /*Array::_items*/;
-  variable[7] = UNBOX_NativeArray(variable[7])[UNTAG_Int( variable[5] /*index*/)];
-  variable[6] = variable[7];
-  goto return_label79;
-  return_label79: while(false);
-  variable[3] = variable[6];
-  variable[2] = variable[3];
-  goto return_label78;
-  return_label78: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___TableEltComposite___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 753, LOCATE_compiling_global___TableEltComposite___compile_to_c};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  fprintf(stderr, "Aborted"); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___TableEltComposite___compile_to_c, LOCATE_compiling_global, 753); nit_exit(1);
-  return_label80: while(false);
-  tracehead = trace.prev;
-  return variable[3];
-}
-void compiling_global___TableEltComposite___add(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 745, LOCATE_compiling_global___TableEltComposite___add};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = variable[0];
-  variable[4] = ATTR_compiling_global___TableEltComposite____offsets(variable[4]) /*TableEltComposite::_offsets*/;
-  variable[5] = variable[0];
-  variable[5] = ATTR_compiling_global___TableEltComposite____table(variable[5]) /*TableEltComposite::_table*/;
-  variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
-  CALL_abstract_collection___Map_____braeq(variable[4])(variable[4],  variable[1] /*c*/, variable[5]) /*HashMap::[]=*/;
-  variable[4] = variable[0];
-  variable[4] = ATTR_compiling_global___TableEltComposite____table(variable[4]) /*TableEltComposite::_table*/;
-  CALL_abstract_collection___IndexedCollection___append(variable[4])(variable[4],  variable[2] /*tab*/) /*IndexedCollection::append*/;
-  return_label81: while(false);
-  tracehead = trace.prev;
-  return;
-}
-void compiling_global___TableEltComposite___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 755, LOCATE_compiling_global___TableEltComposite___init};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_TableEltComposite].i]) return;
-  variable[3] = variable[0];
-  ATTR_compiling_global___TableEltComposite____cc(variable[3]) /*TableEltComposite::_cc*/ =  variable[1] /*cc*/;
-  variable[3] = variable[0];
-  variable[4] = NEW_Array_array___Array___init(); /*new Array[TableElt]*/
-  ATTR_compiling_global___TableEltComposite____table(variable[3]) /*TableEltComposite::_table*/ = variable[4];
-  variable[3] = variable[0];
-  variable[4] = NEW_HashMap_hash___HashMap___init(); /*new HashMap[MMLocalClass, Int]*/
-  ATTR_compiling_global___TableEltComposite____offsets(variable[3]) /*TableEltComposite::_offsets*/ = variable[4];
-  return_label82: while(false);
-  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_TableEltComposite].i] = 1;
-  tracehead = trace.prev;
-  return;
+  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]);
+  if (!once_value_2) {
+    fra.me.REG[2] = BOX_NativeString(" /* ");
+    REGB0 = TAG_Int(4);
+    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[2] = once_value_2;
+  array___Array___add(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]);
+  if (!once_value_3) {
+    fra.me.REG[0] = BOX_NativeString(": Identity */");
+    REGB0 = TAG_Int(13);
+    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[3] = CALL_string___Object___to_s(fra.me.REG[3])(fra.me.REG[3]);
+  goto label4;
+  label4: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[3];
 }
-val_t compiling_global___TableEltClassSelfId___is_related_to(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 766, LOCATE_compiling_global___TableEltClassSelfId___is_related_to};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  TAG_Bool(true);
-  goto return_label83;
-  return_label83: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___TableEltClassSelfId___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 767, LOCATE_compiling_global___TableEltClassSelfId___compile_to_c};
-  val_t variable[16];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[4] = variable[5];
-  variable[5] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable[7] = variable[6];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[7]) /*AbstractArray::add*/;
-  variable[8] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[8] = CALL_compiling_global___GlobalAnalysis___compiled_classes(variable[8])(variable[8]) /*GlobalAnalysis::compiled_classes*/;
-  variable[9] = CALL_abstractmetamodel___MMLocalClass___global( variable[2] /*c*/)( variable[2] /*c*/) /*MMLocalClass::global*/;
-  variable[8] = CALL_abstract_collection___Map_____bra(variable[8])(variable[8], variable[9]) /*CoupleMap::[]*/;
-  variable[8] = CALL_compiling_global___CompiledClass___id(variable[8])(variable[8]) /*CompiledClass::id*/;
-  variable[9] = variable[8];
-  variable[9] = CALL_string___Object___to_s(variable[9])(variable[9]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[9]) /*AbstractArray::add*/;
-  variable[10] = NEW_String_string___String___with_native(BOX_NativeString(" /* "), TAG_Int(4)); /*new String*/
-  variable[11] = variable[10];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[11]) /*AbstractArray::add*/;
-  variable[12] = variable[0];
-  variable[12] = CALL_compiling_global___ColorContext___color( variable[4] /*ga*/)( variable[4] /*ga*/, variable[12]) /*ColorContext::color*/;
-  variable[13] = variable[12];
-  variable[13] = CALL_string___Object___to_s(variable[13])(variable[13]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[13]) /*AbstractArray::add*/;
-  variable[14] = NEW_String_string___String___with_native(BOX_NativeString(": Identity */"), TAG_Int(13)); /*new String*/
-  variable[15] = variable[14];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[15]) /*AbstractArray::add*/;
-  variable[5] = CALL_string___Object___to_s(variable[5])(variable[5]) /*Object::to_s*/;
-  variable[3] = variable[5];
-  goto return_label84;
-  return_label84: while(false);
-  tracehead = trace.prev;
-  return variable[3];
-}
-val_t compiling_global___TableEltVftPointer___is_related_to(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 777, LOCATE_compiling_global___TableEltVftPointer___is_related_to};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  TAG_Bool(true);
-  goto return_label85;
-  return_label85: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t compiling_global___TableEltVftPointer___compile_to_c(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 778, LOCATE_compiling_global___TableEltVftPointer___compile_to_c};
-  val_t variable[12];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[5] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[4] = variable[5];
-  variable[5] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString("/* "), TAG_Int(3)); /*new String*/
-  variable[7] = variable[6];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[7]) /*AbstractArray::add*/;
-  variable[8] = variable[0];
-  variable[8] = CALL_compiling_global___ColorContext___color( variable[4] /*ga*/)( variable[4] /*ga*/, variable[8]) /*ColorContext::color*/;
-  variable[9] = variable[8];
-  variable[9] = CALL_string___Object___to_s(variable[9])(variable[9]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[9]) /*AbstractArray::add*/;
-  variable[10] = NEW_String_string___String___with_native(BOX_NativeString(": Pointer to the classtable */"), TAG_Int(30)); /*new String*/
-  variable[11] = variable[10];
-  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[11]) /*AbstractArray::add*/;
-  variable[5] = CALL_string___Object___to_s(variable[5])(variable[5]) /*Object::to_s*/;
-  variable[3] = variable[5];
-  goto return_label86;
-  return_label86: while(false);
-  tracehead = trace.prev;
-  return variable[3];
+val_t compiling_global___TableEltClassObjectSize___compile_to_c(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  static val_t once_value_1; /* 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 = 294;
+  fra.me.meth = LOCATE_compiling_global___TableEltClassObjectSize___compile_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.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[1] = CALL_compiling_global___GlobalCompilerVisitor___program(fra.me.REG[1])(fra.me.REG[1]);
+  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);
+    fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB1);
+    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] = 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)) {
+  } else {
+    REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[4]);
+    REGB1 = REGB2;
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Int(1);
+    REGB1 = TAG_Int(-UNTAG_Int(REGB1));
+    REGB0 = REGB1;
+  /* ./compiling//compiling_global.nit:299 */
+  } else {
+    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]);
+    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 */
+    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 */
+      } else {
+        /* ./compiling//compiling_global.nit:303 */
+        goto label2;
+      }
+      CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+    }
+    label2: while(0);
+  }
+  REGB1 = TAG_Int(5);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB1);
+  /* ./compiling//compiling_global.nit:307 */
+  if (!once_value_3) {
+    fra.me.REG[4] = 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];
+    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]);
+  if (!once_value_4) {
+    fra.me.REG[4] = 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];
+    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]);
+  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]);
+  if (!once_value_5) {
+    fra.me.REG[0] = BOX_NativeString(": Object size (-1 if a NativeArray)*/");
+    REGB0 = TAG_Int(37);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    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]);
+  goto label6;
+  label6: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[2];
 }
-val_t compiling_global___ClassSorter___compare(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 791, LOCATE_compiling_global___ClassSorter___compare};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = CALL_compiling_global___MMLocalClass___compare( variable[1] /*a*/)( variable[1] /*a*/,  variable[2] /*b*/) /*MMLocalClass::compare*/;
-  variable[3] = variable[4];
-  goto return_label87;
-  return_label87: while(false);
-  tracehead = trace.prev;
-  return variable[3];
+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;
+  val_t REGB0;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  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.meth = LOCATE_compiling_global___TableEltObjectId___compile_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.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]);
+  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);
+    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[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[0] = CALL_string___Object___to_s(REGB0)(REGB0);
+  array___Array___add(fra.me.REG[2], fra.me.REG[0]);
+  if (!once_value_2) {
+    fra.me.REG[0] = BOX_NativeString(": Object_id */");
+    REGB0 = TAG_Int(14);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    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[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___ClassSorter___init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 792, LOCATE_compiling_global___ClassSorter___init};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ClassSorter].i]) return;
-  return_label88: while(false);
-  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ClassSorter].i] = 1;
-  tracehead = trace.prev;
-  return;
+val_t compiling_global___TableEltVftPointer___compile_to_c(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  static val_t once_value_1; /* Once value */
+  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.meth = LOCATE_compiling_global___TableEltVftPointer___compile_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.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]);
+  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);
+    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[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[0] = CALL_string___Object___to_s(REGB0)(REGB0);
+  array___Array___add(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);
+    fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB0);
+    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[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];
 }
-val_t compiling_global___MMLocalClass___compare(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 796, LOCATE_compiling_global___MMLocalClass___compare};
-  val_t variable[8];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[3] = variable[4];
-  variable[4] = TAG_Bool(( variable[3] /*a*/ ==  variable[1] /*b*/) || (( variable[3] /*a*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[3] /*a*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*a*/, variable[1] /*b*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[3] /*a*/)( variable[3] /*a*/,  variable[1] /*b*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[2] =  TAG_Int(0);
-    goto return_label89;
-  } else { /*if*/
-    variable[4] = CALL_abstractmetamodel___MMLocalClass___module( variable[3] /*a*/)( variable[3] /*a*/) /*MMLocalClass::module*/;
-    variable[4] = CALL_abstractmetamodel___MMModule___mhe(variable[4])(variable[4]) /*MMModule::mhe*/;
-    variable[5] = CALL_abstractmetamodel___MMLocalClass___module( variable[1] /*b*/)( variable[1] /*b*/) /*MMLocalClass::module*/;
-    variable[4] = CALL_partial_order___PartialOrderElement_____l(variable[4])(variable[4], variable[5]) /*PartialOrderElement::<*/;
-    if (UNTAG_Bool(variable[4])) { /*if*/
-      variable[2] =  TAG_Int(1);
-      goto return_label89;
-    } else { /*if*/
-      variable[4] = CALL_abstractmetamodel___MMLocalClass___module( variable[1] /*b*/)( variable[1] /*b*/) /*MMLocalClass::module*/;
-      variable[4] = CALL_abstractmetamodel___MMModule___mhe(variable[4])(variable[4]) /*MMModule::mhe*/;
-      variable[5] = CALL_abstractmetamodel___MMLocalClass___module( variable[3] /*a*/)( variable[3] /*a*/) /*MMLocalClass::module*/;
-      variable[4] = CALL_partial_order___PartialOrderElement_____l(variable[4])(variable[4], variable[5]) /*PartialOrderElement::<*/;
-      if (UNTAG_Bool(variable[4])) { /*if*/
-        variable[4] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-        variable[2] = variable[4];
-        goto return_label89;
+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;
+  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_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 */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 339;
+  fra.me.meth = LOCATE_compiling_global___MMLocalClass___declare_tables_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Int(0);
+  fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:342 */
+  if (!once_value_1) {
+    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_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]);
+  CALL_compiling_base___CompilerVisitor___add_decl(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_Int(0);
+  fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB0);
+  REGB0 = TAG_Int(3);
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB0);
+  /* ./compiling//compiling_global.nit:344 */
+  if (!once_value_2) {
+    fra.me.REG[5] = 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];
+    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]);
+  if (!once_value_3) {
+    fra.me.REG[5] = 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;
       }
     }
-  }
-  variable[5] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[3] /*a*/)( variable[3] /*a*/) /*MMLocalClass::cshe*/;
-  variable[5] = CALL_partial_order___PartialOrderElement___rank(variable[5])(variable[5]) /*PartialOrderElement::rank*/;
-  variable[4] = variable[5];
-  variable[6] = CALL_abstractmetamodel___MMLocalClass___cshe( variable[1] /*b*/)( variable[1] /*b*/) /*MMLocalClass::cshe*/;
-  variable[6] = CALL_partial_order___PartialOrderElement___rank(variable[6])(variable[6]) /*PartialOrderElement::rank*/;
-  variable[5] = variable[6];
-  variable[6] = TAG_Bool(UNTAG_Int( variable[4] /*ar*/)>UNTAG_Int( variable[5] /*br*/));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[2] =  TAG_Int(1);
-    goto return_label89;
-  } else { /*if*/
-    variable[6] = TAG_Bool(UNTAG_Int( variable[5] /*br*/)>UNTAG_Int( variable[4] /*ar*/));
-    if (UNTAG_Bool(variable[6])) { /*if*/
-      variable[6] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-      variable[2] = variable[6];
-      goto return_label89;
-    } else { /*if*/
-      variable[6] = CALL_abstractmetamodel___MMLocalClass___name( variable[1] /*b*/)( variable[1] /*b*/) /*MMLocalClass::name*/;
-      variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Symbol::to_s*/;
-      variable[7] = CALL_abstractmetamodel___MMLocalClass___name( variable[3] /*a*/)( variable[3] /*a*/) /*MMLocalClass::name*/;
-      variable[7] = CALL_string___Object___to_s(variable[7])(variable[7]) /*Symbol::to_s*/;
-      variable[6] = CALL_kernel___Comparable_____leqg(variable[6])(variable[6], variable[7]) /*Comparable::<=>*/;
-      variable[2] = variable[6];
-      goto return_label89;
+    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]);
+      }
     }
   }
-  return_label89: while(false);
-  tracehead = trace.prev;
-  return variable[2];
+  stack_frame_head = fra.me.prev;
+  return;
 }
-void compiling_global___MMLocalClass___declare_tables_to_c(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 818, LOCATE_compiling_global___MMLocalClass___declare_tables_to_c};
-  val_t variable[16];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[3]) /*CompilerVisitor::add_decl*/;
-  variable[4] = variable[0];
-  variable[4] = CALL_compiling_base___MMLocalClass___primitive_info(variable[4])(variable[4]) /*MMLocalClass::primitive_info*/;
-  variable[3] = variable[4];
-  variable[4] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-  variable[5] = NEW_String_string___String___with_native(BOX_NativeString("extern const classtable_elt_t VFT_"), TAG_Int(34)); /*new String*/
-  variable[6] = variable[5];
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[6]) /*AbstractArray::add*/;
-  variable[7] = variable[0];
-  variable[7] = CALL_abstractmetamodel___MMLocalClass___name(variable[7])(variable[7]) /*MMLocalClass::name*/;
-  variable[8] = variable[7];
-  variable[8] = CALL_string___Object___to_s(variable[8])(variable[8]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[8]) /*AbstractArray::add*/;
-  variable[9] = NEW_String_string___String___with_native(BOX_NativeString("[];"), TAG_Int(3)); /*new String*/
-  variable[10] = variable[9];
-  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4], variable[10]) /*AbstractArray::add*/;
-  variable[4] = CALL_string___Object___to_s(variable[4])(variable[4]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[4]) /*CompilerVisitor::add_decl*/;
-  variable[4] = TAG_Bool(( variable[3] /*pi*/ ==  NIT_NULL /*null*/) || (( variable[3] /*pi*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[3] /*pi*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[3] /*pi*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[3] /*pi*/)( variable[3] /*pi*/,  NIT_NULL /*null*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-  } else { /*if*/
-    variable[4] = CALL_compiling_base___PrimitiveInfo___tagged( variable[3] /*pi*/)( variable[3] /*pi*/) /*PrimitiveInfo::tagged*/;
-    if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[4])))) { /*if*/
-      variable[5] = CALL_compiling_base___PrimitiveInfo___cname( variable[3] /*pi*/)( variable[3] /*pi*/) /*PrimitiveInfo::cname*/;
-      variable[4] = variable[5];
-      variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString("struct TBOX_"), TAG_Int(12)); /*new String*/
-      variable[8] = variable[7];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-      variable[9] = variable[0];
-      variable[9] = CALL_abstractmetamodel___MMLocalClass___name(variable[9])(variable[9]) /*MMLocalClass::name*/;
-      variable[10] = variable[9];
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-      variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-      variable[5] = variable[6];
-      variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[8] = variable[7];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-      variable[9] =  variable[5] /*tbox*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[9]) /*AbstractArray::add*/;
-      variable[10] = NEW_String_string___String___with_native(BOX_NativeString(" { const classtable_elt_t * vft; "), TAG_Int(33)); /*new String*/
-      variable[11] = variable[10];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[11]) /*AbstractArray::add*/;
-      variable[12] =  variable[4] /*t*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-      variable[13] = NEW_String_string___String___with_native(BOX_NativeString(" val;};"), TAG_Int(7)); /*new String*/
-      variable[14] = variable[13];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[14]) /*AbstractArray::add*/;
-      variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_decl*/;
-      variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString("val_t BOX_"), TAG_Int(10)); /*new String*/
-      variable[8] = variable[7];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-      variable[9] = variable[0];
-      variable[9] = CALL_abstractmetamodel___MMLocalClass___name(variable[9])(variable[9]) /*MMLocalClass::name*/;
-      variable[10] = variable[9];
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString("("), TAG_Int(1)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-      variable[13] =  variable[4] /*t*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[13]) /*AbstractArray::add*/;
-      variable[14] = NEW_String_string___String___with_native(BOX_NativeString(" val);"), TAG_Int(6)); /*new String*/
-      variable[15] = variable[14];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[15]) /*AbstractArray::add*/;
-      variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_decl*/;
-      variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-      variable[7] = NEW_String_string___String___with_native(BOX_NativeString("#define UNBOX_"), TAG_Int(14)); /*new String*/
-      variable[8] = variable[7];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-      variable[9] = variable[0];
-      variable[9] = CALL_abstractmetamodel___MMLocalClass___name(variable[9])(variable[9]) /*MMLocalClass::name*/;
-      variable[10] = variable[9];
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString("(x) ((("), TAG_Int(7)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-      variable[13] =  variable[5] /*tbox*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[13]) /*AbstractArray::add*/;
-      variable[14] = NEW_String_string___String___with_native(BOX_NativeString(" *)(VAL2OBJ(x)))->val)"), TAG_Int(22)); /*new String*/
-      variable[15] = variable[14];
-      CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[15]) /*AbstractArray::add*/;
-      variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_decl( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_decl*/;
+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]);
+    }
+    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]);
     }
+    label6: while(0);
   }
-  return_label90: while(false);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return;
 }
-void compiling_global___MMLocalClass___compile_tables_to_c(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 835, LOCATE_compiling_global___MMLocalClass___compile_tables_to_c};
-  val_t variable[36];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_compiling_global;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[4] = CALL_compiling_global___GlobalAnalysis___compiled_classes(variable[4])(variable[4]) /*GlobalAnalysis::compiled_classes*/;
-  variable[5] = variable[0];
-  variable[5] = CALL_abstractmetamodel___MMLocalClass___global(variable[5])(variable[5]) /*MMLocalClass::global*/;
-  variable[4] = CALL_abstract_collection___Map_____bra(variable[4])(variable[4], variable[5]) /*CoupleMap::[]*/;
-  variable[3] = variable[4];
-  variable[5] = CALL_compiling_global___CompiledClass___class_table( variable[3] /*cc*/)( variable[3] /*cc*/) /*CompiledClass::class_table*/;
-  variable[4] = variable[5];
-  variable[6] = CALL_abstract_collection___Collection___length( variable[4] /*ctab*/)( variable[4] /*ctab*/) /*AbstractArray::length*/;
-  variable[5] = variable[6];
-  variable[6] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-  variable[6] = CALL_compiling_global___GlobalAnalysis___max_class_table_length(variable[6])(variable[6]) /*GlobalAnalysis::max_class_table_length*/;
-  variable[7] = CALL_abstract_collection___Collection___length( variable[4] /*ctab*/)( variable[4] /*ctab*/) /*AbstractArray::length*/;
-  variable[6] = TAG_Bool(UNTAG_Int(variable[6])>UNTAG_Int(variable[7]));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = CALL_compiling_global___CompilerVisitor___global_analysis( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::global_analysis*/;
-    variable[6] = CALL_compiling_global___GlobalAnalysis___max_class_table_length(variable[6])(variable[6]) /*GlobalAnalysis::max_class_table_length*/;
-    variable[5] = variable[6] /*clen=*/;
+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;
+  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_5; /* Once value */
+        static val_t once_value_6; /* 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_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_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 */
+    static val_t once_value_22; /* Once value */
+      static val_t once_value_23; /* Once value */
+      static val_t once_value_24; /* Once value */
+      static val_t once_value_25; /* Once value */
+      static val_t once_value_26; /* Once value */
+      static val_t once_value_27; /* Once value */
+      static val_t once_value_28; /* Once value */
+      static val_t once_value_29; /* Once value */
+      static val_t once_value_30; /* Once value */
+      static val_t once_value_31; /* Once value */
+      static val_t once_value_32; /* Once value */
+      static val_t once_value_33; /* Once value */
+      static val_t once_value_34; /* Once value */
+      static val_t once_value_35; /* Once value */
+      static val_t once_value_36; /* Once value */
+      static val_t once_value_37; /* Once value */
+      static val_t once_value_38; /* Once value */
+      static val_t once_value_39; /* Once value */
+      static val_t once_value_40; /* Once value */
+      static val_t once_value_41; /* Once value */
+      static val_t once_value_42; /* Once value */
+      static val_t once_value_43; /* Once value */
+      static val_t once_value_44; /* Once value */
+      static val_t once_value_45; /* Once value */
+      static val_t once_value_46; /* Once value */
+      static val_t once_value_47; /* Once value */
+      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 */
+        static val_t once_value_65; /* Once value */
+        static val_t once_value_66; /* Once value */
+        static val_t once_value_67; /* Once value */
+        static val_t once_value_68; /* Once value */
+        static val_t once_value_69; /* Once value */
+        static val_t once_value_70; /* Once value */
+        static val_t once_value_71; /* Once value */
+        static val_t once_value_72; /* Once value */
+        static val_t once_value_73; /* Once value */
+        static val_t once_value_74; /* Once value */
+        static val_t once_value_75; /* Once value */
+        static val_t once_value_76; /* Once value */
+        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.meth = LOCATE_compiling_global___MMLocalClass___compile_tables_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = CALL_compiling_global___GlobalCompilerVisitor___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]);
+  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 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_length");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
+    nit_exit(1);
+  }
+  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]);
+  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 */
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_length");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
+    nit_exit(1);
+  }
+  REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+  REGB2 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB2));
+  /* ./compiling//compiling_global.nit:439 */
+  if (UNTAG_Bool(REGB2)) {
+    fra.me.REG[4] = CALL_compiling_global___GlobalCompilerVisitor___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 */
   }
-  variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-  variable[7] = NEW_String_string___String___with_native(BOX_NativeString("const classtable_elt_t VFT_"), TAG_Int(27)); /*new String*/
-  variable[8] = variable[7];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[8]) /*AbstractArray::add*/;
-  variable[9] = variable[0];
-  variable[9] = CALL_abstractmetamodel___MMLocalClass___name(variable[9])(variable[9]) /*MMLocalClass::name*/;
-  variable[10] = variable[9];
-  variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[10]) /*AbstractArray::add*/;
-  variable[11] = NEW_String_string___String___with_native(BOX_NativeString("["), TAG_Int(1)); /*new String*/
-  variable[12] = variable[11];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[12]) /*AbstractArray::add*/;
-  variable[13] =  variable[5] /*clen*/;
-  variable[13] = CALL_string___Object___to_s(variable[13])(variable[13]) /*Object::to_s*/;
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[13]) /*AbstractArray::add*/;
-  variable[14] = NEW_String_string___String___with_native(BOX_NativeString("] = {"), TAG_Int(5)); /*new String*/
-  variable[15] = variable[14];
-  CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6], variable[15]) /*AbstractArray::add*/;
-  variable[6] = CALL_string___Object___to_s(variable[6])(variable[6]) /*Object::to_s*/;
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_instr*/;
-  CALL_compiling_base___CompilerVisitor___indent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::indent*/;
-  variable[6] = CALL_abstract_collection___Collection___iterator( variable[4] /*ctab*/)( variable[4] /*ctab*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[7] = CALL_abstract_collection___Iterator___is_ok(variable[6])(variable[6]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[7])) break; /*for*/
-    variable[7] = CALL_abstract_collection___Iterator___item(variable[6])(variable[6]) /*ArrayIterator::item*/;
-    variable[8] = variable[7];
-    variable[9] = TAG_Bool(( variable[8] /*e*/ ==  NIT_NULL /*null*/) || (( variable[8] /*e*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[8] /*e*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[8] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[8] /*e*/)( variable[8] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[9])) { /*if*/
-      variable[9] = NEW_String_string___String___with_native(BOX_NativeString("{0} /* Class Hole :( */,"), TAG_Int(24)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[9]) /*CompilerVisitor::add_instr*/;
-    } else { /*if*/
-      variable[9] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[10] = NEW_String_string___String___with_native(BOX_NativeString("{(bigint) "), TAG_Int(10)); /*new String*/
-      variable[11] = variable[10];
-      CALL_abstract_collection___SimpleCollection___add(variable[9])(variable[9], variable[11]) /*AbstractArray::add*/;
-      variable[12] = variable[0];
-      variable[12] = CALL_compiling_global___TableElt___compile_to_c( variable[8] /*e*/)( variable[8] /*e*/,  variable[1] /*v*/, variable[12]) /*TableElt::compile_to_c*/;
-      variable[13] = variable[12];
-      CALL_abstract_collection___SimpleCollection___add(variable[9])(variable[9], variable[13]) /*AbstractArray::add*/;
-      variable[14] = NEW_String_string___String___with_native(BOX_NativeString("},"), TAG_Int(2)); /*new String*/
-      variable[15] = variable[14];
-      CALL_abstract_collection___SimpleCollection___add(variable[9])(variable[9], variable[15]) /*AbstractArray::add*/;
-      variable[9] = CALL_string___Object___to_s(variable[9])(variable[9]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[9]) /*CompilerVisitor::add_instr*/;
+  REGB2 = TAG_Int(0);
+  fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
+  REGB2 = TAG_Int(5);
+  fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
+  /* ./compiling//compiling_global.nit:443 */
+  if (!once_value_1) {
+    fra.me.REG[6] = 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];
+    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]);
+  if (!once_value_2) {
+    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_2 = fra.me.REG[6];
+    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]);
+  if (!once_value_3) {
+    fra.me.REG[6] = 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];
+    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]);
+  CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+  /* ./compiling//compiling_global.nit:444 */
+  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 */
+  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)) {
+      } else {
+        REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+        if (UNTAG_Bool(REGB1)) {
+          REGB1 = TAG_Bool(false);
+          REGB2 = REGB1;
+        } else {
+          REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+          REGB2 = REGB1;
+        }
+      }
+      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 (!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);
+          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]);
+      } 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 */
+        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);
+          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[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]);
+        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];
+          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]);
+        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]);
+      }
+    } else {
+      /* ./compiling//compiling_global.nit:445 */
+      goto label7;
     }
-    continue_92: while(0);
-    CALL_abstract_collection___Iterator___next(variable[6])(variable[6]) /*ArrayIterator::next*/;
+    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
   }
-  break_92: while(0);
-  variable[6] = CALL_abstract_collection___Collection___length( variable[4] /*ctab*/)( variable[4] /*ctab*/) /*AbstractArray::length*/;
-  variable[6] = TAG_Bool(UNTAG_Int( variable[5] /*clen*/)>UNTAG_Int(variable[6]));
-  if (UNTAG_Bool(variable[6])) { /*if*/
-    variable[6] = NEW_String_string___String___with_native(BOX_NativeString("{0},"), TAG_Int(4)); /*new String*/
-    variable[7] = CALL_abstract_collection___Collection___length( variable[4] /*ctab*/)( variable[4] /*ctab*/) /*AbstractArray::length*/;
-    variable[7] = TAG_Int(UNTAG_Int( variable[5] /*clen*/)-UNTAG_Int(variable[7]));
-    variable[6] = CALL_string___String_____star(variable[6])(variable[6], variable[7]) /*String::**/;
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_instr*/;
+  label7: while(0);
+  REGB2 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+  /* ./../lib/standard//collection//array.nit:23 */
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    fprintf(stderr, "Uninitialized attribute %s", "_length");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
+    nit_exit(1);
   }
-  CALL_compiling_base___CompilerVisitor___unindent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::unindent*/;
-  variable[6] = NEW_String_string___String___with_native(BOX_NativeString("};"), TAG_Int(2)); /*new String*/
-  CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[6]) /*CompilerVisitor::add_instr*/;
-  variable[7] = CALL_compiling_global___CompiledClass___instance_table( variable[3] /*cc*/)( variable[3] /*cc*/) /*CompiledClass::instance_table*/;
-  variable[6] = variable[7];
-  variable[7] = CALL_abstract_collection___Collection___iterator( variable[6] /*itab*/)( variable[6] /*itab*/) /*AbstractArray::iterator*/;
-  while (true) { /*for*/
-    variable[8] = CALL_abstract_collection___Iterator___is_ok(variable[7])(variable[7]) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable[8])) break; /*for*/
-    variable[8] = CALL_abstract_collection___Iterator___item(variable[7])(variable[7]) /*ArrayIterator::item*/;
-    variable[9] = variable[8];
-    variable[10] = TAG_Bool(( variable[9] /*e*/ ==  NIT_NULL /*null*/) || (( variable[9] /*e*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[9] /*e*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[9] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[9] /*e*/)( variable[9] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))));
-    if (UNTAG_Bool(variable[10])) { /*if*/
-      variable[10] = NEW_String_string___String___with_native(BOX_NativeString("/* Instance Hole :( */"), TAG_Int(22)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
-    } else { /*if*/
-      variable[10] = variable[0];
-      variable[10] = CALL_compiling_global___TableElt___compile_to_c( variable[9] /*e*/)( variable[9] /*e*/,  variable[1] /*v*/, variable[10]) /*TableElt::compile_to_c*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
+  REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+  REGB2 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB2));
+  /* ./compiling//compiling_global.nit:452 */
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = TAG_Int(0);
+    fra.me.REG[4] = NEW_Array_array___Array___with_capacity(REGB2);
+    /* ./compiling//compiling_global.nit:453 */
+    if (!once_value_8) {
+      fra.me.REG[6] = 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];
+      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);
+    /* ./../lib/standard//collection//array.nit:23 */
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      fprintf(stderr, "Uninitialized attribute %s", "_length");
+      fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
+      nit_exit(1);
     }
-    continue_93: while(0);
-    CALL_abstract_collection___Iterator___next(variable[7])(variable[7]) /*ArrayIterator::next*/;
+    REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
+    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]);
   }
-  break_93: while(0);
-  variable[8] = variable[0];
-  variable[8] = CALL_compiling_base___MMLocalClass___primitive_info(variable[8])(variable[8]) /*MMLocalClass::primitive_info*/;
-  variable[7] = variable[8];
-  variable[8] = TAG_Bool(( variable[7] /*pi*/ ==  NIT_NULL /*null*/) || (( variable[7] /*pi*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[7] /*pi*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*pi*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[7] /*pi*/)( variable[7] /*pi*/,  NIT_NULL /*null*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable[8])) { /*if*/
-    variable[8] = NEW_CFunctionContext_compiling_methods___CFunctionContext___init( variable[1] /*v*/); /*new CFunctionContext*/
-    CALL_compiling_methods___CompilerVisitor___cfc__eq( variable[1] /*v*/)( variable[1] /*v*/, variable[8]) /*CompilerVisitor::cfc=*/;
-    variable[8] = NEW_NitMethodContext_compiling_methods___NitMethodContext___init( NIT_NULL /*null*/); /*new NitMethodContext*/
-    CALL_compiling_methods___CompilerVisitor___nmc__eq( variable[1] /*v*/)( variable[1] /*v*/, variable[8]) /*CompilerVisitor::nmc=*/;
-    variable[9] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-    variable[10] = NEW_String_string___String___with_native(BOX_NativeString("val_t NEW_"), TAG_Int(10)); /*new String*/
-    variable[11] = variable[10];
-    CALL_abstract_collection___SimpleCollection___add(variable[9])(variable[9], variable[11]) /*AbstractArray::add*/;
-    variable[12] = variable[0];
-    variable[12] = CALL_abstractmetamodel___MMLocalClass___name(variable[12])(variable[12]) /*MMLocalClass::name*/;
-    variable[13] = variable[12];
-    variable[13] = CALL_string___Object___to_s(variable[13])(variable[13]) /*Object::to_s*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[9])(variable[9], variable[13]) /*AbstractArray::add*/;
-    variable[14] = NEW_String_string___String___with_native(BOX_NativeString("(void)"), TAG_Int(6)); /*new String*/
-    variable[15] = variable[14];
-    CALL_abstract_collection___SimpleCollection___add(variable[9])(variable[9], variable[15]) /*AbstractArray::add*/;
-    variable[9] = CALL_string___Object___to_s(variable[9])(variable[9]) /*Object::to_s*/;
-    variable[8] = variable[9];
-    variable[9] = NEW_String_string___String___with_native(BOX_NativeString(" {"), TAG_Int(2)); /*new String*/
-    variable[9] = CALL_string___String_____plus( variable[8] /*s*/)( variable[8] /*s*/, variable[9]) /*String::+*/;
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[9]) /*CompilerVisitor::add_instr*/;
-    CALL_compiling_base___CompilerVisitor___indent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::indent*/;
-    variable[10] = CALL_compiling_base___CompilerVisitor___ctx( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::ctx*/;
-    variable[9] = variable[10];
-    variable[10] = NEW_CContext_compiling_base___CContext___init(); /*new CContext*/
-    CALL_compiling_base___CompilerVisitor___ctx__eq( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::ctx=*/;
-    variable[11] = NEW_ParamVariable_syntax_base___ParamVariable___init( NIT_NULL /*null*/,  NIT_NULL /*null*/); /*new ParamVariable*/
-    variable[10] = variable[11];
-    variable[12] = CALL_compiling_methods___CompilerVisitor___cfc( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::cfc*/;
-    variable[12] = CALL_compiling_methods___CFunctionContext___register_variable(variable[12])(variable[12],  variable[10] /*self_var*/) /*CFunctionContext::register_variable*/;
-    variable[11] = variable[12];
-    variable[12] = CALL_compiling_methods___CompilerVisitor___nmc( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::nmc*/;
-    variable[13] = NEW_Array_array___Array___with_capacity(TAG_Int(1)); /*new Array[ParamVariable]*/
-    CALL_abstract_collection___SimpleCollection___add(variable[13])(variable[13],  variable[10] /*self_var*/) /*AbstractArray::add*/;
-    CALL_compiling_methods___NitMethodContext___method_params__eq(variable[12])(variable[12], variable[13]) /*NitMethodContext::method_params=*/;
-    variable[12] = NEW_String_string___String___with_native(BOX_NativeString("obj_t obj;"), TAG_Int(10)); /*new String*/
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[12]) /*CompilerVisitor::add_instr*/;
-    variable[12] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-    variable[13] = NEW_String_string___String___with_native(BOX_NativeString("obj = alloc(sizeof(val_t) * "), TAG_Int(28)); /*new String*/
-    variable[14] = variable[13];
-    CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[14]) /*AbstractArray::add*/;
-    variable[15] = CALL_abstract_collection___Collection___length( variable[6] /*itab*/)( variable[6] /*itab*/) /*AbstractArray::length*/;
-    variable[16] = variable[15];
-    variable[16] = CALL_string___Object___to_s(variable[16])(variable[16]) /*Object::to_s*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[16]) /*AbstractArray::add*/;
-    variable[17] = NEW_String_string___String___with_native(BOX_NativeString(");"), TAG_Int(2)); /*new String*/
-    variable[18] = variable[17];
-    CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[18]) /*AbstractArray::add*/;
-    variable[12] = CALL_string___Object___to_s(variable[12])(variable[12]) /*Object::to_s*/;
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[12]) /*CompilerVisitor::add_instr*/;
-    variable[12] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-    variable[13] = NEW_String_string___String___with_native(BOX_NativeString("obj->vft = (classtable_elt_t*)VFT_"), TAG_Int(34)); /*new String*/
-    variable[14] = variable[13];
-    CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[14]) /*AbstractArray::add*/;
-    variable[15] = variable[0];
-    variable[15] = CALL_abstractmetamodel___MMLocalClass___name(variable[15])(variable[15]) /*MMLocalClass::name*/;
-    variable[16] = variable[15];
-    variable[16] = CALL_string___Object___to_s(variable[16])(variable[16]) /*Object::to_s*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[16]) /*AbstractArray::add*/;
-    variable[17] = NEW_String_string___String___with_native(BOX_NativeString(";"), TAG_Int(1)); /*new String*/
-    variable[18] = variable[17];
-    CALL_abstract_collection___SimpleCollection___add(variable[12])(variable[12], variable[18]) /*AbstractArray::add*/;
-    variable[12] = CALL_string___Object___to_s(variable[12])(variable[12]) /*Object::to_s*/;
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[12]) /*CompilerVisitor::add_instr*/;
-    variable[12] = NEW_String_string___String___with_native(BOX_NativeString("OBJ2VAL(obj)"), TAG_Int(12)); /*new String*/
-    CALL_compiling_methods___CompilerVisitor___add_assignment( variable[1] /*v*/)( variable[1] /*v*/,  variable[11] /*self_var_cname*/, variable[12]) /*CompilerVisitor::add_assignment*/;
-    variable[12] = variable[0];
-    variable[12] = CALL_abstractmetamodel___MMLocalClass___global_properties(variable[12])(variable[12]) /*MMLocalClass::global_properties*/;
-    variable[12] = CALL_abstract_collection___Collection___iterator(variable[12])(variable[12]) /*Collection::iterator*/;
-    while (true) { /*for*/
-      variable[13] = CALL_abstract_collection___Iterator___is_ok(variable[12])(variable[12]) /*Iterator::is_ok*/;
-      if (!UNTAG_Bool(variable[13])) break; /*for*/
-      variable[13] = CALL_abstract_collection___Iterator___item(variable[12])(variable[12]) /*Iterator::item*/;
-      variable[14] = variable[13];
-      variable[16] = variable[0];
-      variable[16] = CALL_abstractmetamodel___MMLocalClass_____bra(variable[16])(variable[16],  variable[14] /*g*/) /*MMLocalClass::[]*/;
-      variable[15] = variable[16];
-      variable[17] = CALL_static_type___MMLocalProperty___signature( variable[15] /*p*/)( variable[15] /*p*/) /*MMLocalProperty::signature*/;
-      variable[17] = CALL_static_type___MMSignature___return_type(variable[17])(variable[17]) /*MMSignature::return_type*/;
-      variable[16] = variable[17];
-      variable[17] = TAG_Bool(( variable[15] /*p*/==NIT_NULL) || VAL_ISA( variable[15] /*p*/, COLOR_MMAttribute, ID_MMAttribute)) /*cast MMAttribute*/;
-      variable[18] = variable[17];
-      if (UNTAG_Bool(variable[18])) { /* and */
-        variable[18] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[16] /*t*/ ==  NIT_NULL /*null*/) || (( variable[16] /*t*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[16] /*t*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[16] /*t*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[16] /*t*/)( variable[16] /*t*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  /* ./compiling//compiling_global.nit:455 */
+  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 */
+  if (!once_value_9) {
+    fra.me.REG[6] = 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];
+    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]);
+  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 */
+  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)) {
+      } else {
+        REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+        if (UNTAG_Bool(REGB0)) {
+          REGB0 = TAG_Bool(false);
+          REGB2 = REGB0;
+        } else {
+          REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+          REGB2 = REGB0;
+        }
+      }
+      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 (!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);
+          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]);
+      } 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);
+        }
+        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]);
+      }
+    } else {
+      /* ./compiling//compiling_global.nit:458 */
+      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 */
+  if (!once_value_12) {
+    fra.me.REG[6] = 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];
+    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]));
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[6]);
+    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 */
+    if (!once_value_13) {
+      fra.me.REG[2] = 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];
+      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 */
+    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 */
+    if (!once_value_14) {
+      fra.me.REG[2] = 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];
+      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 */
+    if (!once_value_15) {
+      fra.me.REG[2] = 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];
+      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);
+    REGB2 = TAG_Int(3);
+    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
+    /* ./compiling//compiling_global.nit:472 */
+    if (!once_value_16) {
+      fra.me.REG[7] = 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];
+      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]);
+    if (!once_value_17) {
+      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_17 = fra.me.REG[7];
+      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 */
+    if (!once_value_18) {
+      fra.me.REG[2] = 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];
+      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 */
+    if (!once_value_19) {
+      fra.me.REG[2] = 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];
+      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 */
+    if (!once_value_20) {
+      fra.me.REG[2] = 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];
+      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 */
+    if (!once_value_21) {
+      fra.me.REG[2] = 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];
+      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 */
+    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 */
+    if (!once_value_22) {
+      fra.me.REG[2] = 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];
+      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 {
+    REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    /* ./compiling//compiling_global.nit:479 */
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      REGB0 = TAG_Bool(fra.me.REG[4]==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);
+        REGB2 = REGB0;
+      }
+    }
+    if (UNTAG_Bool(REGB2)) {
+      REGB2 = TAG_Int(3);
+      fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:482 */
+      if (!once_value_23) {
+        fra.me.REG[2] = 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];
+        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]);
+      if (!once_value_24) {
+        fra.me.REG[2] = 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];
+        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]);
+      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 ");
+        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];
+        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]);
+      if (!once_value_26) {
+        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_26 = fra.me.REG[5];
+        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]);
+      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);
+      if (UNTAG_Bool(REGB2)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 483);
+        nit_exit(1);
       }
-      variable[17] = variable[18];
-      if (UNTAG_Bool(variable[17])) { /*if*/
-        variable[17] = TAG_Bool(( variable[15] /*p*/==NIT_NULL) || VAL_ISA( variable[15] /*p*/, COLOR_MMSrcAttribute, ID_MMSrcAttribute)) /*cast MMSrcAttribute*/;
-        if (!UNTAG_Bool(variable[17])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___MMLocalClass___compile_tables_to_c, LOCATE_compiling_global, 892); nit_exit(1);}
-        variable[18] = CALL_syntax_base___MMLocalProperty___node( variable[15] /*p*/)( variable[15] /*p*/) /*MMSrcAttribute::node*/;
-        variable[17] = variable[18];
-        variable[18] = TAG_Bool(( variable[17] /*np*/==NIT_NULL) || VAL_ISA( variable[17] /*np*/, COLOR_AAttrPropdef, ID_AAttrPropdef)) /*cast AAttrPropdef*/;
-        if (!UNTAG_Bool(variable[18])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_compiling_global___MMLocalClass___compile_tables_to_c, LOCATE_compiling_global, 894); nit_exit(1);}
-        variable[19] = CALL_parser_nodes___AAttrPropdef___n_expr( variable[17] /*np*/)( variable[17] /*np*/) /*AAttrPropdef::n_expr*/;
-        variable[18] = variable[19];
-        variable[19] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[18] /*ne*/ ==  NIT_NULL /*null*/) || (( variable[18] /*ne*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[18] /*ne*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[18] /*ne*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[18] /*ne*/)( variable[18] /*ne*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-        if (UNTAG_Bool(variable[19])) { /*if*/
-          variable[20] = CALL_compiling_methods___PExpr___compile_expr( variable[18] /*ne*/)( variable[18] /*ne*/,  variable[1] /*v*/) /*PExpr::compile_expr*/;
-          variable[19] = variable[20];
-          variable[20] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-          variable[21] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-          variable[22] = variable[21];
-          CALL_abstract_collection___SimpleCollection___add(variable[20])(variable[20], variable[22]) /*AbstractArray::add*/;
-          variable[23] = CALL_abstractmetamodel___MMLocalProperty___global( variable[15] /*p*/)( variable[15] /*p*/) /*MMLocalProperty::global*/;
-          variable[23] = CALL_compiling_base___MMGlobalProperty___attr_access(variable[23])(variable[23]) /*MMGlobalProperty::attr_access*/;
-          variable[24] = variable[23];
-          CALL_abstract_collection___SimpleCollection___add(variable[20])(variable[20], variable[24]) /*AbstractArray::add*/;
-          variable[25] = NEW_String_string___String___with_native(BOX_NativeString("(obj) = "), TAG_Int(8)); /*new String*/
-          variable[26] = variable[25];
-          CALL_abstract_collection___SimpleCollection___add(variable[20])(variable[20], variable[26]) /*AbstractArray::add*/;
-          variable[27] =  variable[19] /*e*/;
-          CALL_abstract_collection___SimpleCollection___add(variable[20])(variable[20], variable[27]) /*AbstractArray::add*/;
-          variable[28] = NEW_String_string___String___with_native(BOX_NativeString(";"), TAG_Int(1)); /*new String*/
-          variable[29] = variable[28];
-          CALL_abstract_collection___SimpleCollection___add(variable[20])(variable[20], variable[29]) /*AbstractArray::add*/;
-          variable[20] = CALL_string___Object___to_s(variable[20])(variable[20]) /*Object::to_s*/;
-          CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[20]) /*CompilerVisitor::add_instr*/;
-        } else { /*if*/
-          variable[20] = CALL_static_type___MMType___local_class( variable[16] /*t*/)( variable[16] /*t*/) /*MMType::local_class*/;
-          variable[20] = CALL_compiling_base___MMLocalClass___primitive_info(variable[20])(variable[20]) /*MMLocalClass::primitive_info*/;
-          variable[19] = variable[20];
-          variable[20] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[19] /*pi*/ ==  NIT_NULL /*null*/) || (( variable[19] /*pi*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[19] /*pi*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[19] /*pi*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[19] /*pi*/)( variable[19] /*pi*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-          variable[21] = variable[20];
-          if (UNTAG_Bool(variable[21])) { /* and */
-            variable[21] = CALL_compiling_base___PrimitiveInfo___tagged( variable[19] /*pi*/)( variable[19] /*pi*/) /*PrimitiveInfo::tagged*/;
+      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 */
+      if (UNTAG_Bool(REGB2)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 486);
+        nit_exit(1);
+      }
+      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_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 */
+      if (!once_value_27) {
+        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_27 = fra.me.REG[7];
+        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);
+      REGB2 = TAG_Int(3);
+      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:494 */
+      if (!once_value_28) {
+        fra.me.REG[6] = 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];
+        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]);
+      if (!once_value_29) {
+        fra.me.REG[6] = 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];
+        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);
+      REGB2 = TAG_Int(3);
+      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:495 */
+      if (!once_value_30) {
+        fra.me.REG[6] = 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];
+        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]);
+      if (!once_value_31) {
+        fra.me.REG[6] = 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];
+        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 */
+      if (!once_value_32) {
+        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_32 = fra.me.REG[7];
+        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 */
+      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 */
+      if (!once_value_33) {
+        fra.me.REG[7] = 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];
+        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);
+      REGB2 = TAG_Int(3);
+      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:499 */
+      if (!once_value_34) {
+        fra.me.REG[6] = 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];
+        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);
+      /* ./../lib/standard//collection//array.nit:23 */
+      if (UNTAG_Bool(REGB2)) {
+      } else {
+        fprintf(stderr, "Uninitialized attribute %s", "_length");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
+        nit_exit(1);
+      }
+      REGB2 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
+      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]);
+      if (!once_value_35) {
+        fra.me.REG[3] = BOX_NativeString(");");
+        REGB2 = TAG_Int(2);
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+        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);
+      REGB2 = TAG_Int(3);
+      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:500 */
+      if (!once_value_36) {
+        fra.me.REG[3] = BOX_NativeString("obj->vft = (classtable_elt_t*)VFT_");
+        REGB2 = TAG_Int(34);
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+        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] = 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]);
+      if (!once_value_37) {
+        fra.me.REG[3] = BOX_NativeString(";");
+        REGB2 = TAG_Int(1);
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+        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 */
+      if (!once_value_38) {
+        fra.me.REG[7] = 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];
+        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 */
+      if (!once_value_39) {
+        fra.me.REG[7] = 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];
+        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 */
+      if (!once_value_40) {
+        fra.me.REG[7] = 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];
+        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 */
+      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 */
+      if (!once_value_41) {
+        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_41 = fra.me.REG[7];
+        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]);
+      REGB2 = TAG_Int(3);
+      fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:509 */
+      if (!once_value_42) {
+        fra.me.REG[7] = 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];
+        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]);
+      if (!once_value_43) {
+        fra.me.REG[7] = 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];
+        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]);
+      REGB2 = TAG_Int(3);
+      fra.me.REG[3] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:510 */
+      if (!once_value_44) {
+        fra.me.REG[6] = 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];
+        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]);
+      if (!once_value_45) {
+        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_45 = fra.me.REG[6];
+        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);
+      if (UNTAG_Bool(REGB2)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 510);
+        nit_exit(1);
+      }
+      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 */
+      if (UNTAG_Bool(REGB2)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 513);
+        nit_exit(1);
+      }
+      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_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 */
+      if (!once_value_46) {
+        fra.me.REG[3] = BOX_NativeString("}");
+        REGB2 = TAG_Int(1);
+        fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+        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]);
+      REGB0 = TAG_Int(1);
+      REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+      REGB2 = TAG_Int(5);
+      fra.me.REG[7] = NEW_Array_array___Array___with_capacity(REGB2);
+      /* ./compiling//compiling_global.nit:521 */
+      if (!once_value_47) {
+        fra.me.REG[3] = 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];
+        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]);
+      if (!once_value_48) {
+        fra.me.REG[3] = 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];
+        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]);
+      if (!once_value_49) {
+        fra.me.REG[3] = 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];
+        register_static_object(&once_value_49);
+      } else fra.me.REG[3] = once_value_49;
+      REGB2 = TAG_Int(1);
+      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]);
+      if (!once_value_50) {
+        fra.me.REG[3] = 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];
+        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);
           }
-          variable[20] = variable[21];
-          if (UNTAG_Bool(variable[20])) { /*if*/
-            variable[21] = CALL_compiling_base___MMType___default_cvalue( variable[16] /*t*/)( variable[16] /*t*/) /*MMType::default_cvalue*/;
-            variable[20] = variable[21];
-            variable[21] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-            variable[22] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-            variable[23] = variable[22];
-            CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[23]) /*AbstractArray::add*/;
-            variable[24] = CALL_abstractmetamodel___MMLocalProperty___global( variable[15] /*p*/)( variable[15] /*p*/) /*MMLocalProperty::global*/;
-            variable[24] = CALL_compiling_base___MMGlobalProperty___attr_access(variable[24])(variable[24]) /*MMGlobalProperty::attr_access*/;
-            variable[25] = variable[24];
-            CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[25]) /*AbstractArray::add*/;
-            variable[26] = NEW_String_string___String___with_native(BOX_NativeString("(obj) = "), TAG_Int(8)); /*new String*/
-            variable[27] = variable[26];
-            CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[27]) /*AbstractArray::add*/;
-            variable[28] =  variable[20] /*default*/;
-            CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[28]) /*AbstractArray::add*/;
-            variable[29] = NEW_String_string___String___with_native(BOX_NativeString(";"), TAG_Int(1)); /*new String*/
-            variable[30] = variable[29];
-            CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[30]) /*AbstractArray::add*/;
-            variable[21] = CALL_string___Object___to_s(variable[21])(variable[21]) /*Object::to_s*/;
-            CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[21]) /*CompilerVisitor::add_instr*/;
+          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]);
       }
-      continue_94: while(0);
-      CALL_abstract_collection___Iterator___next(variable[12])(variable[12]) /*Iterator::next*/;
-    }
-    break_94: while(0);
-    variable[12] = NEW_String_string___String___with_native(BOX_NativeString("return OBJ2VAL(obj);"), TAG_Int(20)); /*new String*/
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[12]) /*CompilerVisitor::add_instr*/;
-    variable[12] = CALL_compiling_methods___CompilerVisitor___cfc( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::cfc*/;
-    CALL_compiling_methods___CFunctionContext___generate_var_decls(variable[12])(variable[12]) /*CFunctionContext::generate_var_decls*/;
-    variable[12] = CALL_compiling_base___CompilerVisitor___ctx( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::ctx*/;
-    CALL_compiling_base___CContext___append( variable[9] /*ctx_old*/)( variable[9] /*ctx_old*/, variable[12]) /*CContext::append*/;
-    CALL_compiling_base___CompilerVisitor___ctx__eq( variable[1] /*v*/)( variable[1] /*v*/,  variable[9] /*ctx_old*/) /*CompilerVisitor::ctx=*/;
-    CALL_compiling_base___CompilerVisitor___unindent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::unindent*/;
-    variable[12] = NEW_String_string___String___with_native(BOX_NativeString("}"), TAG_Int(1)); /*new String*/
-    CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[12]) /*CompilerVisitor::add_instr*/;
-    variable[13] = variable[0];
-    variable[13] = CALL_abstractmetamodel___MMLocalClass___cshe(variable[13])(variable[13]) /*MMLocalClass::cshe*/;
-    variable[13] = CALL_partial_order___PartialOrderElement___greaters(variable[13])(variable[13]) /*PartialOrderElement::greaters*/;
-    variable[13] = CALL_abstract_collection___Collection___length(variable[13])(variable[13]) /*Collection::length*/;
-    variable[13] = TAG_Int(UNTAG_Int(variable[13])+UNTAG_Int( TAG_Int(1)));
-    variable[12] = variable[13];
-    variable[14] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-    variable[15] = NEW_String_string___String___with_native(BOX_NativeString("int init_table["), TAG_Int(15)); /*new String*/
-    variable[16] = variable[15];
-    CALL_abstract_collection___SimpleCollection___add(variable[14])(variable[14], variable[16]) /*AbstractArray::add*/;
-    variable[17] =  variable[12] /*init_table_size*/;
-    variable[17] = CALL_string___Object___to_s(variable[17])(variable[17]) /*Object::to_s*/;
-    CALL_abstract_collection___SimpleCollection___add(variable[14])(variable[14], variable[17]) /*AbstractArray::add*/;
-    variable[18] = NEW_String_string___String___with_native(BOX_NativeString("] = {0"), TAG_Int(6)); /*new String*/
-    variable[19] = variable[18];
-    CALL_abstract_collection___SimpleCollection___add(variable[14])(variable[14], variable[19]) /*AbstractArray::add*/;
-    variable[20] = NEW_String_string___String___with_native(BOX_NativeString(", 0"), TAG_Int(3)); /*new String*/
-    variable[21] = TAG_Int(UNTAG_Int( variable[12] /*init_table_size*/)-UNTAG_Int( TAG_Int(1)));
-    variable[20] = CALL_string___String_____star(variable[20])(variable[20], variable[21]) /*String::**/;
-    variable[21] = variable[20];
-    CALL_abstract_collection___SimpleCollection___add(variable[14])(variable[14], variable[21]) /*AbstractArray::add*/;
-    variable[22] = NEW_String_string___String___with_native(BOX_NativeString("};"), TAG_Int(2)); /*new String*/
-    variable[23] = variable[22];
-    CALL_abstract_collection___SimpleCollection___add(variable[14])(variable[14], variable[23]) /*AbstractArray::add*/;
-    variable[14] = CALL_string___Object___to_s(variable[14])(variable[14]) /*Object::to_s*/;
-    variable[13] = variable[14];
-    variable[14] = variable[0];
-    variable[14] = CALL_abstractmetamodel___MMLocalClass___global_properties(variable[14])(variable[14]) /*MMLocalClass::global_properties*/;
-    variable[14] = CALL_abstract_collection___Collection___iterator(variable[14])(variable[14]) /*Collection::iterator*/;
-    while (true) { /*for*/
-      variable[15] = CALL_abstract_collection___Iterator___is_ok(variable[14])(variable[14]) /*Iterator::is_ok*/;
-      if (!UNTAG_Bool(variable[15])) break; /*for*/
-      variable[15] = CALL_abstract_collection___Iterator___item(variable[14])(variable[14]) /*Iterator::item*/;
-      variable[16] = variable[15];
-      variable[18] = variable[0];
-      variable[18] = CALL_abstractmetamodel___MMLocalClass_____bra(variable[18])(variable[18],  variable[16] /*g*/) /*MMLocalClass::[]*/;
-      variable[17] = variable[18];
-      variable[18] = CALL_abstractmetamodel___MMLocalProperty___global( variable[17] /*p*/)( variable[17] /*p*/) /*MMLocalProperty::global*/;
-      variable[19] = variable[0];
-      variable[18] = CALL_abstractmetamodel___MMGlobalProperty___is_init_for(variable[18])(variable[18], variable[19]) /*MMGlobalProperty::is_init_for*/;
-      if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[18])))) { /*if*/
-        goto continue_95;
+      label61: while(0);
+    } else {
+      REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+      /* ./compiling//compiling_global.nit:541 */
+      if (UNTAG_Bool(REGB2)) {
+        fprintf(stderr, "Reciever is null");
+        fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 541);
+        nit_exit(1);
       }
-      variable[19] = NEW_Array_array___Array___init(); /*new Array[String]*/
-      variable[18] = variable[19];
-      variable[20] = NEW_Array_array___Array___with_capacity(TAG_Int(1)); /*new Array[String]*/
-      variable[21] = NEW_String_string___String___with_native(BOX_NativeString("self"), TAG_Int(4)); /*new String*/
-      CALL_abstract_collection___SimpleCollection___add(variable[20])(variable[20], variable[21]) /*AbstractArray::add*/;
-      variable[19] = variable[20];
-      variable[20] = CALL_static_type___MMLocalProperty___signature( variable[17] /*p*/)( variable[17] /*p*/) /*MMLocalProperty::signature*/;
-      variable[20] = CALL_static_type___MMSignature___arity(variable[20])(variable[20]) /*MMSignature::arity*/;
-      variable[21] = NEW_Range_range___Range___without_last( TAG_Int(0), variable[20]); /*new Range[Int]*/
-      variable[20] = variable[21];
-      variable[20] = CALL_abstract_collection___Collection___iterator(variable[20])(variable[20]) /*Range::iterator*/;
-      while (true) { /*for*/
-        variable[21] = CALL_abstract_collection___Iterator___is_ok(variable[20])(variable[20]) /*Iterator::is_ok*/;
-        if (!UNTAG_Bool(variable[21])) break; /*for*/
-        variable[21] = CALL_abstract_collection___Iterator___item(variable[20])(variable[20]) /*Iterator::item*/;
-        variable[22] = variable[21];
-        variable[23] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-        variable[24] = NEW_String_string___String___with_native(BOX_NativeString("val_t p"), TAG_Int(7)); /*new String*/
-        variable[25] = variable[24];
-        CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23], variable[25]) /*AbstractArray::add*/;
-        variable[26] =  variable[22] /*i*/;
-        variable[26] = CALL_string___Object___to_s(variable[26])(variable[26]) /*Object::to_s*/;
-        CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23], variable[26]) /*AbstractArray::add*/;
-        variable[27] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-        variable[28] = variable[27];
-        CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23], variable[28]) /*AbstractArray::add*/;
-        variable[23] = CALL_string___Object___to_s(variable[23])(variable[23]) /*Object::to_s*/;
-        CALL_abstract_collection___SimpleCollection___add( variable[18] /*params*/)( variable[18] /*params*/, variable[23]) /*AbstractArray::add*/;
-        variable[23] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-        variable[24] = NEW_String_string___String___with_native(BOX_NativeString("p"), TAG_Int(1)); /*new String*/
-        variable[25] = variable[24];
-        CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23], variable[25]) /*AbstractArray::add*/;
-        variable[26] =  variable[22] /*i*/;
-        variable[26] = CALL_string___Object___to_s(variable[26])(variable[26]) /*Object::to_s*/;
-        CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23], variable[26]) /*AbstractArray::add*/;
-        variable[27] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-        variable[28] = variable[27];
-        CALL_abstract_collection___SimpleCollection___add(variable[23])(variable[23], variable[28]) /*AbstractArray::add*/;
-        variable[23] = CALL_string___Object___to_s(variable[23])(variable[23]) /*Object::to_s*/;
-        CALL_abstract_collection___SimpleCollection___add( variable[19] /*args*/)( variable[19] /*args*/, variable[23]) /*AbstractArray::add*/;
-        continue_96: while(0);
-        CALL_abstract_collection___Iterator___next(variable[20])(variable[20]) /*Iterator::next*/;
+      REGB2 = CALL_primitive_info___PrimitiveInfo___tagged(fra.me.REG[4])(fra.me.REG[4]);
+      REGB2 = TAG_Bool(!UNTAG_Bool(REGB2));
+      if (UNTAG_Bool(REGB2)) {
+        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+        /* ./compiling//compiling_global.nit:542 */
+        if (UNTAG_Bool(REGB2)) {
+          fprintf(stderr, "Reciever is null");
+          fprintf(stderr, " (%s:%d)\n", LOCATE_compiling_global, 542);
+          nit_exit(1);
+        }
+        fra.me.REG[4] = CALL_primitive_info___PrimitiveInfo___cname(fra.me.REG[4])(fra.me.REG[4]);
+        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);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          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] = 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]);
+        if (!once_value_63) {
+          fra.me.REG[7] = BOX_NativeString("");
+          REGB2 = TAG_Int(0);
+          fra.me.REG[7] = NEW_String_string___String___with_native(fra.me.REG[7], REGB2);
+          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[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);
+        REGB2 = TAG_Int(5);
+        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
+        /* ./compiling//compiling_global.nit:544 */
+        if (!once_value_64) {
+          fra.me.REG[6] = 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];
+          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]);
+        if (!once_value_65) {
+          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_65 = fra.me.REG[6];
+          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]);
+        if (!once_value_66) {
+          fra.me.REG[4] = 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];
+          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]);
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+        /* ./compiling//compiling_global.nit:545 */
+        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);
+        REGB2 = TAG_Int(7);
+        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
+        /* ./compiling//compiling_global.nit:546 */
+        if (!once_value_67) {
+          fra.me.REG[4] = 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];
+          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]);
+        if (!once_value_68) {
+          fra.me.REG[4] = 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];
+          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]);
+        if (!once_value_69) {
+          fra.me.REG[4] = 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];
+          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]);
+        if (!once_value_70) {
+          fra.me.REG[3] = BOX_NativeString("));");
+          REGB2 = TAG_Int(3);
+          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+          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]);
+        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);
+        REGB2 = TAG_Int(3);
+        fra.me.REG[5] = NEW_Array_array___Array___with_capacity(REGB2);
+        /* ./compiling//compiling_global.nit:547 */
+        if (!once_value_71) {
+          fra.me.REG[3] = BOX_NativeString("box->vft = VFT_");
+          REGB2 = TAG_Int(15);
+          fra.me.REG[3] = NEW_String_string___String___with_native(fra.me.REG[3], REGB2);
+          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[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_72) {
+          fra.me.REG[0] = BOX_NativeString(";");
+          REGB2 = TAG_Int(1);
+          fra.me.REG[0] = NEW_String_string___String___with_native(fra.me.REG[0], REGB2);
+          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]);
+        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 */
+        if (!once_value_73) {
+          fra.me.REG[5] = 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];
+          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]);
+        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 */
+        if (!once_value_74) {
+          fra.me.REG[5] = 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];
+          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]);
+        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 */
+        if (!once_value_75) {
+          fra.me.REG[5] = 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];
+          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]);
+        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 */
+        if (!once_value_76) {
+          fra.me.REG[5] = 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];
+          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]);
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
+        /* ./compiling//compiling_global.nit:552 */
+        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 */
+        if (!once_value_77) {
+          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_77 = fra.me.REG[5];
+          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]);
+        CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[7]);
       }
-      break_96: while(0);
-      variable[20] = NEW_String_string___String___with_native(BOX_NativeString("init_table"), TAG_Int(10)); /*new String*/
-      CALL_abstract_collection___SimpleCollection___add( variable[19] /*args*/)( variable[19] /*args*/, variable[20]) /*AbstractArray::add*/;
-      variable[21] = NEW_Array_array___Array___with_capacity(TAG_Int(7)); /*new Array[String]*/
-      variable[22] = NEW_String_string___String___with_native(BOX_NativeString("val_t NEW_"), TAG_Int(10)); /*new String*/
-      variable[23] = variable[22];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[23]) /*AbstractArray::add*/;
-      variable[24] = variable[0];
-      variable[25] = variable[24];
-      variable[25] = CALL_string___Object___to_s(variable[25])(variable[25]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[25]) /*AbstractArray::add*/;
-      variable[26] = NEW_String_string___String___with_native(BOX_NativeString("_"), TAG_Int(1)); /*new String*/
-      variable[27] = variable[26];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[27]) /*AbstractArray::add*/;
-      variable[28] = CALL_abstractmetamodel___MMLocalProperty___global( variable[17] /*p*/)( variable[17] /*p*/) /*MMLocalProperty::global*/;
-      variable[28] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[28])(variable[28]) /*MMGlobalProperty::intro*/;
-      variable[28] = CALL_compiling_base___MMLocalProperty___cname(variable[28])(variable[28]) /*MMLocalProperty::cname*/;
-      variable[29] = variable[28];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[29]) /*AbstractArray::add*/;
-      variable[30] = NEW_String_string___String___with_native(BOX_NativeString("("), TAG_Int(1)); /*new String*/
-      variable[31] = variable[30];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[31]) /*AbstractArray::add*/;
-      variable[32] = NEW_String_string___String___with_native(BOX_NativeString(", "), TAG_Int(2)); /*new String*/
-      variable[32] = CALL_string___Collection___join( variable[18] /*params*/)( variable[18] /*params*/, variable[32]) /*Collection::join*/;
-      variable[33] = variable[32];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[33]) /*AbstractArray::add*/;
-      variable[34] = NEW_String_string___String___with_native(BOX_NativeString(") {"), TAG_Int(3)); /*new String*/
-      variable[35] = variable[34];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[35]) /*AbstractArray::add*/;
-      variable[21] = CALL_string___Object___to_s(variable[21])(variable[21]) /*Object::to_s*/;
-      variable[20] = variable[21];
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/,  variable[20] /*s*/) /*CompilerVisitor::add_instr*/;
-      CALL_compiling_base___CompilerVisitor___indent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::indent*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/,  variable[13] /*init_table_decl*/) /*CompilerVisitor::add_instr*/;
-      variable[21] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[22] = NEW_String_string___String___with_native(BOX_NativeString("val_t self = NEW_"), TAG_Int(17)); /*new String*/
-      variable[23] = variable[22];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[23]) /*AbstractArray::add*/;
-      variable[24] = variable[0];
-      variable[24] = CALL_abstractmetamodel___MMLocalClass___name(variable[24])(variable[24]) /*MMLocalClass::name*/;
-      variable[25] = variable[24];
-      variable[25] = CALL_string___Object___to_s(variable[25])(variable[25]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[25]) /*AbstractArray::add*/;
-      variable[26] = NEW_String_string___String___with_native(BOX_NativeString("();"), TAG_Int(3)); /*new String*/
-      variable[27] = variable[26];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[27]) /*AbstractArray::add*/;
-      variable[21] = CALL_string___Object___to_s(variable[21])(variable[21]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[21]) /*CompilerVisitor::add_instr*/;
-      variable[21] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-      variable[22] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[23] = variable[22];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[23]) /*AbstractArray::add*/;
-      variable[24] = CALL_compiling_base___MMLocalProperty___cname( variable[17] /*p*/)( variable[17] /*p*/) /*MMLocalProperty::cname*/;
-      variable[25] = variable[24];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[25]) /*AbstractArray::add*/;
-      variable[26] = NEW_String_string___String___with_native(BOX_NativeString("("), TAG_Int(1)); /*new String*/
-      variable[27] = variable[26];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[27]) /*AbstractArray::add*/;
-      variable[28] = NEW_String_string___String___with_native(BOX_NativeString(", "), TAG_Int(2)); /*new String*/
-      variable[28] = CALL_string___Collection___join( variable[19] /*args*/)( variable[19] /*args*/, variable[28]) /*Collection::join*/;
-      variable[29] = variable[28];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[29]) /*AbstractArray::add*/;
-      variable[30] = NEW_String_string___String___with_native(BOX_NativeString(");"), TAG_Int(2)); /*new String*/
-      variable[31] = variable[30];
-      CALL_abstract_collection___SimpleCollection___add(variable[21])(variable[21], variable[31]) /*AbstractArray::add*/;
-      variable[21] = CALL_string___Object___to_s(variable[21])(variable[21]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[21]) /*CompilerVisitor::add_instr*/;
-      variable[21] = NEW_String_string___String___with_native(BOX_NativeString("return self;"), TAG_Int(12)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[21]) /*CompilerVisitor::add_instr*/;
-      CALL_compiling_base___CompilerVisitor___unindent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::unindent*/;
-      variable[21] = NEW_String_string___String___with_native(BOX_NativeString("}"), TAG_Int(1)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[21]) /*CompilerVisitor::add_instr*/;
-      continue_95: while(0);
-      CALL_abstract_collection___Iterator___next(variable[14])(variable[14]) /*Iterator::next*/;
     }
-    break_95: while(0);
-  } else { /*if*/
-    variable[8] = CALL_compiling_base___PrimitiveInfo___tagged( variable[7] /*pi*/)( variable[7] /*pi*/) /*PrimitiveInfo::tagged*/;
-    if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[8])))) { /*if*/
-      variable[9] = CALL_compiling_base___PrimitiveInfo___cname( variable[7] /*pi*/)( variable[7] /*pi*/) /*PrimitiveInfo::cname*/;
-      variable[8] = variable[9];
-      variable[10] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString("struct TBOX_"), TAG_Int(12)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[12]) /*AbstractArray::add*/;
-      variable[13] = variable[0];
-      variable[13] = CALL_abstractmetamodel___MMLocalClass___name(variable[13])(variable[13]) /*MMLocalClass::name*/;
-      variable[14] = variable[13];
-      variable[14] = CALL_string___Object___to_s(variable[14])(variable[14]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[14]) /*AbstractArray::add*/;
-      variable[15] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[16] = variable[15];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[16]) /*AbstractArray::add*/;
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      variable[9] = variable[10];
-      variable[10] = NEW_Array_array___Array___with_capacity(TAG_Int(5)); /*new Array[String]*/
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString("val_t BOX_"), TAG_Int(10)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[12]) /*AbstractArray::add*/;
-      variable[13] = variable[0];
-      variable[13] = CALL_abstractmetamodel___MMLocalClass___name(variable[13])(variable[13]) /*MMLocalClass::name*/;
-      variable[14] = variable[13];
-      variable[14] = CALL_string___Object___to_s(variable[14])(variable[14]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[14]) /*AbstractArray::add*/;
-      variable[15] = NEW_String_string___String___with_native(BOX_NativeString("("), TAG_Int(1)); /*new String*/
-      variable[16] = variable[15];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[16]) /*AbstractArray::add*/;
-      variable[17] =  variable[8] /*t*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[17]) /*AbstractArray::add*/;
-      variable[18] = NEW_String_string___String___with_native(BOX_NativeString(" val) {"), TAG_Int(7)); /*new String*/
-      variable[19] = variable[18];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[19]) /*AbstractArray::add*/;
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
-      CALL_compiling_base___CompilerVisitor___indent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::indent*/;
-      variable[10] = NEW_Array_array___Array___with_capacity(TAG_Int(7)); /*new Array[String]*/
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[12]) /*AbstractArray::add*/;
-      variable[13] =  variable[9] /*tbox*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[13]) /*AbstractArray::add*/;
-      variable[14] = NEW_String_string___String___with_native(BOX_NativeString(" *box = ("), TAG_Int(9)); /*new String*/
-      variable[15] = variable[14];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[15]) /*AbstractArray::add*/;
-      variable[16] =  variable[9] /*tbox*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[16]) /*AbstractArray::add*/;
-      variable[17] = NEW_String_string___String___with_native(BOX_NativeString("*)alloc(sizeof("), TAG_Int(15)); /*new String*/
-      variable[18] = variable[17];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[18]) /*AbstractArray::add*/;
-      variable[19] =  variable[9] /*tbox*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[19]) /*AbstractArray::add*/;
-      variable[20] = NEW_String_string___String___with_native(BOX_NativeString("));"), TAG_Int(3)); /*new String*/
-      variable[21] = variable[20];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[21]) /*AbstractArray::add*/;
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
-      variable[10] = NEW_Array_array___Array___with_capacity(TAG_Int(3)); /*new Array[String]*/
-      variable[11] = NEW_String_string___String___with_native(BOX_NativeString("box->vft = VFT_"), TAG_Int(15)); /*new String*/
-      variable[12] = variable[11];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[12]) /*AbstractArray::add*/;
-      variable[13] = variable[0];
-      variable[13] = CALL_abstractmetamodel___MMLocalClass___name(variable[13])(variable[13]) /*MMLocalClass::name*/;
-      variable[14] = variable[13];
-      variable[14] = CALL_string___Object___to_s(variable[14])(variable[14]) /*Object::to_s*/;
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[14]) /*AbstractArray::add*/;
-      variable[15] = NEW_String_string___String___with_native(BOX_NativeString(";"), TAG_Int(1)); /*new String*/
-      variable[16] = variable[15];
-      CALL_abstract_collection___SimpleCollection___add(variable[10])(variable[10], variable[16]) /*AbstractArray::add*/;
-      variable[10] = CALL_string___Object___to_s(variable[10])(variable[10]) /*Object::to_s*/;
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
-      variable[10] = NEW_String_string___String___with_native(BOX_NativeString("box->val = val;"), TAG_Int(15)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
-      variable[10] = NEW_String_string___String___with_native(BOX_NativeString("return OBJ2VAL(box);"), TAG_Int(20)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
-      CALL_compiling_base___CompilerVisitor___unindent( variable[1] /*v*/)( variable[1] /*v*/) /*CompilerVisitor::unindent*/;
-      variable[10] = NEW_String_string___String___with_native(BOX_NativeString("}"), TAG_Int(1)); /*new String*/
-      CALL_compiling_base___CompilerVisitor___add_instr( variable[1] /*v*/)( variable[1] /*v*/, variable[10]) /*CompilerVisitor::add_instr*/;
+  }
+  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;
+  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_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 */
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_compiling_global;
+  fra.me.line = 559;
+  fra.me.meth = LOCATE_compiling_global___MMMethod___compile_property_to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = CALL_icode_base___MMMethod___iroutine(fra.me.REG[0])(fra.me.REG[0]);
+  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);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  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);
+  }
+  fra.me.REG[3] = NIT_NULL;
+  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");
+      REGB0 = TAG_Int(15);
+      fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB0);
+      once_value_1 = fra.me.REG[4];
+      register_static_object(&once_value_1);
+    } else fra.me.REG[4] = once_value_1;
+    fra.me.REG[3] = fra.me.REG[4];
+  }
+  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);
+  }
+  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 */
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Int(3);
+    fra.me.REG[6] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:574 */
+    if (!once_value_2) {
+      fra.me.REG[7] = 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];
+      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]);
+    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]);
+    if (!once_value_3) {
+      fra.me.REG[7] = 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];
+      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);
+    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);
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      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]);
+    if (!once_value_5) {
+      fra.me.REG[8] = BOX_NativeString(" = VAL2OBJ(");
+      REGB0 = TAG_Int(11);
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      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] = CALL_abstract_collection___Collection___first(fra.me.REG[3])(fra.me.REG[3]);
+    array___Array___add(fra.me.REG[7], fra.me.REG[8]);
+    if (!once_value_6) {
+      fra.me.REG[8] = BOX_NativeString(")->vft[");
+      REGB0 = TAG_Int(7);
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      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] = 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]);
+    if (!once_value_7) {
+      fra.me.REG[8] = BOX_NativeString("].i;");
+      REGB0 = TAG_Int(4);
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      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[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);
+    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);
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      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]);
+    if (!once_value_9) {
+      fra.me.REG[8] = BOX_NativeString("]) return;");
+      REGB0 = TAG_Int(10);
+      fra.me.REG[8] = NEW_String_string___String___with_native(fra.me.REG[8], REGB0);
+      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[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]);
+  }
+  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);
+  }
+  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 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Int(0);
+    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
+    REGB0 = TAG_Int(3);
+    fra.me.REG[2] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:582 */
+    if (!once_value_10) {
+      fra.me.REG[6] = 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];
+      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]);
+    if (!once_value_11) {
+      fra.me.REG[4] = 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];
+      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]);
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  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);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Int(0);
+    fra.me.REG[0] = NEW_Array_array___Array___with_capacity(REGB0);
+    /* ./compiling//compiling_global.nit:585 */
+    if (!once_value_12) {
+      fra.me.REG[2] = 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];
+      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]);
+    CALL_compiling_base___CompilerVisitor___add_instr(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  } else {
+    REGB0 = TAG_Int(2);
+    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 ");
+      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];
+      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]);
+    if (!once_value_14) {
+      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_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]);
+    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 */
+  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 */
+  if (!once_value_15) {
+    fra.me.REG[0] = BOX_NativeString("}");
+    REGB0 = TAG_Int(1);
+    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]);
+  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]);
   }
-  return_label91: while(false);
-  tracehead = trace.prev;
+  label16: while(0);
+  stack_frame_head = fra.me.prev;
   return;
 }