metamodel: new MMMethod::is_intern & is_abstract
[nit.git] / c_src / abstractmetamodel._sep.c
index 0b41ebc..0422f8a 100644 (file)
 /* This C file is generated by NIT to compile module abstractmetamodel. */
 #include "abstractmetamodel._sep.h"
 void abstractmetamodel___MMContext___init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___init, 26};
-  trace.prev = tracehead; tracehead = &trace;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMContext].i]) return;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMContext].i] = 1;
+  struct trace_t trace = {NULL, NULL, 26, LOCATE_abstractmetamodel___MMContext___init};
+  val_t variable[2];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMContext].i]) return;
+  /* Register variable[1]: Method return value and escape marker */
+  return_label0: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMContext].i] = 1;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMContext___module_hierarchy(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___module_hierarchy, 28};
+  struct trace_t trace = {NULL, NULL, 28, LOCATE_abstractmetamodel___MMContext___module_hierarchy};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMContext____module_hierarchy( self) /*MMContext::_module_hierarchy*/;
 }
 val_t abstractmetamodel___MMContext___class_hierarchy(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___class_hierarchy, 31};
+  struct trace_t trace = {NULL, NULL, 31, LOCATE_abstractmetamodel___MMContext___class_hierarchy};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMContext____class_hierarchy( self) /*MMContext::_class_hierarchy*/;
 }
 val_t abstractmetamodel___MMContext___modules(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___modules, 38};
+  struct trace_t trace = {NULL, NULL, 38, LOCATE_abstractmetamodel___MMContext___modules};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMContext____modules( self) /*MMContext::_modules*/;
 }
 void abstractmetamodel___MMContext___add_module(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___add_module, 41};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable1 /*supers*/ ==  NIT_NULL /*null*/) || (( variable1 /*supers*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*supers*/,COLOR_kernel___Object_____eqeq))( variable1 /*supers*/,  NIT_NULL /*null*/) /*Array::==*/)))));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMContext___add_module, 44); nit_exit(1);}
-  variable2 = ATTR_abstractmetamodel___MMContext____module_hierarchy( self) /*MMContext::_module_hierarchy*/;
-  variable3 = ATTR_abstractmetamodel___MMContext____module_hierarchy( self) /*MMContext::_module_hierarchy*/;
-  variable3 = ((partial_order___PartialOrder___select_smallests_t)CALL(variable3,COLOR_partial_order___PartialOrder___select_smallests))(variable3,  variable1 /*supers*/) /*PartialOrder::select_smallests*/;
-  ((partial_order___PartialOrder___add_t)CALL(variable2,COLOR_partial_order___PartialOrder___add))(variable2,  variable0 /*module*/, variable3) /*PartialOrder::add*/;
-  variable2 = ((abstractmetamodel___MMModule___name_t)CALL( variable0 /*module*/,COLOR_abstractmetamodel___MMModule___name))( variable0 /*module*/) /*MMModule::name*/;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable2 ==  NIT_NULL /*null*/) || ((variable2 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable2,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable2, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable2,COLOR_kernel___Object_____eqeq))(variable2,  NIT_NULL /*null*/) /*Symbol::==*/)))))));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMContext___add_module, 46); nit_exit(1);}
-  variable2 = ATTR_abstractmetamodel___MMContext____modules( self) /*MMContext::_modules*/;
-  ((array___AbstractArray___add_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add))(variable2,  variable0 /*module*/) /*Array::add*/;
-  variable2 = ATTR_abstractmetamodel___MMContext____module_hierarchy( self) /*MMContext::_module_hierarchy*/;
-  variable2 = ((partial_order___PartialOrder_____bra_t)CALL(variable2,COLOR_partial_order___PartialOrder_____bra))(variable2,  variable0 /*module*/) /*PartialOrder::[]*/;
-  ATTR_abstractmetamodel___MMModule____mhe( variable0 /*module*/) /*MMModule::_mhe*/ = variable2;
+  struct trace_t trace = {NULL, NULL, 41, LOCATE_abstractmetamodel___MMContext___add_module};
+  val_t variable[6];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Method return value and escape marker */
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*supers*/ ==  NIT_NULL /*null*/) || (( variable[2] /*supers*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[2] /*supers*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*supers*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[2] /*supers*/)( variable[2] /*supers*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMContext___add_module, LOCATE_abstractmetamodel, 44); nit_exit(1);}
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMContext____module_hierarchy(variable[0]) /*MMContext::_module_hierarchy*/;
+  /* Register variable[5]: Result */
+  variable[5] = ATTR_abstractmetamodel___MMContext____module_hierarchy(variable[0]) /*MMContext::_module_hierarchy*/;
+  /* Register variable[5]: Result */
+  variable[5] = CALL_partial_order___PartialOrder___select_smallests(variable[5])(variable[5],  variable[2] /*supers*/) /*PartialOrder::select_smallests*/;
+  CALL_partial_order___PartialOrder___add(variable[4])(variable[4],  variable[1] /*module*/, variable[5]) /*PartialOrder::add*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMModule___name( variable[1] /*module*/)( variable[1] /*module*/) /*MMModule::name*/;
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(!UNTAG_Bool(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])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMContext___add_module, LOCATE_abstractmetamodel, 46); nit_exit(1);}
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMContext____modules(variable[0]) /*MMContext::_modules*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4],  variable[1] /*module*/) /*AbstractArray::add*/;
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMContext____module_hierarchy(variable[0]) /*MMContext::_module_hierarchy*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_partial_order___PartialOrder_____bra(variable[4])(variable[4],  variable[1] /*module*/) /*PartialOrder::[]*/;
+  ATTR_abstractmetamodel___MMModule____mhe( variable[1] /*module*/) /*MMModule::_mhe*/ = variable[4];
+  return_label1: while(false);
   tracehead = trace.prev;
   return;
 }
 void abstractmetamodel___MMContext___add_global_class(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___add_global_class, 51};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMContext____global_classes( self) /*MMContext::_global_classes*/;
-  ((array___AbstractArray___add_t)CALL(variable1,COLOR_abstract_collection___SimpleCollection___add))(variable1,  variable0 /*c*/) /*Array::add*/;
+  struct trace_t trace = {NULL, NULL, 51, LOCATE_abstractmetamodel___MMContext___add_global_class};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMContext____global_classes(variable[0]) /*MMContext::_global_classes*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3],  variable[1] /*c*/) /*AbstractArray::add*/;
+  return_label2: while(false);
   tracehead = trace.prev;
   return;
 }
 void abstractmetamodel___MMContext___add_local_class(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMContext___add_local_class, 54};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
-    val_t variable5;
-    val_t variable6;
-        val_t variable7;
-        val_t variable8;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable1 /*sup*/ ==  NIT_NULL /*null*/) || (( variable1 /*sup*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*sup*/,COLOR_kernel___Object_____eqeq))( variable1 /*sup*/,  NIT_NULL /*null*/) /*Array::==*/)))));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMContext___add_local_class, 57); nit_exit(1);}
-  variable3 = NEW_array___Array___init(); /*new Array[MMLocalClass]*/
-  variable2 = variable3;
-  variable4 = NEW_array___Array___init(); /*new Array[String]*/
-  variable3 = variable4;
-  variable4 = ((array___AbstractArray___iterator_t)CALL( variable1 /*sup*/,COLOR_abstract_collection___Collection___iterator))( variable1 /*sup*/) /*Array::iterator*/;
+  struct trace_t trace = {NULL, NULL, 54, LOCATE_abstractmetamodel___MMContext___add_local_class};
+  val_t variable[13];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Method return value and escape marker */
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*sup*/ ==  NIT_NULL /*null*/) || (( variable[2] /*sup*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[2] /*sup*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*sup*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[2] /*sup*/)( variable[2] /*sup*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMContext___add_local_class, LOCATE_abstractmetamodel, 57); nit_exit(1);}
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = NEW_Array_array___Array___init() /*new Array[MMLocalClass]*/;
+  variable[4] = variable[5];
+  /* Register variable[5]: Local variable */
+  /* Register variable[6]: Result */
+  variable[6] = NEW_Array_array___Array___init() /*new Array[String]*/;
+  variable[5] = variable[6];
+  /* Register variable[6]: For iterator */
+  variable[6] = CALL_abstract_collection___Collection___iterator( variable[2] /*sup*/)( variable[2] /*sup*/) /*AbstractArrayRead::iterator*/;
   while (true) { /*for*/
-    variable5 = ((array___ArrayIterator___is_ok_t)CALL(variable4,COLOR_abstract_collection___Iterator___is_ok))(variable4) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable5)) break; /*for*/
-    variable5 = ((array___ArrayIterator___item_t)CALL(variable4,COLOR_abstract_collection___Iterator___item))(variable4) /*ArrayIterator::item*/;
-    variable6 = TAG_Bool(( variable5 /*s*/==NIT_NULL) || VAL_ISA( variable5 /*s*/, COLOR_MMConcreteClass, ID_MMConcreteClass)) /*cast MMConcreteClass*/;
-    if (UNTAG_Bool(variable6)) { /*if*/
-      ((array___AbstractArray___add_t)CALL( variable2 /*csup*/,COLOR_abstract_collection___SimpleCollection___add))( variable2 /*csup*/,  variable5 /*s*/) /*Array::add*/;
+    /* Register variable[7]: For 'is_ok' result */
+    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*/ /* Ensure var: For item*/;
+    /* Register variable[8]: Local variable */
+    variable[8] = variable[7];
+    /* Register variable[9]: Result */
+    variable[9] = TAG_Bool(( variable[8] /*s*/==NIT_NULL) || VAL_ISA( variable[8] /*s*/, COLOR_MMConcreteClass, ID_MMConcreteClass)) /*cast MMConcreteClass*/;
+    if (UNTAG_Bool(variable[9])) { /*if*/
+      CALL_abstract_collection___SimpleCollection___add( variable[4] /*csup*/)( variable[4] /*csup*/,  variable[8] /*s*/) /*AbstractArray::add*/;
     } else { /*if*/
-      variable6 = ((abstractmetamodel___MMLocalClass___che_t)CALL( variable5 /*s*/,COLOR_abstractmetamodel___MMLocalClass___che))( variable5 /*s*/) /*MMLocalClass::che*/;
-      variable6 = ((partial_order___PartialOrderElement___direct_greaters_t)CALL(variable6,COLOR_partial_order___PartialOrderElement___direct_greaters))(variable6) /*PartialOrderElement::direct_greaters*/;
-      variable6 = ((array___AbstractArray___iterator_t)CALL(variable6,COLOR_abstract_collection___Collection___iterator))(variable6) /*Array::iterator*/;
+      /* Register variable[9]: Result */
+      variable[9] = CALL_abstractmetamodel___MMLocalClass___che( variable[8] /*s*/)( variable[8] /*s*/) /*MMLocalClass::che*/;
+      /* Register variable[9]: Result */
+      variable[9] = CALL_partial_order___PartialOrderElement___direct_greaters(variable[9])(variable[9]) /*PartialOrderElement::direct_greaters*/;
+      /* Register variable[9]: For iterator */
+      variable[9] = CALL_abstract_collection___Collection___iterator(variable[9])(variable[9]) /*AbstractArrayRead::iterator*/;
       while (true) { /*for*/
-        variable7 = ((array___ArrayIterator___is_ok_t)CALL(variable6,COLOR_abstract_collection___Iterator___is_ok))(variable6) /*ArrayIterator::is_ok*/;
-        if (!UNTAG_Bool(variable7)) break; /*for*/
-        variable7 = ((array___ArrayIterator___item_t)CALL(variable6,COLOR_abstract_collection___Iterator___item))(variable6) /*ArrayIterator::item*/;
-        variable8 = ((array___AbstractArray___has_t)CALL( variable2 /*csup*/,COLOR_abstract_collection___Collection___has))( variable2 /*csup*/,  variable7 /*ss*/) /*Array::has*/;
-        if (UNTAG_Bool(variable8)) { /*if*/
+        /* Register variable[10]: For 'is_ok' result */
+        variable[10] = CALL_abstract_collection___Iterator___is_ok(variable[9])(variable[9]) /*ArrayIterator::is_ok*/;
+        if (!UNTAG_Bool(variable[10])) break; /*for*/
+        variable[10] = CALL_abstract_collection___Iterator___item(variable[9])(variable[9]) /*ArrayIterator::item*/ /* Ensure var: For item*/;
+        /* Register variable[11]: Local variable */
+        variable[11] = variable[10];
+        /* Register variable[12]: Result */
+        variable[12] = CALL_abstract_collection___Collection___has( variable[4] /*csup*/)( variable[4] /*csup*/,  variable[11] /*ss*/) /*AbstractArrayRead::has*/;
+        if (UNTAG_Bool(variable[12])) { /*if*/
           goto continue_5;
         }
-        ((array___AbstractArray___add_t)CALL( variable2 /*csup*/,COLOR_abstract_collection___SimpleCollection___add))( variable2 /*csup*/,  variable7 /*ss*/) /*Array::add*/;
+        CALL_abstract_collection___SimpleCollection___add( variable[4] /*csup*/)( variable[4] /*csup*/,  variable[11] /*ss*/) /*AbstractArray::add*/;
         continue_5: while(0);
-        ((array___ArrayIterator___next_t)CALL(variable6,COLOR_abstract_collection___Iterator___next))(variable6) /*ArrayIterator::next*/;
+        CALL_abstract_collection___Iterator___next(variable[9])(variable[9]) /*ArrayIterator::next*/;
       }
       break_5: while(0);
     }
     continue_4: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable4,COLOR_abstract_collection___Iterator___next))(variable4) /*ArrayIterator::next*/;
+    CALL_abstract_collection___Iterator___next(variable[6])(variable[6]) /*ArrayIterator::next*/;
   }
   break_4: while(0);
-  variable5 = ATTR_abstractmetamodel___MMContext____class_hierarchy( self) /*MMContext::_class_hierarchy*/;
-  variable5 = ((partial_order___PartialOrder___add_t)CALL(variable5,COLOR_partial_order___PartialOrder___add))(variable5,  variable0 /*c*/,  variable2 /*csup*/) /*PartialOrder::add*/;
-  variable4 = variable5;
-  ATTR_abstractmetamodel___MMLocalClass____che( variable0 /*c*/) /*MMLocalClass::_che*/ =  variable4 /*che*/;
+  /* Register variable[6]: Local variable */
+  /* Register variable[7]: Result */
+  variable[7] = ATTR_abstractmetamodel___MMContext____class_hierarchy(variable[0]) /*MMContext::_class_hierarchy*/;
+  /* Register variable[7]: Result */
+  variable[7] = CALL_partial_order___PartialOrder___add(variable[7])(variable[7],  variable[1] /*c*/,  variable[4] /*csup*/) /*PartialOrder::add*/;
+  variable[6] = variable[7];
+  ATTR_abstractmetamodel___MMLocalClass____che( variable[1] /*c*/) /*MMLocalClass::_che*/ =  variable[6] /*che*/;
+  return_label3: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMDirectory___name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___name, 77};
+  struct trace_t trace = {NULL, NULL, 77, LOCATE_abstractmetamodel___MMDirectory___name};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMDirectory____name( self) /*MMDirectory::_name*/;
 }
 val_t abstractmetamodel___MMDirectory___path(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___path, 80};
+  struct trace_t trace = {NULL, NULL, 80, LOCATE_abstractmetamodel___MMDirectory___path};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMDirectory____path( self) /*MMDirectory::_path*/;
 }
 val_t abstractmetamodel___MMDirectory___parent(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___parent, 83};
+  struct trace_t trace = {NULL, NULL, 83, LOCATE_abstractmetamodel___MMDirectory___parent};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMDirectory____parent( self) /*MMDirectory::_parent*/;
 }
 val_t abstractmetamodel___MMDirectory___owner(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___owner, 87};
+  struct trace_t trace = {NULL, NULL, 87, LOCATE_abstractmetamodel___MMDirectory___owner};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMDirectory____owner( self) /*MMDirectory::_owner*/;
 }
 void abstractmetamodel___MMDirectory___owner__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___owner__eq, 87};
+  struct trace_t trace = {NULL, NULL, 87, LOCATE_abstractmetamodel___MMDirectory___owner__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMDirectory____owner( self) /*MMDirectory::_owner*/ =  param0;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMDirectory___modules(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___modules, 90};
+  struct trace_t trace = {NULL, NULL, 90, LOCATE_abstractmetamodel___MMDirectory___modules};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMDirectory____modules( self) /*MMDirectory::_modules*/;
 }
 void abstractmetamodel___MMDirectory___add_module(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___add_module, 93};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMDirectory____modules( self) /*MMDirectory::_modules*/;
-  variable2 = ((abstractmetamodel___MMModule___name_t)CALL( variable0 /*module*/,COLOR_abstractmetamodel___MMModule___name))( variable0 /*module*/) /*MMModule::name*/;
-  variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1, variable2) /*Map::has_key*/;
-  if (!UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable1)))) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMDirectory___add_module, 96); nit_exit(1);}
-  variable1 = ATTR_abstractmetamodel___MMDirectory____modules( self) /*MMDirectory::_modules*/;
-  variable2 = ((abstractmetamodel___MMModule___name_t)CALL( variable0 /*module*/,COLOR_abstractmetamodel___MMModule___name))( variable0 /*module*/) /*MMModule::name*/;
-  ((abstract_collection___Map_____braeq_t)CALL(variable1,COLOR_abstract_collection___Map_____braeq))(variable1, variable2,  variable0 /*module*/) /*Map::[]=*/;
+  struct trace_t trace = {NULL, NULL, 93, LOCATE_abstractmetamodel___MMDirectory___add_module};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMDirectory____modules(variable[0]) /*MMDirectory::_modules*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMModule___name( variable[1] /*module*/)( variable[1] /*module*/) /*MMModule::name*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead___has_key(variable[3])(variable[3], variable[4]) /*MapRead::has_key*/;
+  if (!UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[3])))) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMDirectory___add_module, LOCATE_abstractmetamodel, 96); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMDirectory____modules(variable[0]) /*MMDirectory::_modules*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMModule___name( variable[1] /*module*/)( variable[1] /*module*/) /*MMModule::name*/;
+  CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[4],  variable[1] /*module*/) /*Map::[]=*/;
+  return_label6: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMDirectory___dhe(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___dhe, 100};
+  struct trace_t trace = {NULL, NULL, 100, LOCATE_abstractmetamodel___MMDirectory___dhe};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMDirectory____dhe( self) /*MMDirectory::_dhe*/;
 }
 void abstractmetamodel___MMDirectory___init(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___init, 103};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMDirectory].i]) return;
-  ATTR_abstractmetamodel___MMDirectory____name( self) /*MMDirectory::_name*/ =  variable0 /*name*/;
-  ATTR_abstractmetamodel___MMDirectory____path( self) /*MMDirectory::_path*/ =  variable1 /*path*/;
-  ATTR_abstractmetamodel___MMDirectory____parent( self) /*MMDirectory::_parent*/ =  variable2 /*parent*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMDirectory].i] = 1;
+  struct trace_t trace = {NULL, NULL, 103, LOCATE_abstractmetamodel___MMDirectory___init};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Local variable */
+  variable[3] =  param2;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMDirectory].i]) return;
+  /* Register variable[4]: Method return value and escape marker */
+  ATTR_abstractmetamodel___MMDirectory____name(variable[0]) /*MMDirectory::_name*/ =  variable[1] /*name*/;
+  ATTR_abstractmetamodel___MMDirectory____path(variable[0]) /*MMDirectory::_path*/ =  variable[2] /*path*/;
+  ATTR_abstractmetamodel___MMDirectory____parent(variable[0]) /*MMDirectory::_parent*/ =  variable[3] /*parent*/;
+  return_label7: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMDirectory].i] = 1;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMDirectory___full_name_for(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMDirectory___full_name_for, 109};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
-  val_t variable5;
-  val_t variable6;
-  val_t variable7;
-  val_t variable8;
-  val_t variable9;
-  val_t variable10;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = NEW_string___String___init(); /*new String*/
-  variable2 = NEW_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable3 = variable2;
-  ((string___String___append_t)CALL(variable1,COLOR_abstract_collection___IndexedCollection___append))(variable1, variable3) /*String::append*/;
-  variable4 = ((abstractmetamodel___MMDirectory___name_t)CALL( self,COLOR_abstractmetamodel___MMDirectory___name))( self) /*MMDirectory::name*/;
-  variable5 = variable4;
-  variable5 = ((string___String___to_s_t)CALL(variable5,COLOR_string___Object___to_s))(variable5) /*String::to_s*/;
-  ((string___String___append_t)CALL(variable1,COLOR_abstract_collection___IndexedCollection___append))(variable1, variable5) /*String::append*/;
-  variable6 = NEW_string___String___with_native(BOX_NativeString("/"), TAG_Int(1)); /*new String*/
-  variable7 = variable6;
-  ((string___String___append_t)CALL(variable1,COLOR_abstract_collection___IndexedCollection___append))(variable1, variable7) /*String::append*/;
-  variable8 =  variable0 /*module_name*/;
-  variable8 = ((string___String___to_s_t)CALL(variable8,COLOR_string___Object___to_s))(variable8) /*String::to_s*/;
-  ((string___String___append_t)CALL(variable1,COLOR_abstract_collection___IndexedCollection___append))(variable1, variable8) /*String::append*/;
-  variable9 = NEW_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable10 = variable9;
-  ((string___String___append_t)CALL(variable1,COLOR_abstract_collection___IndexedCollection___append))(variable1, variable10) /*String::append*/;
-  variable1 = ((symbol___String___to_symbol_t)CALL(variable1,COLOR_symbol___String___to_symbol))(variable1) /*String::to_symbol*/;
+  struct trace_t trace = {NULL, NULL, 109, LOCATE_abstractmetamodel___MMDirectory___full_name_for};
+  static val_t once_value_9 = NIT_NULL; /* Once value for string variable[4]*/
+  static val_t once_value_10 = NIT_NULL; /* Once value for string variable[4]*/
+  static val_t once_value_11 = NIT_NULL; /* Once value for string variable[4]*/
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  variable[3] = NEW_Array_array___Array___with_capacity(TAG_Int(5)) /*new Array[String]*/ /* Ensure var: Array (for super-string)*/;
+  /* Register variable[4]: Once String constant */
+  if (once_value_9 != NIT_NULL) variable[4] = once_value_9;
+  else {
+    variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)) /*new String*/;
+    once_value_9 = variable[4];
+  }
+  /* Register variable[4]: Result */
+  /* Ensure var variable[4]: super-string element*/
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[4]) /*AbstractArray::add*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMDirectory___name(variable[0])(variable[0]) /*MMDirectory::name*/;
+  /* Ensure var variable[4]: super-string element*/
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], CALL_string___Object___to_s(variable[4])(variable[4]) /*Object::to_s*/) /*AbstractArray::add*/;
+  /* Register variable[4]: Once String constant */
+  if (once_value_10 != NIT_NULL) variable[4] = once_value_10;
+  else {
+    variable[4] = NEW_String_string___String___with_native(BOX_NativeString("/"), TAG_Int(1)) /*new String*/;
+    once_value_10 = variable[4];
+  }
+  /* Register variable[4]: Result */
+  /* Ensure var variable[4]: super-string element*/
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[4]) /*AbstractArray::add*/;
+  variable[4] =  variable[1] /*module_name*/ /* Ensure var: super-string element*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], CALL_string___Object___to_s(variable[4])(variable[4]) /*Object::to_s*/) /*AbstractArray::add*/;
+  /* Register variable[4]: Once String constant */
+  if (once_value_11 != NIT_NULL) variable[4] = once_value_11;
+  else {
+    variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)) /*new String*/;
+    once_value_11 = variable[4];
+  }
+  /* Register variable[4]: Result */
+  /* Ensure var variable[4]: super-string element*/
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[4]) /*AbstractArray::add*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_symbol___String___to_symbol(variable[3])(variable[3]) /*String::to_symbol*/;
+  variable[2] = variable[3];
   goto return_label8;
   return_label8: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
+}
+val_t abstractmetamodel___MMModule___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 246, LOCATE_abstractmetamodel___MMModule___to_s};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMModule___name(variable[0])(variable[0]) /*MMModule::name*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*Symbol::to_s*/;
+  variable[1] = variable[2];
+  goto return_label12;
+  return_label12: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 val_t abstractmetamodel___MMModule___context(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___context, 117};
+  struct trace_t trace = {NULL, NULL, 117, LOCATE_abstractmetamodel___MMModule___context};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____context( self) /*MMModule::_context*/;
 }
 val_t abstractmetamodel___MMModule___name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___name, 120};
+  struct trace_t trace = {NULL, NULL, 120, LOCATE_abstractmetamodel___MMModule___name};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____name( self) /*MMModule::_name*/;
 }
 val_t abstractmetamodel___MMModule___full_name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___full_name, 123};
+  struct trace_t trace = {NULL, NULL, 123, LOCATE_abstractmetamodel___MMModule___full_name};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____full_name( self) /*MMModule::_full_name*/;
 }
 val_t abstractmetamodel___MMModule___directory(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___directory, 126};
+  struct trace_t trace = {NULL, NULL, 126, LOCATE_abstractmetamodel___MMModule___directory};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____directory( self) /*MMModule::_directory*/;
 }
+val_t abstractmetamodel___MMModule___filename(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 129, LOCATE_abstractmetamodel___MMModule___filename};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  tracehead = trace.prev;
+  return ATTR_abstractmetamodel___MMModule____filename( self) /*MMModule::_filename*/;
+}
 val_t abstractmetamodel___MMModule___mhe(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___mhe, 129};
+  struct trace_t trace = {NULL, NULL, 132, LOCATE_abstractmetamodel___MMModule___mhe};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____mhe( self) /*MMModule::_mhe*/;
 }
 val_t abstractmetamodel___MMModule___global_classes(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___global_classes, 132};
+  struct trace_t trace = {NULL, NULL, 135, LOCATE_abstractmetamodel___MMModule___global_classes};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____global_classes( self) /*MMModule::_global_classes*/;
 }
 val_t abstractmetamodel___MMModule___local_classes(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___local_classes, 135};
+  struct trace_t trace = {NULL, NULL, 138, LOCATE_abstractmetamodel___MMModule___local_classes};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____local_classes( self) /*MMModule::_local_classes*/;
 }
 val_t abstractmetamodel___MMModule___class_specialization_hierarchy(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___class_specialization_hierarchy, 138};
+  struct trace_t trace = {NULL, NULL, 141, LOCATE_abstractmetamodel___MMModule___class_specialization_hierarchy};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____class_specialization_hierarchy( self) /*MMModule::_class_specialization_hierarchy*/;
 }
 val_t abstractmetamodel___MMModule___explicit_imported_modules(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___explicit_imported_modules, 150};
+  struct trace_t trace = {NULL, NULL, 153, LOCATE_abstractmetamodel___MMModule___explicit_imported_modules};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMModule____explicit_imported_modules( self) /*MMModule::_explicit_imported_modules*/;
 }
-void abstractmetamodel___MMModule___init(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___init, 159};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMModule].i]) return;
-  ATTR_abstractmetamodel___MMModule____name( self) /*MMModule::_name*/ =  variable0 /*name*/;
-  ATTR_abstractmetamodel___MMModule____directory( self) /*MMModule::_directory*/ =  variable1 /*dir*/;
-  ATTR_abstractmetamodel___MMModule____context( self) /*MMModule::_context*/ =  variable2 /*context*/;
-  variable3 = TAG_Bool(( variable1 /*dir*/ ==  NIT_NULL /*null*/) || (( variable1 /*dir*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable1 /*dir*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable1 /*dir*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable1 /*dir*/,COLOR_kernel___Object_____eqeq))( variable1 /*dir*/,  NIT_NULL /*null*/) /*MMDirectory::==*/)))));
-  if (UNTAG_Bool(variable3)) { /*if*/
-    ATTR_abstractmetamodel___MMModule____full_name( self) /*MMModule::_full_name*/ =  variable0 /*name*/;
+void abstractmetamodel___MMModule___init(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3, int* init_table) {
+  struct trace_t trace = {NULL, NULL, 162, LOCATE_abstractmetamodel___MMModule___init};
+  val_t variable[7];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Local variable */
+  variable[3] =  param2;
+  /* Register variable[4]: Local variable */
+  variable[4] =  param3;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMModule].i]) return;
+  /* Register variable[5]: Method return value and escape marker */
+  ATTR_abstractmetamodel___MMModule____name(variable[0]) /*MMModule::_name*/ =  variable[1] /*name*/;
+  ATTR_abstractmetamodel___MMModule____directory(variable[0]) /*MMModule::_directory*/ =  variable[2] /*dir*/;
+  ATTR_abstractmetamodel___MMModule____context(variable[0]) /*MMModule::_context*/ =  variable[3] /*context*/;
+  /* Register variable[6]: Result */
+  variable[6] = TAG_Bool(( variable[2] /*dir*/ ==  NIT_NULL /*null*/) || (( variable[2] /*dir*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[2] /*dir*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*dir*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[2] /*dir*/)( variable[2] /*dir*/,  NIT_NULL /*null*/) /*Object::==*/)))));
+  if (UNTAG_Bool(variable[6])) { /*if*/
+    ATTR_abstractmetamodel___MMModule____full_name(variable[0]) /*MMModule::_full_name*/ =  variable[1] /*name*/;
   } else { /*if*/
-    variable3 = ((abstractmetamodel___MMDirectory___full_name_for_t)CALL( variable1 /*dir*/,COLOR_abstractmetamodel___MMDirectory___full_name_for))( variable1 /*dir*/,  variable0 /*name*/) /*MMDirectory::full_name_for*/;
-    ATTR_abstractmetamodel___MMModule____full_name( self) /*MMModule::_full_name*/ = variable3;
+    /* Register variable[6]: Result */
+    variable[6] = CALL_abstractmetamodel___MMDirectory___full_name_for( variable[2] /*dir*/)( variable[2] /*dir*/,  variable[1] /*name*/) /*MMDirectory::full_name_for*/;
+    ATTR_abstractmetamodel___MMModule____full_name(variable[0]) /*MMModule::_full_name*/ = variable[6];
   }
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMModule].i] = 1;
+  ATTR_abstractmetamodel___MMModule____filename(variable[0]) /*MMModule::_filename*/ =  variable[4] /*filename*/;
+  return_label13: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMModule].i] = 1;
   tracehead = trace.prev;
   return;
 }
 void abstractmetamodel___MMModule___add_super_module(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___add_super_module, 172};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = ATTR_abstractmetamodel___MMModule____explicit_imported_modules( self) /*MMModule::_explicit_imported_modules*/;
-  ((abstract_collection___SimpleCollection___add_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add))(variable2,  variable0 /*m*/) /*Set::add*/;
-  variable2 = TAG_Bool(( variable1 /*visibility_level*/)==( TAG_Int(0)));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable2 = ATTR_abstractmetamodel___MMModule____intrude_modules( self) /*MMModule::_intrude_modules*/;
-    ((abstract_collection___SimpleCollection___add_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add))(variable2,  variable0 /*m*/) /*Set::add*/;
-    variable2 = ATTR_abstractmetamodel___MMModule____intrude_modules( self) /*MMModule::_intrude_modules*/;
-    variable3 = ATTR_abstractmetamodel___MMModule____intrude_modules( variable0 /*m*/) /*MMModule::_intrude_modules*/;
-    ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
-    variable2 = ATTR_abstractmetamodel___MMModule____public_modules( self) /*MMModule::_public_modules*/;
-    variable3 = ATTR_abstractmetamodel___MMModule____public_modules( variable0 /*m*/) /*MMModule::_public_modules*/;
-    ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
-    variable2 = ATTR_abstractmetamodel___MMModule____private_modules( self) /*MMModule::_private_modules*/;
-    variable3 = ATTR_abstractmetamodel___MMModule____private_modules( variable0 /*m*/) /*MMModule::_private_modules*/;
-    ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
+  struct trace_t trace = {NULL, NULL, 176, LOCATE_abstractmetamodel___MMModule___add_super_module};
+  val_t variable[6];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Method return value and escape marker */
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMModule____explicit_imported_modules(variable[0]) /*MMModule::_explicit_imported_modules*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4],  variable[1] /*m*/) /*SimpleCollection::add*/;
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(( variable[2] /*visibility_level*/)==( TAG_Int(0)));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    /* Register variable[4]: Result */
+    variable[4] = ATTR_abstractmetamodel___MMModule____intrude_modules(variable[0]) /*MMModule::_intrude_modules*/;
+    CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4],  variable[1] /*m*/) /*SimpleCollection::add*/;
+    /* Register variable[4]: Result */
+    variable[4] = ATTR_abstractmetamodel___MMModule____intrude_modules(variable[0]) /*MMModule::_intrude_modules*/;
+    /* Register variable[5]: Result */
+    variable[5] = ATTR_abstractmetamodel___MMModule____intrude_modules( variable[1] /*m*/) /*MMModule::_intrude_modules*/;
+    CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
+    /* Register variable[4]: Result */
+    variable[4] = ATTR_abstractmetamodel___MMModule____public_modules(variable[0]) /*MMModule::_public_modules*/;
+    /* Register variable[5]: Result */
+    variable[5] = ATTR_abstractmetamodel___MMModule____public_modules( variable[1] /*m*/) /*MMModule::_public_modules*/;
+    CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
+    /* Register variable[4]: Result */
+    variable[4] = ATTR_abstractmetamodel___MMModule____private_modules(variable[0]) /*MMModule::_private_modules*/;
+    /* Register variable[5]: Result */
+    variable[5] = ATTR_abstractmetamodel___MMModule____private_modules( variable[1] /*m*/) /*MMModule::_private_modules*/;
+    CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
   } else { /*if*/
-    variable2 = TAG_Bool(( variable1 /*visibility_level*/)==( TAG_Int(1)));
-    if (UNTAG_Bool(variable2)) { /*if*/
-      variable2 = ATTR_abstractmetamodel___MMModule____public_modules( self) /*MMModule::_public_modules*/;
-      ((abstract_collection___SimpleCollection___add_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add))(variable2,  variable0 /*m*/) /*Set::add*/;
-      variable2 = ATTR_abstractmetamodel___MMModule____public_modules( self) /*MMModule::_public_modules*/;
-      variable3 = ATTR_abstractmetamodel___MMModule____intrude_modules( variable0 /*m*/) /*MMModule::_intrude_modules*/;
-      ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
-      variable2 = ATTR_abstractmetamodel___MMModule____public_modules( self) /*MMModule::_public_modules*/;
-      variable3 = ATTR_abstractmetamodel___MMModule____public_modules( variable0 /*m*/) /*MMModule::_public_modules*/;
-      ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
+    /* Register variable[4]: Result */
+    variable[4] = TAG_Bool(( variable[2] /*visibility_level*/)==( TAG_Int(1)));
+    if (UNTAG_Bool(variable[4])) { /*if*/
+      /* Register variable[4]: Result */
+      variable[4] = ATTR_abstractmetamodel___MMModule____public_modules(variable[0]) /*MMModule::_public_modules*/;
+      CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4],  variable[1] /*m*/) /*SimpleCollection::add*/;
+      /* Register variable[4]: Result */
+      variable[4] = ATTR_abstractmetamodel___MMModule____public_modules(variable[0]) /*MMModule::_public_modules*/;
+      /* Register variable[5]: Result */
+      variable[5] = ATTR_abstractmetamodel___MMModule____intrude_modules( variable[1] /*m*/) /*MMModule::_intrude_modules*/;
+      CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
+      /* Register variable[4]: Result */
+      variable[4] = ATTR_abstractmetamodel___MMModule____public_modules(variable[0]) /*MMModule::_public_modules*/;
+      /* Register variable[5]: Result */
+      variable[5] = ATTR_abstractmetamodel___MMModule____public_modules( variable[1] /*m*/) /*MMModule::_public_modules*/;
+      CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
     } else { /*if*/
-      variable2 = ATTR_abstractmetamodel___MMModule____private_modules( self) /*MMModule::_private_modules*/;
-      ((abstract_collection___SimpleCollection___add_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add))(variable2,  variable0 /*m*/) /*Set::add*/;
-      variable2 = ATTR_abstractmetamodel___MMModule____private_modules( self) /*MMModule::_private_modules*/;
-      variable3 = ATTR_abstractmetamodel___MMModule____intrude_modules( variable0 /*m*/) /*MMModule::_intrude_modules*/;
-      ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
-      variable2 = ATTR_abstractmetamodel___MMModule____private_modules( self) /*MMModule::_private_modules*/;
-      variable3 = ATTR_abstractmetamodel___MMModule____public_modules( variable0 /*m*/) /*MMModule::_public_modules*/;
-      ((abstract_collection___SimpleCollection___add_all_t)CALL(variable2,COLOR_abstract_collection___SimpleCollection___add_all))(variable2, variable3) /*Set::add_all*/;
+      /* Register variable[4]: Result */
+      variable[4] = ATTR_abstractmetamodel___MMModule____private_modules(variable[0]) /*MMModule::_private_modules*/;
+      CALL_abstract_collection___SimpleCollection___add(variable[4])(variable[4],  variable[1] /*m*/) /*SimpleCollection::add*/;
+      /* Register variable[4]: Result */
+      variable[4] = ATTR_abstractmetamodel___MMModule____private_modules(variable[0]) /*MMModule::_private_modules*/;
+      /* Register variable[5]: Result */
+      variable[5] = ATTR_abstractmetamodel___MMModule____intrude_modules( variable[1] /*m*/) /*MMModule::_intrude_modules*/;
+      CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
+      /* Register variable[4]: Result */
+      variable[4] = ATTR_abstractmetamodel___MMModule____private_modules(variable[0]) /*MMModule::_private_modules*/;
+      /* Register variable[5]: Result */
+      variable[5] = ATTR_abstractmetamodel___MMModule____public_modules( variable[1] /*m*/) /*MMModule::_public_modules*/;
+      CALL_abstract_collection___SimpleCollection___add_all(variable[4])(variable[4], variable[5]) /*SimpleCollection::add_all*/;
     }
   }
+  return_label14: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMModule___visibility_for(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___visibility_for, 196};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = TAG_Bool(( variable0 /*m*/ ==  self) || (( variable0 /*m*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*m*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*m*/, self)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*m*/,COLOR_kernel___Object_____eqeq))( variable0 /*m*/,  self) /*MMModule::==*/)))));
-  variable2 = variable1;
-  if (!UNTAG_Bool(variable2)) { /* or */
-    variable2 = ATTR_abstractmetamodel___MMModule____intrude_modules( self) /*MMModule::_intrude_modules*/;
-    variable2 = ((abstract_collection___Collection___has_t)CALL(variable2,COLOR_abstract_collection___Collection___has))(variable2,  variable0 /*m*/) /*Set::has*/;
+  struct trace_t trace = {NULL, NULL, 200, LOCATE_abstractmetamodel___MMModule___visibility_for};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(( variable[1] /*m*/ == variable[0]) || (( variable[1] /*m*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*m*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*m*/,variable[0])):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*m*/)( variable[1] /*m*/, variable[0]) /*Object::==*/)))));
+  /* Ensure var variable[3]: Left 'or' operand*/
+  if (!UNTAG_Bool(variable[3])) { /* or */
+    /* Register variable[3]: Result */
+    variable[3] = ATTR_abstractmetamodel___MMModule____intrude_modules(variable[0]) /*MMModule::_intrude_modules*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstract_collection___Collection___has(variable[3])(variable[3],  variable[1] /*m*/) /*Collection::has*/;
   }
-  variable1 = variable2;
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 =  TAG_Int(3);
-    goto return_label11;
+  /* Register variable[3]: Result */
+  if (UNTAG_Bool(variable[3])) { /*if*/
+    variable[2] =  TAG_Int(3);
+    goto return_label15;
   } else { /*if*/
-    variable1 = ATTR_abstractmetamodel___MMModule____public_modules( self) /*MMModule::_public_modules*/;
-    variable1 = ((abstract_collection___Collection___has_t)CALL(variable1,COLOR_abstract_collection___Collection___has))(variable1,  variable0 /*m*/) /*Set::has*/;
-    if (UNTAG_Bool(variable1)) { /*if*/
-      variable1 =  TAG_Int(2);
-      goto return_label11;
+    /* Register variable[3]: Result */
+    variable[3] = ATTR_abstractmetamodel___MMModule____public_modules(variable[0]) /*MMModule::_public_modules*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstract_collection___Collection___has(variable[3])(variable[3],  variable[1] /*m*/) /*Collection::has*/;
+    if (UNTAG_Bool(variable[3])) { /*if*/
+      variable[2] =  TAG_Int(2);
+      goto return_label15;
     } else { /*if*/
-      variable1 = ATTR_abstractmetamodel___MMModule____private_modules( self) /*MMModule::_private_modules*/;
-      variable1 = ((abstract_collection___Collection___has_t)CALL(variable1,COLOR_abstract_collection___Collection___has))(variable1,  variable0 /*m*/) /*Set::has*/;
-      if (UNTAG_Bool(variable1)) { /*if*/
-        variable1 =  TAG_Int(1);
-        goto return_label11;
+      /* Register variable[3]: Result */
+      variable[3] = ATTR_abstractmetamodel___MMModule____private_modules(variable[0]) /*MMModule::_private_modules*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstract_collection___Collection___has(variable[3])(variable[3],  variable[1] /*m*/) /*Collection::has*/;
+      if (UNTAG_Bool(variable[3])) { /*if*/
+        variable[2] =  TAG_Int(1);
+        goto return_label15;
       } else { /*if*/
-        variable1 =  TAG_Int(0);
-        goto return_label11;
+        variable[2] =  TAG_Int(0);
+        goto return_label15;
       }
     }
   }
-  return_label11: while(false);
+  return_label15: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t abstractmetamodel___MMModule_____bra(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule_____bra, 215};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMModule____local_class_by_global( self) /*MMModule::_local_class_by_global*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*Map::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMModule_____bra, 218); nit_exit(1);}
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*c*/ ==  NIT_NULL /*null*/) || (( variable0 /*c*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*c*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*c*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*c*/,COLOR_kernel___Object_____eqeq))( variable0 /*c*/,  NIT_NULL /*null*/) /*MMGlobalClass::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMModule_____bra, 219); nit_exit(1);}
-  variable1 = ATTR_abstractmetamodel___MMModule____local_class_by_global( self) /*MMModule::_local_class_by_global*/;
-  variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1,  variable0 /*c*/) /*Map::has_key*/;
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 = ATTR_abstractmetamodel___MMModule____local_class_by_global( self) /*MMModule::_local_class_by_global*/;
-    variable1 = ((abstract_collection___Map_____bra_t)CALL(variable1,COLOR_abstract_collection___Map_____bra))(variable1,  variable0 /*c*/) /*Map::[]*/;
-    goto return_label12;
-  } else { /*if*/
-    variable1 =  NIT_NULL /*null*/;
-    goto return_label12;
-  }
-  return_label12: while(false);
-  tracehead = trace.prev;
-  return variable1;
-}
-void abstractmetamodel___MMModule___add_local_class(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___add_local_class, 227};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  ATTR_abstractmetamodel___MMLocalClass____module( variable0 /*c*/) /*MMLocalClass::_module*/ =  self;
-  variable1 = ATTR_abstractmetamodel___MMModule____local_classes( self) /*MMModule::_local_classes*/;
-  ((array___AbstractArray___add_t)CALL(variable1,COLOR_abstract_collection___SimpleCollection___add))(variable1,  variable0 /*c*/) /*Array::add*/;
+  struct trace_t trace = {NULL, NULL, 219, LOCATE_abstractmetamodel___MMModule_____bra};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____local_class_by_global(variable[0]) /*MMModule::_local_class_by_global*/;
+  /* Register variable[3]: Result */
+  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::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMModule_____bra, LOCATE_abstractmetamodel, 222); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*c*/ ==  NIT_NULL /*null*/) || (( variable[1] /*c*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*c*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*c*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*c*/)( variable[1] /*c*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMModule_____bra, LOCATE_abstractmetamodel, 223); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____local_class_by_global(variable[0]) /*MMModule::_local_class_by_global*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead_____bra(variable[3])(variable[3],  variable[1] /*c*/) /*MapRead::[]*/;
+  variable[2] = variable[3];
+  goto return_label16;
+  return_label16: while(false);
   tracehead = trace.prev;
-  return;
+  return variable[2];
 }
 val_t abstractmetamodel___MMModule___class_by_name(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___class_by_name, 234};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMModule____global_class_by_name( self) /*MMModule::_global_class_by_name*/;
-  variable1 = ((abstract_collection___Map_____bra_t)CALL(variable1,COLOR_abstract_collection___Map_____bra))(variable1,  variable0 /*n*/) /*Map::[]*/;
-  variable1 = ((abstractmetamodel___MMModule_____bra_t)CALL( self,COLOR_abstractmetamodel___MMModule_____bra))( self, variable1) /*MMModule::[]*/;
-  goto return_label14;
-  return_label14: while(false);
+  struct trace_t trace = {NULL, NULL, 227, LOCATE_abstractmetamodel___MMModule___class_by_name};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____global_class_by_name(variable[0]) /*MMModule::_global_class_by_name*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead_____bra(variable[3])(variable[3],  variable[1] /*n*/) /*MapRead::[]*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMModule_____bra(variable[0])(variable[0], variable[3]) /*MMModule::[]*/;
+  variable[2] = variable[3];
+  goto return_label17;
+  return_label17: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t abstractmetamodel___MMModule___has_global_class_named(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___has_global_class_named, 240};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMModule____global_class_by_name( self) /*MMModule::_global_class_by_name*/;
-  variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1,  variable0 /*n*/) /*Map::has_key*/;
-  goto return_label15;
-  return_label15: while(false);
-  tracehead = trace.prev;
-  return variable1;
+  struct trace_t trace = {NULL, NULL, 233, LOCATE_abstractmetamodel___MMModule___has_global_class_named};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____global_class_by_name(variable[0]) /*MMModule::_global_class_by_name*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead___has_key(variable[3])(variable[3],  variable[1] /*n*/) /*MapRead::has_key*/;
+  variable[2] = variable[3];
+  goto return_label18;
+  return_label18: while(false);
+  tracehead = trace.prev;
+  return variable[2];
 }
 val_t abstractmetamodel___MMModule___global_class_named(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___global_class_named, 246};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMModule____global_class_by_name( self) /*MMModule::_global_class_by_name*/;
-  variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1,  variable0 /*n*/) /*Map::has_key*/;
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 = ATTR_abstractmetamodel___MMModule____global_class_by_name( self) /*MMModule::_global_class_by_name*/;
-    variable1 = ((abstract_collection___Map_____bra_t)CALL(variable1,COLOR_abstract_collection___Map_____bra))(variable1,  variable0 /*n*/) /*Map::[]*/;
-    goto return_label16;
-  } else { /*if*/
-    variable1 =  NIT_NULL /*null*/;
-    goto return_label16;
-  }
-  return_label16: while(false);
-  tracehead = trace.prev;
-  return variable1;
-}
-val_t abstractmetamodel___MMModule___to_s(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___to_s, 257};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMModule___name_t)CALL( self,COLOR_abstractmetamodel___MMModule___name))( self) /*MMModule::name*/;
-  variable0 = ((symbol___Symbol___to_s_t)CALL(variable0,COLOR_string___Object___to_s))(variable0) /*Symbol::to_s*/;
-  goto return_label17;
-  return_label17: while(false);
-  tracehead = trace.prev;
-  return variable0;
+  struct trace_t trace = {NULL, NULL, 239, LOCATE_abstractmetamodel___MMModule___global_class_named};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____global_class_by_name(variable[0]) /*MMModule::_global_class_by_name*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead_____bra(variable[3])(variable[3],  variable[1] /*n*/) /*MapRead::[]*/;
+  variable[2] = variable[3];
+  goto return_label19;
+  return_label19: while(false);
+  tracehead = trace.prev;
+  return variable[2];
 }
 void abstractmetamodel___MMModule___set_supers_class(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___set_supers_class, 259};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable1 /*supers*/ ==  NIT_NULL /*null*/) || (( variable1 /*supers*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*supers*/,COLOR_kernel___Object_____eqeq))( variable1 /*supers*/,  NIT_NULL /*null*/) /*Array::==*/)))));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMModule___set_supers_class, 262); nit_exit(1);}
-  variable3 = ATTR_abstractmetamodel___MMModule____class_specialization_hierarchy( self) /*MMModule::_class_specialization_hierarchy*/;
-  variable3 = ((partial_order___PartialOrder___select_smallests_t)CALL(variable3,COLOR_partial_order___PartialOrder___select_smallests))(variable3,  variable1 /*supers*/) /*PartialOrder::select_smallests*/;
-  variable2 = variable3;
-  variable3 = ATTR_abstractmetamodel___MMModule____class_specialization_hierarchy( self) /*MMModule::_class_specialization_hierarchy*/;
-  variable3 = ((partial_order___PartialOrder___add_t)CALL(variable3,COLOR_partial_order___PartialOrder___add))(variable3,  variable0 /*c*/,  variable2 /*tab*/) /*PartialOrder::add*/;
-  ATTR_abstractmetamodel___MMLocalClass____cshe( variable0 /*c*/) /*MMLocalClass::_cshe*/ = variable3;
-  variable4 = ((abstractmetamodel___MMLocalClass___crhe_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___crhe))( variable0 /*c*/) /*MMLocalClass::crhe*/;
-  variable4 = ((partial_order___PartialOrderElement___direct_greaters_t)CALL(variable4,COLOR_partial_order___PartialOrderElement___direct_greaters))(variable4) /*PartialOrderElement::direct_greaters*/;
-  variable4 = ((array___Collection___to_a_t)CALL(variable4,COLOR_array___Collection___to_a))(variable4) /*Array::to_a*/;
-  variable3 = variable4;
-  ((abstract_collection___SimpleCollection___add_all_t)CALL( variable3 /*tab_all*/,COLOR_abstract_collection___SimpleCollection___add_all))( variable3 /*tab_all*/,  variable2 /*tab*/) /*Array::add_all*/;
-  variable4 = ((abstractmetamodel___MMModule___context_t)CALL( self,COLOR_abstractmetamodel___MMModule___context))( self) /*MMModule::context*/;
-  ((abstractmetamodel___MMContext___add_local_class_t)CALL(variable4,COLOR_abstractmetamodel___MMContext___add_local_class))(variable4,  variable0 /*c*/,  variable3 /*tab_all*/) /*MMContext::add_local_class*/;
+  struct trace_t trace = {NULL, NULL, 248, LOCATE_abstractmetamodel___MMModule___set_supers_class};
+  val_t variable[7];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Method return value and escape marker */
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*supers*/ ==  NIT_NULL /*null*/) || (( variable[2] /*supers*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[2] /*supers*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*supers*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[2] /*supers*/)( variable[2] /*supers*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMModule___set_supers_class, LOCATE_abstractmetamodel, 251); nit_exit(1);}
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = ATTR_abstractmetamodel___MMModule____class_specialization_hierarchy(variable[0]) /*MMModule::_class_specialization_hierarchy*/;
+  /* Register variable[5]: Result */
+  variable[5] = CALL_partial_order___PartialOrder___select_smallests(variable[5])(variable[5],  variable[2] /*supers*/) /*PartialOrder::select_smallests*/;
+  variable[4] = variable[5];
+  /* Register variable[5]: Result */
+  variable[5] = ATTR_abstractmetamodel___MMModule____class_specialization_hierarchy(variable[0]) /*MMModule::_class_specialization_hierarchy*/;
+  /* Register variable[5]: Result */
+  variable[5] = CALL_partial_order___PartialOrder___add(variable[5])(variable[5],  variable[1] /*c*/,  variable[4] /*tab*/) /*PartialOrder::add*/;
+  ATTR_abstractmetamodel___MMLocalClass____cshe( variable[1] /*c*/) /*MMLocalClass::_cshe*/ = variable[5];
+  /* Register variable[5]: Local variable */
+  /* Register variable[6]: Result */
+  variable[6] = CALL_abstractmetamodel___MMLocalClass___crhe( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::crhe*/;
+  /* Register variable[6]: Result */
+  variable[6] = CALL_partial_order___PartialOrderElement___direct_greaters(variable[6])(variable[6]) /*PartialOrderElement::direct_greaters*/;
+  /* Register variable[6]: Result */
+  variable[6] = CALL_array___Collection___to_a(variable[6])(variable[6]) /*Collection::to_a*/;
+  variable[5] = variable[6];
+  CALL_abstract_collection___SimpleCollection___add_all( variable[5] /*tab_all*/)( variable[5] /*tab_all*/,  variable[4] /*tab*/) /*SimpleCollection::add_all*/;
+  /* Register variable[6]: Result */
+  variable[6] = CALL_abstractmetamodel___MMModule___context(variable[0])(variable[0]) /*MMModule::context*/;
+  CALL_abstractmetamodel___MMContext___add_local_class(variable[6])(variable[6],  variable[1] /*c*/,  variable[5] /*tab_all*/) /*MMContext::add_local_class*/;
+  return_label20: while(false);
   tracehead = trace.prev;
   return;
 }
 void abstractmetamodel___MMModule___register_global_class(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMModule___register_global_class, 270};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ((abstractmetamodel___MMLocalClass___global_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___global))( variable0 /*c*/) /*MMLocalClass::global*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*MMGlobalClass::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMModule___register_global_class, 273); nit_exit(1);}
-  variable1 = ATTR_abstractmetamodel___MMModule____local_class_by_global( self) /*MMModule::_local_class_by_global*/;
-  variable2 = ((abstractmetamodel___MMLocalClass___global_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___global))( variable0 /*c*/) /*MMLocalClass::global*/;
-  ((abstract_collection___Map_____braeq_t)CALL(variable1,COLOR_abstract_collection___Map_____braeq))(variable1, variable2,  variable0 /*c*/) /*Map::[]=*/;
+  struct trace_t trace = {NULL, NULL, 259, LOCATE_abstractmetamodel___MMModule___register_global_class};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___global( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::global*/;
+  /* Register variable[3]: Result */
+  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::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMModule___register_global_class, LOCATE_abstractmetamodel, 262); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____local_class_by_global(variable[0]) /*MMModule::_local_class_by_global*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalClass___global( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::global*/;
+  CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[4],  variable[1] /*c*/) /*Map::[]=*/;
+  return_label21: while(false);
   tracehead = trace.prev;
   return;
 }
+val_t abstractmetamodel___MMGlobalClass___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 294, LOCATE_abstractmetamodel___MMGlobalClass___to_s};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[0])(variable[0]) /*MMGlobalClass::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*MMLocalClass::to_s*/;
+  variable[1] = variable[2];
+  goto return_label22;
+  return_label22: while(false);
+  tracehead = trace.prev;
+  return variable[1];
+}
 val_t abstractmetamodel___MMGlobalClass___intro(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___intro, 279};
+  struct trace_t trace = {NULL, NULL, 268, LOCATE_abstractmetamodel___MMGlobalClass___intro};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalClass____intro( self) /*MMGlobalClass::_intro*/;
 }
 val_t abstractmetamodel___MMGlobalClass___class_refinement_hierarchy(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___class_refinement_hierarchy, 282};
+  struct trace_t trace = {NULL, NULL, 271, LOCATE_abstractmetamodel___MMGlobalClass___class_refinement_hierarchy};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalClass____class_refinement_hierarchy( self) /*MMGlobalClass::_class_refinement_hierarchy*/;
 }
 void abstractmetamodel___MMGlobalClass___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___init, 286};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMGlobalClass].i]) return;
-  ATTR_abstractmetamodel___MMGlobalClass____intro( self) /*MMGlobalClass::_intro*/ =  variable0 /*c*/;
-  variable1 = ((abstractmetamodel___MMLocalClass___context_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___context))( variable0 /*c*/) /*MMLocalClass::context*/;
-  ((abstractmetamodel___MMContext___add_global_class_t)CALL(variable1,COLOR_abstractmetamodel___MMContext___add_global_class))(variable1,  self) /*MMContext::add_global_class*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMGlobalClass].i] = 1;
+  struct trace_t trace = {NULL, NULL, 275, LOCATE_abstractmetamodel___MMGlobalClass___init};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMGlobalClass].i]) return;
+  /* Register variable[2]: Method return value and escape marker */
+  ATTR_abstractmetamodel___MMGlobalClass____intro(variable[0]) /*MMGlobalClass::_intro*/ =  variable[1] /*c*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___context( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::context*/;
+  CALL_abstractmetamodel___MMContext___add_global_class(variable[3])(variable[3], variable[0]) /*MMContext::add_global_class*/;
+  return_label23: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMGlobalClass].i] = 1;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMGlobalClass___name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___name, 293};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalClass___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalClass___intro))( self) /*MMGlobalClass::intro*/;
-  variable0 = ((abstractmetamodel___MMLocalClass___name_t)CALL(variable0,COLOR_abstractmetamodel___MMLocalClass___name))(variable0) /*MMLocalClass::name*/;
-  goto return_label21;
-  return_label21: while(false);
-  tracehead = trace.prev;
-  return variable0;
+  struct trace_t trace = {NULL, NULL, 282, LOCATE_abstractmetamodel___MMGlobalClass___name};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[0])(variable[0]) /*MMGlobalClass::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalClass___name(variable[2])(variable[2]) /*MMLocalClass::name*/;
+  variable[1] = variable[2];
+  goto return_label24;
+  return_label24: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 val_t abstractmetamodel___MMGlobalClass___module(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___module, 299};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalClass___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalClass___intro))( self) /*MMGlobalClass::intro*/;
-  variable0 = ((abstractmetamodel___MMLocalClass___module_t)CALL(variable0,COLOR_abstractmetamodel___MMLocalClass___module))(variable0) /*MMLocalClass::module*/;
-  goto return_label22;
-  return_label22: while(false);
-  tracehead = trace.prev;
-  return variable0;
-}
-val_t abstractmetamodel___MMGlobalClass___to_s(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___to_s, 305};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalClass___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalClass___intro))( self) /*MMGlobalClass::intro*/;
-  variable0 = ((abstractmetamodel___MMLocalClass___to_s_t)CALL(variable0,COLOR_string___Object___to_s))(variable0) /*MMLocalClass::to_s*/;
-  goto return_label23;
-  return_label23: while(false);
-  tracehead = trace.prev;
-  return variable0;
+  struct trace_t trace = {NULL, NULL, 288, LOCATE_abstractmetamodel___MMGlobalClass___module};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalClass___intro(variable[0])(variable[0]) /*MMGlobalClass::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalClass___module(variable[2])(variable[2]) /*MMLocalClass::module*/;
+  variable[1] = variable[2];
+  goto return_label25;
+  return_label25: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 void abstractmetamodel___MMGlobalClass___register_local_class(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___register_local_class, 310};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
-    val_t variable4;
-    val_t variable5;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ((abstractmetamodel___MMLocalClass___module_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___module))( variable0 /*c*/) /*MMLocalClass::module*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*MMModule::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMGlobalClass___register_local_class, 313); nit_exit(1);}
-  variable1 = ((abstractmetamodel___MMLocalClass___crhe_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___crhe))( variable0 /*c*/) /*MMLocalClass::crhe*/;
-  variable1 = TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*PartialOrderElement::==*/)))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMGlobalClass___register_local_class, 314); nit_exit(1);}
-  variable2 = NEW_array___Array___init(); /*new Array[MMLocalClass]*/
-  variable1 = variable2;
-  variable2 = ((abstractmetamodel___MMGlobalClass___class_refinement_hierarchy_t)CALL( self,COLOR_abstractmetamodel___MMGlobalClass___class_refinement_hierarchy))( self) /*MMGlobalClass::class_refinement_hierarchy*/;
-  variable2 = ((partial_order___PartialOrder___iterator_t)CALL(variable2,COLOR_abstract_collection___Collection___iterator))(variable2) /*PartialOrder::iterator*/;
+  struct trace_t trace = {NULL, NULL, 299, LOCATE_abstractmetamodel___MMGlobalClass___register_local_class};
+  val_t variable[9];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___module( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::module*/;
+  /* Register variable[3]: Result */
+  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::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMGlobalClass___register_local_class, LOCATE_abstractmetamodel, 302); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___crhe( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::crhe*/;
+  /* Register variable[3]: Result */
+  variable[3] = 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::==*/)))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMGlobalClass___register_local_class, LOCATE_abstractmetamodel, 303); nit_exit(1);}
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = NEW_Array_array___Array___init() /*new Array[MMLocalClass]*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMGlobalClass___class_refinement_hierarchy(variable[0])(variable[0]) /*MMGlobalClass::class_refinement_hierarchy*/;
+  /* Register variable[4]: For iterator */
+  variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*PartialOrder::iterator*/;
   while (true) { /*for*/
-    variable3 = ((abstract_collection___Iterator___is_ok_t)CALL(variable2,COLOR_abstract_collection___Iterator___is_ok))(variable2) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable3)) break; /*for*/
-    variable3 = ((abstract_collection___Iterator___item_t)CALL(variable2,COLOR_abstract_collection___Iterator___item))(variable2) /*Iterator::item*/;
-    variable4 = ((abstractmetamodel___MMLocalClass___module_t)CALL( variable0 /*c*/,COLOR_abstractmetamodel___MMLocalClass___module))( variable0 /*c*/) /*MMLocalClass::module*/;
-    variable4 = ((abstractmetamodel___MMModule___mhe_t)CALL(variable4,COLOR_abstractmetamodel___MMModule___mhe))(variable4) /*MMModule::mhe*/;
-    variable5 = ((abstractmetamodel___MMLocalClass___module_t)CALL( variable3 /*s*/,COLOR_abstractmetamodel___MMLocalClass___module))( variable3 /*s*/) /*MMLocalClass::module*/;
-    variable4 = ((partial_order___PartialOrderElement_____l_t)CALL(variable4,COLOR_partial_order___PartialOrderElement_____l))(variable4, variable5) /*PartialOrderElement::<*/;
-    variable5 = variable4;
-    if (UNTAG_Bool(variable5)) { /* and */
-      variable5 = TAG_Bool(( variable3 /*s*/==NIT_NULL) || VAL_ISA( variable3 /*s*/, COLOR_MMConcreteClass, ID_MMConcreteClass)) /*cast MMConcreteClass*/;
+    /* Register variable[5]: For 'is_ok' result */
+    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*/ /* Ensure var: For item*/;
+    /* Register variable[6]: Local variable */
+    variable[6] = variable[5];
+    /* Register variable[7]: Result */
+    variable[7] = CALL_abstractmetamodel___MMLocalClass___module( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::module*/;
+    /* Register variable[7]: Result */
+    variable[7] = CALL_abstractmetamodel___MMModule___mhe(variable[7])(variable[7]) /*MMModule::mhe*/;
+    /* Register variable[8]: Result */
+    variable[8] = CALL_abstractmetamodel___MMLocalClass___module( variable[6] /*s*/)( variable[6] /*s*/) /*MMLocalClass::module*/;
+    /* Register variable[7]: Result */
+    variable[7] = CALL_partial_order___PartialOrderElement_____l(variable[7])(variable[7], variable[8]) /*PartialOrderElement::<*/;
+    /* Ensure var variable[7]: Left 'and' operand*/
+    if (UNTAG_Bool(variable[7])) { /* and */
+      /* Register variable[7]: Result */
+      variable[7] = TAG_Bool(( variable[6] /*s*/==NIT_NULL) || VAL_ISA( variable[6] /*s*/, COLOR_MMConcreteClass, ID_MMConcreteClass)) /*cast MMConcreteClass*/;
     }
-    variable4 = variable5;
-    if (UNTAG_Bool(variable4)) { /*if*/
-      ((array___AbstractArray___add_t)CALL( variable1 /*sup*/,COLOR_abstract_collection___SimpleCollection___add))( variable1 /*sup*/,  variable3 /*s*/) /*Array::add*/;
+    /* Register variable[7]: Result */
+    if (UNTAG_Bool(variable[7])) { /*if*/
+      CALL_abstract_collection___SimpleCollection___add( variable[3] /*sup*/)( variable[3] /*sup*/,  variable[6] /*s*/) /*AbstractArray::add*/;
     }
-    continue_25: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable2,COLOR_abstract_collection___Iterator___next))(variable2) /*Iterator::next*/;
+    continue_27: while(0);
+    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*Iterator::next*/;
   }
-  break_25: while(0);
-  variable2 = ATTR_abstractmetamodel___MMGlobalClass____class_refinement_hierarchy( self) /*MMGlobalClass::_class_refinement_hierarchy*/;
-  variable2 = ((partial_order___PartialOrder___add_t)CALL(variable2,COLOR_partial_order___PartialOrder___add))(variable2,  variable0 /*c*/,  variable1 /*sup*/) /*PartialOrder::add*/;
-  ATTR_abstractmetamodel___MMLocalClass____crhe( variable0 /*c*/) /*MMLocalClass::_crhe*/ = variable2;
+  break_27: while(0);
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMGlobalClass____class_refinement_hierarchy(variable[0]) /*MMGlobalClass::_class_refinement_hierarchy*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_partial_order___PartialOrder___add(variable[4])(variable[4],  variable[1] /*c*/,  variable[3] /*sup*/) /*PartialOrder::add*/;
+  ATTR_abstractmetamodel___MMLocalClass____crhe( variable[1] /*c*/) /*MMLocalClass::_crhe*/ = variable[4];
+  return_label26: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMGlobalClass___is_interface(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___is_interface, 324};
+  struct trace_t trace = {NULL, NULL, 313, LOCATE_abstractmetamodel___MMGlobalClass___is_interface};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalClass____is_interface( self) /*MMGlobalClass::_is_interface*/;
 }
 void abstractmetamodel___MMGlobalClass___is_interface__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___is_interface__eq, 324};
+  struct trace_t trace = {NULL, NULL, 313, LOCATE_abstractmetamodel___MMGlobalClass___is_interface__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMGlobalClass____is_interface( self) /*MMGlobalClass::_is_interface*/ =  param0;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMGlobalClass___is_abstract(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___is_abstract, 327};
+  struct trace_t trace = {NULL, NULL, 316, LOCATE_abstractmetamodel___MMGlobalClass___is_abstract};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalClass____is_abstract( self) /*MMGlobalClass::_is_abstract*/;
 }
 void abstractmetamodel___MMGlobalClass___is_abstract__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___is_abstract__eq, 327};
+  struct trace_t trace = {NULL, NULL, 316, LOCATE_abstractmetamodel___MMGlobalClass___is_abstract__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMGlobalClass____is_abstract( self) /*MMGlobalClass::_is_abstract*/ =  param0;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMGlobalClass___is_universal(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___is_universal, 330};
+  struct trace_t trace = {NULL, NULL, 319, LOCATE_abstractmetamodel___MMGlobalClass___is_universal};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalClass____is_universal( self) /*MMGlobalClass::_is_universal*/;
 }
 void abstractmetamodel___MMGlobalClass___is_universal__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___is_universal__eq, 330};
+  struct trace_t trace = {NULL, NULL, 319, LOCATE_abstractmetamodel___MMGlobalClass___is_universal__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMGlobalClass____is_universal( self) /*MMGlobalClass::_is_universal*/ =  param0;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMGlobalClass___visibility_level(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___visibility_level, 333};
+  struct trace_t trace = {NULL, NULL, 322, LOCATE_abstractmetamodel___MMGlobalClass___visibility_level};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalClass____visibility_level( self) /*MMGlobalClass::_visibility_level*/;
 }
 void abstractmetamodel___MMGlobalClass___visibility_level__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalClass___visibility_level__eq, 333};
+  struct trace_t trace = {NULL, NULL, 322, LOCATE_abstractmetamodel___MMGlobalClass___visibility_level__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMGlobalClass____visibility_level( self) /*MMGlobalClass::_visibility_level*/ =  param0;
   tracehead = trace.prev;
   return;
 }
-val_t abstractmetamodel___MMLocalClass___name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___name, 341};
+val_t abstractmetamodel___MMGlobalClass___is_mixin(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 327, LOCATE_abstractmetamodel___MMGlobalClass___is_mixin};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = ATTR_abstractmetamodel___MMGlobalClass____mixin_of(variable[0]) /*MMGlobalClass::_mixin_of*/;
+  /* Register variable[2]: Result */
+  variable[2] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[2] == variable[0]) || ((variable[2] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[2])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2],variable[0])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[2])(variable[2], variable[0]) /*Object::==*/)))))));
+  variable[1] = variable[2];
+  goto return_label28;
+  return_label28: while(false);
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMLocalClass____name( self) /*MMLocalClass::_name*/;
+  return variable[1];
 }
-val_t abstractmetamodel___MMLocalClass___arity(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___arity, 344};
+val_t abstractmetamodel___MMGlobalClass___mixin_of(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 334, LOCATE_abstractmetamodel___MMGlobalClass___mixin_of};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMLocalClass____arity( self) /*MMLocalClass::_arity*/;
+  return ATTR_abstractmetamodel___MMGlobalClass____mixin_of( self) /*MMGlobalClass::_mixin_of*/;
 }
-val_t abstractmetamodel___MMLocalClass___module(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___module, 348};
+void abstractmetamodel___MMGlobalClass___mixin_of__eq(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 334, LOCATE_abstractmetamodel___MMGlobalClass___mixin_of__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  ATTR_abstractmetamodel___MMGlobalClass____mixin_of( self) /*MMGlobalClass::_mixin_of*/ =  param0;
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMLocalClass____module( self) /*MMLocalClass::_module*/;
+  return;
 }
-val_t abstractmetamodel___MMLocalClass___abstract(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___abstract, 351};
+val_t abstractmetamodel___MMLocalClass___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 519, LOCATE_abstractmetamodel___MMLocalClass___to_s};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = ATTR_abstractmetamodel___MMLocalClass____name(variable[0]) /*MMLocalClass::_name*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*Symbol::to_s*/;
+  variable[1] = variable[2];
+  goto return_label29;
+  return_label29: while(false);
+  tracehead = trace.prev;
+  return variable[1];
+}
+val_t abstractmetamodel___MMLocalClass___name(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 343, LOCATE_abstractmetamodel___MMLocalClass___name};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMLocalClass____abstract( self) /*MMLocalClass::_abstract*/;
+  return ATTR_abstractmetamodel___MMLocalClass____name( self) /*MMLocalClass::_name*/;
 }
-void abstractmetamodel___MMLocalClass___abstract__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___abstract__eq, 351};
+val_t abstractmetamodel___MMLocalClass___arity(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 346, LOCATE_abstractmetamodel___MMLocalClass___arity};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
-  ATTR_abstractmetamodel___MMLocalClass____abstract( self) /*MMLocalClass::_abstract*/ =  param0;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
-  return;
+  return ATTR_abstractmetamodel___MMLocalClass____arity( self) /*MMLocalClass::_arity*/;
+}
+val_t abstractmetamodel___MMLocalClass___module(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 350, LOCATE_abstractmetamodel___MMLocalClass___module};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  tracehead = trace.prev;
+  return ATTR_abstractmetamodel___MMLocalClass____module( self) /*MMLocalClass::_module*/;
 }
 val_t abstractmetamodel___MMLocalClass___global(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___global, 354};
+  struct trace_t trace = {NULL, NULL, 353, LOCATE_abstractmetamodel___MMLocalClass___global};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____global( self) /*MMLocalClass::_global*/;
 }
 val_t abstractmetamodel___MMLocalClass___crhe(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___crhe, 357};
+  struct trace_t trace = {NULL, NULL, 356, LOCATE_abstractmetamodel___MMLocalClass___crhe};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____crhe( self) /*MMLocalClass::_crhe*/;
 }
 val_t abstractmetamodel___MMLocalClass___cshe(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___cshe, 360};
+  struct trace_t trace = {NULL, NULL, 359, LOCATE_abstractmetamodel___MMLocalClass___cshe};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____cshe( self) /*MMLocalClass::_cshe*/;
 }
 val_t abstractmetamodel___MMLocalClass___che(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___che, 363};
+  struct trace_t trace = {NULL, NULL, 362, LOCATE_abstractmetamodel___MMLocalClass___che};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____che( self) /*MMLocalClass::_che*/;
 }
 val_t abstractmetamodel___MMLocalClass___local_property_by_global(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___local_property_by_global, 366};
+  struct trace_t trace = {NULL, NULL, 365, LOCATE_abstractmetamodel___MMLocalClass___local_property_by_global};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____local_property_by_global( self) /*MMLocalClass::_local_property_by_global*/;
 }
 val_t abstractmetamodel___MMLocalClass___global_properties(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___global_properties, 369};
+  struct trace_t trace = {NULL, NULL, 368, LOCATE_abstractmetamodel___MMLocalClass___global_properties};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____global_properties( self) /*MMLocalClass::_global_properties*/;
 }
 val_t abstractmetamodel___MMLocalClass___properties_by_name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___properties_by_name, 372};
+  struct trace_t trace = {NULL, NULL, 371, LOCATE_abstractmetamodel___MMLocalClass___properties_by_name};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
 }
-void abstractmetamodel___MMLocalClass___init(val_t  self, val_t  param0, val_t  param1, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___init, 375};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMLocalClass].i]) return;
-  ATTR_abstractmetamodel___MMLocalClass____name( self) /*MMLocalClass::_name*/ =  variable0 /*name*/;
-  ATTR_abstractmetamodel___MMLocalClass____arity( self) /*MMLocalClass::_arity*/ =  variable1 /*arity*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMLocalClass].i] = 1;
+void abstractmetamodel___MMLocalClass___init(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
+  struct trace_t trace = {NULL, NULL, 374, LOCATE_abstractmetamodel___MMLocalClass___init};
+  val_t variable[6];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Local variable */
+  variable[3] =  param2;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMLocalClass].i]) return;
+  /* Register variable[4]: Method return value and escape marker */
+  ATTR_abstractmetamodel___MMLocalClass____module(variable[0]) /*MMLocalClass::_module*/ =  variable[1] /*mod*/;
+  ATTR_abstractmetamodel___MMLocalClass____name(variable[0]) /*MMLocalClass::_name*/ =  variable[2] /*name*/;
+  ATTR_abstractmetamodel___MMLocalClass____arity(variable[0]) /*MMLocalClass::_arity*/ =  variable[3] /*arity*/;
+  /* Register variable[5]: Result */
+  variable[5] = ATTR_abstractmetamodel___MMModule____local_classes( variable[1] /*mod*/) /*MMModule::_local_classes*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5], variable[0]) /*AbstractArray::add*/;
+  return_label30: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMLocalClass].i] = 1;
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMLocalClass___for_module(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___for_module, 382};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ((abstractmetamodel___MMLocalClass___global_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___global))( self) /*MMLocalClass::global*/;
-  variable1 = ((abstractmetamodel___MMModule_____bra_t)CALL( variable0 /*m*/,COLOR_abstractmetamodel___MMModule_____bra))( variable0 /*m*/, variable1) /*MMModule::[]*/;
-  goto return_label27;
-  return_label27: while(false);
+  struct trace_t trace = {NULL, NULL, 383, LOCATE_abstractmetamodel___MMLocalClass___for_module};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___global(variable[0])(variable[0]) /*MMLocalClass::global*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMModule_____bra( variable[1] /*m*/)( variable[1] /*m*/, variable[3]) /*MMModule::[]*/;
+  variable[2] = variable[3];
+  goto return_label31;
+  return_label31: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 void abstractmetamodel___MMLocalClass___new_global(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___new_global, 388};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable1 = NEW_abstractmetamodel___MMGlobalClass___init( self); /*new MMGlobalClass*/
-  variable0 = variable1;
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____module( self) /*MMLocalClass::_module*/;
-  variable1 = ATTR_abstractmetamodel___MMModule____global_classes(variable1) /*MMModule::_global_classes*/;
-  ((array___AbstractArray___add_t)CALL(variable1,COLOR_abstract_collection___SimpleCollection___add))(variable1,  variable0 /*g*/) /*Array::add*/;
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____module( self) /*MMLocalClass::_module*/;
-  variable1 = ATTR_abstractmetamodel___MMModule____global_class_by_name(variable1) /*MMModule::_global_class_by_name*/;
-  variable2 = ((abstractmetamodel___MMLocalClass___name_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___name))( self) /*MMLocalClass::name*/;
-  ((abstract_collection___Map_____braeq_t)CALL(variable1,COLOR_abstract_collection___Map_____braeq))(variable1, variable2,  variable0 /*g*/) /*Map::[]=*/;
-  ((abstractmetamodel___MMLocalClass___set_global_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___set_global))( self,  variable0 /*g*/) /*MMLocalClass::set_global*/;
+  struct trace_t trace = {NULL, NULL, 389, LOCATE_abstractmetamodel___MMLocalClass___new_global};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Local variable */
+  /* Register variable[3]: Result */
+  variable[3] = NEW_MMGlobalClass_abstractmetamodel___MMGlobalClass___init(variable[0]) /*new MMGlobalClass*/;
+  variable[2] = variable[3];
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____module(variable[0]) /*MMLocalClass::_module*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____global_classes(variable[3]) /*MMModule::_global_classes*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3],  variable[2] /*g*/) /*AbstractArray::add*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____module(variable[0]) /*MMLocalClass::_module*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMModule____global_class_by_name(variable[3]) /*MMModule::_global_class_by_name*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalClass___name(variable[0])(variable[0]) /*MMLocalClass::name*/;
+  CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[4],  variable[2] /*g*/) /*Map::[]=*/;
+  CALL_abstractmetamodel___MMLocalClass___set_global(variable[0])(variable[0],  variable[2] /*g*/) /*MMLocalClass::set_global*/;
+  return_label32: while(false);
   tracehead = trace.prev;
   return;
 }
 void abstractmetamodel___MMLocalClass___set_global(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___set_global, 397};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*g*/ ==  NIT_NULL /*null*/) || (( variable0 /*g*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*g*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*g*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*g*/,COLOR_kernel___Object_____eqeq))( variable0 /*g*/,  NIT_NULL /*null*/) /*MMGlobalClass::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMLocalClass___set_global, 402); nit_exit(1);}
-  ATTR_abstractmetamodel___MMLocalClass____global( self) /*MMLocalClass::_global*/ =  variable0 /*g*/;
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____global( self) /*MMLocalClass::_global*/;
-  ((abstractmetamodel___MMGlobalClass___register_local_class_t)CALL(variable1,COLOR_abstractmetamodel___MMGlobalClass___register_local_class))(variable1,  self) /*MMGlobalClass::register_local_class*/;
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____module( self) /*MMLocalClass::_module*/;
-  ((abstractmetamodel___MMModule___register_global_class_t)CALL(variable1,COLOR_abstractmetamodel___MMModule___register_global_class))(variable1,  self) /*MMModule::register_global_class*/;
+  struct trace_t trace = {NULL, NULL, 398, LOCATE_abstractmetamodel___MMLocalClass___set_global};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*g*/ ==  NIT_NULL /*null*/) || (( variable[1] /*g*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*g*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*g*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*g*/)( variable[1] /*g*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___set_global, LOCATE_abstractmetamodel, 403); nit_exit(1);}
+  ATTR_abstractmetamodel___MMLocalClass____global(variable[0]) /*MMLocalClass::_global*/ =  variable[1] /*g*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____global(variable[0]) /*MMLocalClass::_global*/;
+  CALL_abstractmetamodel___MMGlobalClass___register_local_class(variable[3])(variable[3], variable[0]) /*MMGlobalClass::register_local_class*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____module(variable[0]) /*MMLocalClass::_module*/;
+  CALL_abstractmetamodel___MMModule___register_global_class(variable[3])(variable[3], variable[0]) /*MMModule::register_global_class*/;
+  return_label33: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMLocalClass___has_global_property_by_name(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___has_global_property_by_name, 408};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable2 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-  variable2 = ((abstract_collection___Map_____bra_t)CALL(variable2,COLOR_abstract_collection___Map_____bra))(variable2,  variable0 /*n*/) /*Map::[]*/;
-  variable1 = variable2;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable1 /*props*/ ==  NIT_NULL /*null*/) || (( variable1 /*props*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*props*/,COLOR_kernel___Object_____eqeq))( variable1 /*props*/,  NIT_NULL /*null*/) /*Array::==*/)))));
-  variable1 = variable2;
-  goto return_label30;
-  return_label30: while(false);
+  struct trace_t trace = {NULL, NULL, 409, LOCATE_abstractmetamodel___MMLocalClass___has_global_property_by_name};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead___has_key(variable[3])(variable[3],  variable[1] /*n*/) /*MapRead::has_key*/;
+  /* Ensure var variable[3]: Left 'and' operand*/
+  if (UNTAG_Bool(variable[3])) { /* and */
+    /* Register variable[3]: Result */
+    variable[3] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstract_collection___MapRead_____bra(variable[3])(variable[3],  variable[1] /*n*/) /*MapRead::[]*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstract_collection___Collection___length(variable[3])(variable[3]) /*AbstractArrayRead::length*/;
+    /* Register variable[3]: Result */
+    variable[3] = TAG_Bool((variable[3])==( TAG_Int(1)));
+  }
+  /* Register variable[3]: Result */
+  variable[2] = variable[3];
+  goto return_label34;
+  return_label34: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t abstractmetamodel___MMLocalClass___get_property_by_name(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___get_property_by_name, 416};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable2 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-  variable2 = ((abstract_collection___Map_____bra_t)CALL(variable2,COLOR_abstract_collection___Map_____bra))(variable2,  variable0 /*n*/) /*Map::[]*/;
-  variable1 = variable2;
-  variable2 = TAG_Bool(( variable1 /*props*/ ==  NIT_NULL /*null*/) || (( variable1 /*props*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*props*/,COLOR_kernel___Object_____eqeq))( variable1 /*props*/,  NIT_NULL /*null*/) /*Array::==*/)));
-  variable3 = variable2;
-  if (!UNTAG_Bool(variable3)) { /* or */
-    variable3 = ((array___AbstractArray___length_t)CALL( variable1 /*props*/,COLOR_abstract_collection___Collection___length))( variable1 /*props*/) /*Array::length*/;
-    variable3 = TAG_Bool(UNTAG_Int(variable3)>UNTAG_Int( TAG_Int(1)));
-  }
-  variable2 = variable3;
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable1 =  NIT_NULL /*null*/;
-    goto return_label31;
+  struct trace_t trace = {NULL, NULL, 416, LOCATE_abstractmetamodel___MMLocalClass___get_property_by_name};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___has_global_property_by_name(variable[0])(variable[0],  variable[1] /*n*/) /*MMLocalClass::has_global_property_by_name*/;
+  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[3])))) { /*if*/
+    fprintf(stderr, "Aborted"); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___get_property_by_name, LOCATE_abstractmetamodel, 420); nit_exit(1);
   }
-  variable2 = ((abstract_collection___IndexedCollection___first_t)CALL( variable1 /*props*/,COLOR_abstract_collection___Collection___first))( variable1 /*props*/) /*Array::first*/;
-  variable1 = variable2;
-  goto return_label31;
-  return_label31: while(false);
-  tracehead = trace.prev;
-  return variable1;
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstract_collection___MapRead_____bra(variable[4])(variable[4],  variable[1] /*n*/) /*MapRead::[]*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstract_collection___Collection___first( variable[3] /*props*/)( variable[3] /*props*/) /*IndexedCollectionRead::first*/;
+  variable[2] = variable[4];
+  goto return_label35;
+  return_label35: while(false);
+  tracehead = trace.prev;
+  return variable[2];
 }
 val_t abstractmetamodel___MMLocalClass___attribute(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___attribute, 427};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ((abstractmetamodel___MMLocalClass___get_property_by_name_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___get_property_by_name))( self,  variable0 /*a*/) /*MMLocalClass::get_property_by_name*/;
-  goto return_label32;
-  return_label32: while(false);
-  tracehead = trace.prev;
-  return variable1;
+  struct trace_t trace = {NULL, NULL, 425, LOCATE_abstractmetamodel___MMLocalClass___attribute};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalClass___get_property_by_name(variable[0])(variable[0],  variable[1] /*a*/) /*MMLocalClass::get_property_by_name*/;
+  variable[2] = variable[3];
+  goto return_label36;
+  return_label36: while(false);
+  tracehead = trace.prev;
+  return variable[2];
 }
 val_t abstractmetamodel___MMLocalClass___method(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___method, 434};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*Map::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMLocalClass___method, 438); nit_exit(1);}
-  variable2 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-  variable2 = ((abstract_collection___Map_____bra_t)CALL(variable2,COLOR_abstract_collection___Map_____bra))(variable2,  variable0 /*na*/) /*Map::[]*/;
-  variable1 = variable2;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable1 /*props*/ ==  NIT_NULL /*null*/) || (( variable1 /*props*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*props*/,COLOR_kernel___Object_____eqeq))( variable1 /*props*/,  NIT_NULL /*null*/) /*Array::==*/)))));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable2 = ((abstract_collection___IndexedCollection___first_t)CALL( variable1 /*props*/,COLOR_abstract_collection___Collection___first))( variable1 /*props*/) /*Array::first*/;
-    variable1 = variable2;
-    goto return_label33;
-  }
-  variable1 =  NIT_NULL /*null*/;
-  goto return_label33;
-  return_label33: while(false);
+  struct trace_t trace = {NULL, NULL, 432, LOCATE_abstractmetamodel___MMLocalClass___method};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+  /* Register variable[3]: Result */
+  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::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___method, LOCATE_abstractmetamodel, 436); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead_____bra(variable[3])(variable[3],  variable[1] /*na*/) /*MapRead::[]*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___Collection___first(variable[3])(variable[3]) /*IndexedCollectionRead::first*/;
+  variable[2] = variable[3];
+  goto return_label37;
+  return_label37: while(false);
+  tracehead = trace.prev;
+  return variable[2];
+}
+val_t abstractmetamodel___MMLocalClass___select_method(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 440, LOCATE_abstractmetamodel___MMLocalClass___select_method};
+  val_t variable[6];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*name*/ ==  NIT_NULL /*null*/) || (( variable[1] /*name*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*name*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*name*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*name*/)( variable[1] /*name*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___select_method, LOCATE_abstractmetamodel, 444); nit_exit(1);}
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalClass___method(variable[0])(variable[0],  variable[1] /*name*/) /*MMLocalClass::method*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = CALL_abstractmetamodel___MMLocalClass_____bra(variable[0])(variable[0],  variable[3] /*gp*/) /*MMLocalClass::[]*/;
+  variable[4] = variable[5];
+  /* Register variable[5]: Result */
+  variable[5] = TAG_Bool(( variable[4] /*res*/==NIT_NULL) || VAL_ISA( variable[4] /*res*/, COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
+  if (!UNTAG_Bool(variable[5])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___select_method, LOCATE_abstractmetamodel, 447); nit_exit(1);}
+  variable[2] =  variable[4] /*res*/;
+  goto return_label38;
+  return_label38: while(false);
+  tracehead = trace.prev;
+  return variable[2];
+}
+val_t abstractmetamodel___MMLocalClass___select_attribute(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 451, LOCATE_abstractmetamodel___MMLocalClass___select_attribute};
+  val_t variable[6];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*name*/ ==  NIT_NULL /*null*/) || (( variable[1] /*name*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*name*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*name*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*name*/)( variable[1] /*name*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___select_attribute, LOCATE_abstractmetamodel, 455); nit_exit(1);}
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalClass___attribute(variable[0])(variable[0],  variable[1] /*name*/) /*MMLocalClass::attribute*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = CALL_abstractmetamodel___MMLocalClass_____bra(variable[0])(variable[0],  variable[3] /*gp*/) /*MMLocalClass::[]*/;
+  variable[4] = variable[5];
+  /* Register variable[5]: Result */
+  variable[5] = TAG_Bool(( variable[4] /*res*/==NIT_NULL) || VAL_ISA( variable[4] /*res*/, COLOR_MMAttribute, ID_MMAttribute)) /*cast MMAttribute*/;
+  if (!UNTAG_Bool(variable[5])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___select_attribute, LOCATE_abstractmetamodel, 458); nit_exit(1);}
+  variable[2] =  variable[4] /*res*/;
+  goto return_label39;
+  return_label39: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t abstractmetamodel___MMLocalClass___super_methods_named(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___super_methods_named, 447};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
-    val_t variable4;
-    val_t variable5;
-    val_t variable6;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable2 = NEW_array___Array___init(); /*new Array[MMLocalClass]*/
-  variable1 = variable2;
-  variable2 = ((abstractmetamodel___MMLocalClass___cshe_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___cshe))( self) /*MMLocalClass::cshe*/;
-  variable2 = ((partial_order___PartialOrderElement___greaters_t)CALL(variable2,COLOR_partial_order___PartialOrderElement___greaters))(variable2) /*PartialOrderElement::greaters*/;
-  variable2 = ((abstract_collection___Collection___iterator_t)CALL(variable2,COLOR_abstract_collection___Collection___iterator))(variable2) /*Set::iterator*/;
+  struct trace_t trace = {NULL, NULL, 462, LOCATE_abstractmetamodel___MMLocalClass___super_methods_named};
+  val_t variable[10];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = NEW_Array_array___Array___init() /*new Array[MMLocalClass]*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalClass___cshe(variable[0])(variable[0]) /*MMLocalClass::cshe*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_partial_order___PartialOrderElement___greaters(variable[4])(variable[4]) /*PartialOrderElement::greaters*/;
+  /* Register variable[4]: For iterator */
+  variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*Collection::iterator*/;
   while (true) { /*for*/
-    variable3 = ((abstract_collection___Iterator___is_ok_t)CALL(variable2,COLOR_abstract_collection___Iterator___is_ok))(variable2) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable3)) break; /*for*/
-    variable3 = ((abstract_collection___Iterator___item_t)CALL(variable2,COLOR_abstract_collection___Iterator___item))(variable2) /*Iterator::item*/;
-    variable5 = ((abstractmetamodel___MMLocalClass___method_t)CALL( variable3 /*c*/,COLOR_abstractmetamodel___MMLocalClass___method))( variable3 /*c*/,  variable0 /*n*/) /*MMLocalClass::method*/;
-    variable4 = variable5;
-    variable5 = TAG_Bool(( variable4 /*g*/ ==  NIT_NULL /*null*/) || (( variable4 /*g*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable4 /*g*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable4 /*g*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable4 /*g*/,COLOR_kernel___Object_____eqeq))( variable4 /*g*/,  NIT_NULL /*null*/) /*MMGlobalProperty::==*/)))));
-    if (UNTAG_Bool(variable5)) { /*if*/
-      goto continue_35;
+    /* Register variable[5]: For 'is_ok' result */
+    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*/ /* Ensure var: For item*/;
+    /* Register variable[6]: Local variable */
+    variable[6] = variable[5];
+    /* Register variable[7]: Result */
+    variable[7] = CALL_abstractmetamodel___MMLocalClass___has_global_property_by_name( variable[6] /*c*/)( variable[6] /*c*/,  variable[1] /*n*/) /*MMLocalClass::has_global_property_by_name*/;
+    if (UNTAG_Bool(variable[7])) { /*if*/
+      CALL_abstract_collection___SimpleCollection___add( variable[3] /*classes*/)( variable[3] /*classes*/,  variable[6] /*c*/) /*AbstractArray::add*/;
     }
-    ((array___AbstractArray___add_t)CALL( variable1 /*classes*/,COLOR_abstract_collection___SimpleCollection___add))( variable1 /*classes*/,  variable3 /*c*/) /*Array::add*/;
-    continue_35: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable2,COLOR_abstract_collection___Iterator___next))(variable2) /*Iterator::next*/;
+    continue_41: while(0);
+    CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*Iterator::next*/;
   }
-  break_35: while(0);
-  variable2 = ((abstractmetamodel___MMLocalClass___cshe_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___cshe))( self) /*MMLocalClass::cshe*/;
-  variable2 = ((partial_order___PartialOrderElement___order_t)CALL(variable2,COLOR_partial_order___PartialOrderElement___order))(variable2) /*PartialOrderElement::order*/;
-  variable2 = ((partial_order___PartialOrder___select_smallests_t)CALL(variable2,COLOR_partial_order___PartialOrder___select_smallests))(variable2,  variable1 /*classes*/) /*PartialOrder::select_smallests*/;
-  variable1 = variable2 /*classes=*/;
-  variable3 = NEW_array___Array___init(); /*new Array[MMLocalProperty]*/
-  variable2 = variable3;
-  variable3 = ((array___AbstractArray___iterator_t)CALL( variable1 /*classes*/,COLOR_abstract_collection___Collection___iterator))( variable1 /*classes*/) /*Array::iterator*/;
+  break_41: while(0);
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalClass___cshe(variable[0])(variable[0]) /*MMLocalClass::cshe*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_partial_order___PartialOrderElement___order(variable[4])(variable[4]) /*PartialOrderElement::order*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_partial_order___PartialOrder___select_smallests(variable[4])(variable[4],  variable[3] /*classes*/) /*PartialOrder::select_smallests*/;
+  variable[3] = variable[4] /*classes=*/;
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = NEW_Array_array___Array___init() /*new Array[MMLocalProperty]*/;
+  variable[4] = variable[5];
+  /* Register variable[5]: For iterator */
+  variable[5] = CALL_abstract_collection___Collection___iterator( variable[3] /*classes*/)( variable[3] /*classes*/) /*AbstractArrayRead::iterator*/;
   while (true) { /*for*/
-    variable4 = ((array___ArrayIterator___is_ok_t)CALL(variable3,COLOR_abstract_collection___Iterator___is_ok))(variable3) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable4)) break; /*for*/
-    variable4 = ((array___ArrayIterator___item_t)CALL(variable3,COLOR_abstract_collection___Iterator___item))(variable3) /*ArrayIterator::item*/;
-    variable6 = ((abstractmetamodel___MMLocalClass___method_t)CALL( variable4 /*c*/,COLOR_abstractmetamodel___MMLocalClass___method))( variable4 /*c*/,  variable0 /*n*/) /*MMLocalClass::method*/;
-    variable5 = variable6;
-    variable6 = ((abstractmetamodel___MMLocalClass_____bra_t)CALL( variable4 /*c*/,COLOR_abstractmetamodel___MMLocalClass_____bra))( variable4 /*c*/,  variable5 /*g*/) /*MMLocalClass::[]*/;
-    ((array___AbstractArray___add_t)CALL( variable2 /*res*/,COLOR_abstract_collection___SimpleCollection___add))( variable2 /*res*/, variable6) /*Array::add*/;
-    continue_36: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable3,COLOR_abstract_collection___Iterator___next))(variable3) /*ArrayIterator::next*/;
+    /* Register variable[6]: For 'is_ok' result */
+    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*/ /* Ensure var: For item*/;
+    /* Register variable[7]: Local variable */
+    variable[7] = variable[6];
+    /* Register variable[8]: Local variable */
+    /* Register variable[9]: Result */
+    variable[9] = CALL_abstractmetamodel___MMLocalClass___method( variable[7] /*c*/)( variable[7] /*c*/,  variable[1] /*n*/) /*MMLocalClass::method*/;
+    variable[8] = variable[9];
+    /* Register variable[9]: Result */
+    variable[9] = CALL_abstractmetamodel___MMLocalClass_____bra( variable[7] /*c*/)( variable[7] /*c*/,  variable[8] /*g*/) /*MMLocalClass::[]*/;
+    CALL_abstract_collection___SimpleCollection___add( variable[4] /*res*/)( variable[4] /*res*/, variable[9]) /*AbstractArray::add*/;
+    continue_42: while(0);
+    CALL_abstract_collection___Iterator___next(variable[5])(variable[5]) /*ArrayIterator::next*/;
   }
-  break_36: while(0);
-  variable1 =  variable2 /*res*/;
-  goto return_label34;
-  return_label34: while(false);
+  break_42: while(0);
+  variable[2] =  variable[4] /*res*/;
+  goto return_label40;
+  return_label40: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 void abstractmetamodel___MMLocalClass___register_local_property(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___register_local_property, 467};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ((abstractmetamodel___MMLocalProperty___global_t)CALL( variable0 /*p*/,COLOR_abstractmetamodel___MMLocalProperty___global))( variable0 /*p*/) /*MMLocalProperty::global*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*MMGlobalProperty::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMLocalClass___register_local_property, 470); nit_exit(1);}
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global( self) /*MMLocalClass::_local_property_by_global*/;
-  variable2 = ((abstractmetamodel___MMLocalProperty___global_t)CALL( variable0 /*p*/,COLOR_abstractmetamodel___MMLocalProperty___global))( variable0 /*p*/) /*MMLocalProperty::global*/;
-  variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1, variable2) /*Map::has_key*/;
-  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable1)))) { /*if*/
-    variable1 = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global( self) /*MMLocalClass::_local_property_by_global*/;
-    variable2 = ((abstractmetamodel___MMLocalProperty___global_t)CALL( variable0 /*p*/,COLOR_abstractmetamodel___MMLocalProperty___global))( variable0 /*p*/) /*MMLocalProperty::global*/;
-    ((abstract_collection___Map_____braeq_t)CALL(variable1,COLOR_abstract_collection___Map_____braeq))(variable1, variable2,  variable0 /*p*/) /*Map::[]=*/;
+  struct trace_t trace = {NULL, NULL, 480, LOCATE_abstractmetamodel___MMLocalClass___register_local_property};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMLocalProperty___global( variable[1] /*p*/)( variable[1] /*p*/) /*MMLocalProperty::global*/;
+  /* Register variable[3]: Result */
+  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::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalClass___register_local_property, LOCATE_abstractmetamodel, 483); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global(variable[0]) /*MMLocalClass::_local_property_by_global*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalProperty___global( variable[1] /*p*/)( variable[1] /*p*/) /*MMLocalProperty::global*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead___has_key(variable[3])(variable[3], variable[4]) /*MapRead::has_key*/;
+  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[3])))) { /*if*/
+    /* Register variable[3]: Result */
+    variable[3] = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global(variable[0]) /*MMLocalClass::_local_property_by_global*/;
+    /* Register variable[4]: Result */
+    variable[4] = CALL_abstractmetamodel___MMLocalProperty___global( variable[1] /*p*/)( variable[1] /*p*/) /*MMLocalProperty::global*/;
+    CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[4],  variable[1] /*p*/) /*Map::[]=*/;
   }
+  return_label43: while(false);
   tracehead = trace.prev;
   return;
 }
 void abstractmetamodel___MMLocalClass___register_global_property(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___register_global_property, 477};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
-    val_t variable5;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable2 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL( variable0 /*glob*/,COLOR_abstractmetamodel___MMGlobalProperty___intro))( variable0 /*glob*/) /*MMGlobalProperty::intro*/;
-  variable1 = variable2;
-  variable3 = ((abstractmetamodel___MMLocalProperty___name_t)CALL( variable1 /*prop*/,COLOR_abstractmetamodel___MMLocalProperty___name))( variable1 /*prop*/) /*MMConcreteProperty::name*/;
-  variable2 = variable3;
-  variable4 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-  variable4 = ((abstract_collection___Map_____bra_t)CALL(variable4,COLOR_abstract_collection___Map_____bra))(variable4,  variable2 /*name*/) /*Map::[]*/;
-  variable3 = variable4;
-  variable4 = TAG_Bool(( variable3 /*props*/ ==  NIT_NULL /*null*/) || (( variable3 /*props*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable3 /*props*/,COLOR_kernel___Object_____eqeq))( variable3 /*props*/,  NIT_NULL /*null*/) /*Array::==*/)));
-  if (UNTAG_Bool(variable4)) { /*if*/
-    variable4 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-    variable5 = NEW_array___Array___with_capacity(TAG_Int(1)); /*new Array[MMGlobalProperty]*/
-    ((array___AbstractArray___add_t)CALL(variable5,COLOR_abstract_collection___SimpleCollection___add))(variable5,  variable0 /*glob*/) /*Array::add*/;
-    ((abstract_collection___Map_____braeq_t)CALL(variable4,COLOR_abstract_collection___Map_____braeq))(variable4,  variable2 /*name*/, variable5) /*Map::[]=*/;
+  struct trace_t trace = {NULL, NULL, 490, LOCATE_abstractmetamodel___MMLocalClass___register_global_property};
+  val_t variable[7];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMGlobalProperty___intro( variable[1] /*glob*/)( variable[1] /*glob*/) /*MMGlobalProperty::intro*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = CALL_abstractmetamodel___MMLocalProperty___name( variable[3] /*prop*/)( variable[3] /*prop*/) /*MMLocalProperty::name*/;
+  variable[4] = variable[5];
+  /* Register variable[5]: Result */
+  variable[5] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+  /* Register variable[5]: Result */
+  variable[5] = CALL_abstract_collection___MapRead___has_key(variable[5])(variable[5],  variable[4] /*name*/) /*MapRead::has_key*/;
+  if (UNTAG_Bool(variable[5])) { /*if*/
+    /* Register variable[5]: Result */
+    variable[5] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+    /* Register variable[5]: Result */
+    variable[5] = CALL_abstract_collection___MapRead_____bra(variable[5])(variable[5],  variable[4] /*name*/) /*MapRead::[]*/;
+    CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5],  variable[1] /*glob*/) /*AbstractArray::add*/;
   } else { /*if*/
-    variable4 = ATTR_abstractmetamodel___MMLocalClass____properties_by_name( self) /*MMLocalClass::_properties_by_name*/;
-    variable4 = ((abstract_collection___Map_____bra_t)CALL(variable4,COLOR_abstract_collection___Map_____bra))(variable4,  variable2 /*name*/) /*Map::[]*/;
-    ((array___AbstractArray___add_t)CALL(variable4,COLOR_abstract_collection___SimpleCollection___add))(variable4,  variable0 /*glob*/) /*Array::add*/;
+    /* Register variable[5]: Result */
+    variable[5] = ATTR_abstractmetamodel___MMLocalClass____properties_by_name(variable[0]) /*MMLocalClass::_properties_by_name*/;
+    variable[6] = NEW_Array_array___Array___with_capacity(TAG_Int(1)) /*new Array[MMGlobalProperty]*/ /* Ensure var: Literal array*/;
+    CALL_abstract_collection___SimpleCollection___add(variable[6])(variable[6],  variable[1] /*glob*/) /*AbstractArray::add*/;
+    /* Register variable[6]: Result */
+    CALL_abstract_collection___Map_____braeq(variable[5])(variable[5],  variable[4] /*name*/, variable[6]) /*Map::[]=*/;
   }
-  variable4 = ATTR_abstractmetamodel___MMLocalClass____global_properties( self) /*MMLocalClass::_global_properties*/;
-  ((abstract_collection___SimpleCollection___add_t)CALL(variable4,COLOR_abstract_collection___SimpleCollection___add))(variable4,  variable0 /*glob*/) /*Set::add*/;
-  ((abstractmetamodel___MMLocalClass___register_local_property_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___register_local_property))( self,  variable1 /*prop*/) /*MMLocalClass::register_local_property*/;
+  /* Register variable[5]: Result */
+  variable[5] = ATTR_abstractmetamodel___MMLocalClass____global_properties(variable[0]) /*MMLocalClass::_global_properties*/;
+  CALL_abstract_collection___SimpleCollection___add(variable[5])(variable[5],  variable[1] /*glob*/) /*SimpleCollection::add*/;
+  CALL_abstractmetamodel___MMLocalClass___register_local_property(variable[0])(variable[0],  variable[3] /*prop*/) /*MMLocalClass::register_local_property*/;
+  return_label44: while(false);
   tracehead = trace.prev;
   return;
 }
+val_t abstractmetamodel___MMLocalClass___has_global_property(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 504, LOCATE_abstractmetamodel___MMLocalClass___has_global_property};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____global_properties(variable[0]) /*MMLocalClass::_global_properties*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___Collection___has(variable[3])(variable[3],  variable[1] /*glob*/) /*Collection::has*/;
+  variable[2] = variable[3];
+  goto return_label45;
+  return_label45: while(false);
+  tracehead = trace.prev;
+  return variable[2];
+}
 val_t abstractmetamodel___MMLocalClass_____bra(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass_____bra, 492};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global( self) /*MMLocalClass::_local_property_by_global*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*Map::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMLocalClass_____bra, 495); nit_exit(1);}
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*glob*/ ==  NIT_NULL /*null*/) || (( variable0 /*glob*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*glob*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*glob*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*glob*/,COLOR_kernel___Object_____eqeq))( variable0 /*glob*/,  NIT_NULL /*null*/) /*MMGlobalProperty::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMLocalClass_____bra, 496); nit_exit(1);}
-  variable1 = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global( self) /*MMLocalClass::_local_property_by_global*/;
-  variable1 = ((abstract_collection___Map___has_key_t)CALL(variable1,COLOR_abstract_collection___Map___has_key))(variable1,  variable0 /*glob*/) /*Map::has_key*/;
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global( self) /*MMLocalClass::_local_property_by_global*/;
-    variable1 = ((abstract_collection___Map_____bra_t)CALL(variable1,COLOR_abstract_collection___Map_____bra))(variable1,  variable0 /*glob*/) /*Map::[]*/;
-    goto return_label39;
-  }
-  variable1 =  NIT_NULL /*null*/;
-  goto return_label39;
-  return_label39: while(false);
+  struct trace_t trace = {NULL, NULL, 510, LOCATE_abstractmetamodel___MMLocalClass_____bra};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalClass____local_property_by_global(variable[0]) /*MMLocalClass::_local_property_by_global*/;
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstract_collection___MapRead_____bra(variable[3])(variable[3],  variable[1] /*glob*/) /*MapRead::[]*/;
+  variable[2] = variable[3];
+  goto return_label46;
+  return_label46: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t abstractmetamodel___MMLocalClass___context(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___context, 503};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMLocalClass___module_t)CALL( self,COLOR_abstractmetamodel___MMLocalClass___module))( self) /*MMLocalClass::module*/;
-  variable0 = ((abstractmetamodel___MMModule___context_t)CALL(variable0,COLOR_abstractmetamodel___MMModule___context))(variable0) /*MMModule::context*/;
-  goto return_label40;
-  return_label40: while(false);
+  struct trace_t trace = {NULL, NULL, 516, LOCATE_abstractmetamodel___MMLocalClass___context};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalClass___module(variable[0])(variable[0]) /*MMLocalClass::module*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMModule___context(variable[2])(variable[2]) /*MMModule::context*/;
+  variable[1] = variable[2];
+  goto return_label47;
+  return_label47: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
-val_t abstractmetamodel___MMLocalClass___to_s(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalClass___to_s, 506};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ATTR_abstractmetamodel___MMLocalClass____name( self) /*MMLocalClass::_name*/;
-  variable0 = ((symbol___Symbol___to_s_t)CALL(variable0,COLOR_string___Object___to_s))(variable0) /*Symbol::to_s*/;
-  goto return_label41;
-  return_label41: while(false);
+val_t abstractmetamodel___MMGlobalProperty___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 552, LOCATE_abstractmetamodel___MMGlobalProperty___to_s};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[0])(variable[0]) /*MMGlobalProperty::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalProperty___full_name(variable[2])(variable[2]) /*MMLocalProperty::full_name*/;
+  variable[1] = variable[2];
+  goto return_label48;
+  return_label48: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t abstractmetamodel___MMGlobalProperty___intro(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___intro, 516};
+  struct trace_t trace = {NULL, NULL, 529, LOCATE_abstractmetamodel___MMGlobalProperty___intro};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalProperty____intro( self) /*MMGlobalProperty::_intro*/;
 }
 val_t abstractmetamodel___MMGlobalProperty___local_class(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___local_class, 519};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalProperty___intro))( self) /*MMGlobalProperty::intro*/;
-  variable0 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL(variable0,COLOR_abstractmetamodel___MMLocalProperty___local_class))(variable0) /*MMConcreteProperty::local_class*/;
-  goto return_label42;
-  return_label42: while(false);
+  struct trace_t trace = {NULL, NULL, 532, LOCATE_abstractmetamodel___MMGlobalProperty___local_class};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[0])(variable[0]) /*MMGlobalProperty::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[2])(variable[2]) /*MMLocalProperty::local_class*/;
+  variable[1] = variable[2];
+  goto return_label49;
+  return_label49: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
-val_t abstractmetamodel___MMGlobalProperty___concrete_property_hierarchy(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___concrete_property_hierarchy, 525};
+val_t abstractmetamodel___MMGlobalProperty___property_hierarchy(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 538, LOCATE_abstractmetamodel___MMGlobalProperty___property_hierarchy};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMGlobalProperty____concrete_property_hierarchy( self) /*MMGlobalProperty::_concrete_property_hierarchy*/;
+  return ATTR_abstractmetamodel___MMGlobalProperty____property_hierarchy( self) /*MMGlobalProperty::_property_hierarchy*/;
 }
 void abstractmetamodel___MMGlobalProperty___init(val_t  self, val_t  param0, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___init, 528};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMGlobalProperty].i]) return;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*p*/ ==  NIT_NULL /*null*/) || (( variable0 /*p*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*p*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*p*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*p*/,COLOR_kernel___Object_____eqeq))( variable0 /*p*/,  NIT_NULL /*null*/) /*MMConcreteProperty::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMGlobalProperty___init, 531); nit_exit(1);}
-  variable1 = ((abstractmetamodel___MMLocalProperty___concrete_property_t)CALL( variable0 /*p*/,COLOR_abstractmetamodel___MMLocalProperty___concrete_property))( variable0 /*p*/) /*MMConcreteProperty::concrete_property*/;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable1 ==  NIT_NULL /*null*/) || ((variable1 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable1, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable1,COLOR_kernel___Object_____eqeq))(variable1,  NIT_NULL /*null*/) /*MMConcreteProperty::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMGlobalProperty___init, 532); nit_exit(1);}
-  variable1 = NEW_partial_order___PartialOrder___init(); /*new PartialOrder[MMConcreteProperty]*/
-  ATTR_abstractmetamodel___MMGlobalProperty____concrete_property_hierarchy( self) /*MMGlobalProperty::_concrete_property_hierarchy*/ = variable1;
-  ATTR_abstractmetamodel___MMGlobalProperty____intro( self) /*MMGlobalProperty::_intro*/ =  variable0 /*p*/;
-  variable1 = NEW_array___Array___init(); /*new Array[MMConcreteProperty]*/
-  ((abstractmetamodel___MMGlobalProperty___add_concrete_property_t)CALL( self,COLOR_abstractmetamodel___MMGlobalProperty___add_concrete_property))( self,  variable0 /*p*/, variable1) /*MMGlobalProperty::add_concrete_property*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMGlobalProperty].i] = 1;
+  struct trace_t trace = {NULL, NULL, 541, LOCATE_abstractmetamodel___MMGlobalProperty___init};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMGlobalProperty].i]) return;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*p*/ ==  NIT_NULL /*null*/) || (( variable[1] /*p*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*p*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*p*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*p*/)( variable[1] /*p*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMGlobalProperty___init, LOCATE_abstractmetamodel, 544); nit_exit(1);}
+  /* Register variable[3]: Result */
+  variable[3] = NEW_PartialOrder_partial_order___PartialOrder___init() /*new PartialOrder[MMLocalProperty]*/;
+  ATTR_abstractmetamodel___MMGlobalProperty____property_hierarchy(variable[0]) /*MMGlobalProperty::_property_hierarchy*/ = variable[3];
+  ATTR_abstractmetamodel___MMGlobalProperty____intro(variable[0]) /*MMGlobalProperty::_intro*/ =  variable[1] /*p*/;
+  /* Register variable[3]: Result */
+  variable[3] = NEW_Array_array___Array___init() /*new Array[MMLocalProperty]*/;
+  CALL_abstractmetamodel___MMGlobalProperty___add_local_property(variable[0])(variable[0],  variable[1] /*p*/, variable[3]) /*MMGlobalProperty::add_local_property*/;
+  return_label50: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMGlobalProperty].i] = 1;
   tracehead = trace.prev;
   return;
 }
-val_t abstractmetamodel___MMGlobalProperty___to_s(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___to_s, 540};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalProperty___intro))( self) /*MMGlobalProperty::intro*/;
-  variable0 = ((abstractmetamodel___MMLocalProperty___full_name_t)CALL(variable0,COLOR_abstractmetamodel___MMLocalProperty___full_name))(variable0) /*MMConcreteProperty::full_name*/;
-  goto return_label44;
-  return_label44: while(false);
-  tracehead = trace.prev;
-  return variable0;
-}
-void abstractmetamodel___MMGlobalProperty___add_concrete_property(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___add_concrete_property, 542};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*i*/ ==  NIT_NULL /*null*/) || (( variable0 /*i*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*i*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*i*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*i*/,COLOR_kernel___Object_____eqeq))( variable0 /*i*/,  NIT_NULL /*null*/) /*MMConcreteProperty::==*/)))))));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMGlobalProperty___add_concrete_property, 545); nit_exit(1);}
-  variable2 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable1 /*sup*/ ==  NIT_NULL /*null*/) || (( variable1 /*sup*/ != NIT_NULL) && UNTAG_Bool(((array___AbstractArray_____eqeq_t)CALL( variable1 /*sup*/,COLOR_kernel___Object_____eqeq))( variable1 /*sup*/,  NIT_NULL /*null*/) /*Array::==*/)))));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMGlobalProperty___add_concrete_property, 546); nit_exit(1);}
-  variable2 = ATTR_abstractmetamodel___MMGlobalProperty____concrete_property_hierarchy( self) /*MMGlobalProperty::_concrete_property_hierarchy*/;
-  variable2 = ((partial_order___PartialOrder___add_t)CALL(variable2,COLOR_partial_order___PartialOrder___add))(variable2,  variable0 /*i*/,  variable1 /*sup*/) /*PartialOrder::add*/;
-  ATTR_abstractmetamodel___MMConcreteProperty____cprhe( variable0 /*i*/) /*MMConcreteProperty::_cprhe*/ = variable2;
+void abstractmetamodel___MMGlobalProperty___add_local_property(val_t  self, val_t  param0, val_t  param1) {
+  struct trace_t trace = {NULL, NULL, 554, LOCATE_abstractmetamodel___MMGlobalProperty___add_local_property};
+  val_t variable[5];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  /* Register variable[3]: Method return value and escape marker */
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*i*/ ==  NIT_NULL /*null*/) || (( variable[1] /*i*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*i*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*i*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*i*/)( variable[1] /*i*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMGlobalProperty___add_local_property, LOCATE_abstractmetamodel, 557); nit_exit(1);}
+  /* Register variable[4]: Result */
+  variable[4] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[2] /*sup*/ ==  NIT_NULL /*null*/) || (( variable[2] /*sup*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[2] /*sup*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[2] /*sup*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[2] /*sup*/)( variable[2] /*sup*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMGlobalProperty___add_local_property, LOCATE_abstractmetamodel, 558); nit_exit(1);}
+  /* Register variable[4]: Result */
+  variable[4] = ATTR_abstractmetamodel___MMGlobalProperty____property_hierarchy(variable[0]) /*MMGlobalProperty::_property_hierarchy*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_partial_order___PartialOrder___add(variable[4])(variable[4],  variable[1] /*i*/,  variable[2] /*sup*/) /*PartialOrder::add*/;
+  ATTR_abstractmetamodel___MMLocalProperty____prhe( variable[1] /*i*/) /*MMLocalProperty::_prhe*/ = variable[4];
+  return_label51: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t abstractmetamodel___MMGlobalProperty___is_attribute(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___is_attribute, 550};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalProperty___intro))( self) /*MMGlobalProperty::intro*/;
-  variable0 = TAG_Bool((variable0==NIT_NULL) || VAL_ISA(variable0, COLOR_MMAttribute, ID_MMAttribute)) /*cast MMAttribute*/;
-  goto return_label46;
-  return_label46: while(false);
-  tracehead = trace.prev;
-  return variable0;
+  struct trace_t trace = {NULL, NULL, 562, LOCATE_abstractmetamodel___MMGlobalProperty___is_attribute};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[0])(variable[0]) /*MMGlobalProperty::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = TAG_Bool((variable[2]==NIT_NULL) || VAL_ISA(variable[2], COLOR_MMAttribute, ID_MMAttribute)) /*cast MMAttribute*/;
+  variable[1] = variable[2];
+  goto return_label52;
+  return_label52: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 val_t abstractmetamodel___MMGlobalProperty___is_method(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___is_method, 553};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL( self,COLOR_abstractmetamodel___MMGlobalProperty___intro))( self) /*MMGlobalProperty::intro*/;
-  variable0 = TAG_Bool((variable0==NIT_NULL) || VAL_ISA(variable0, COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
-  goto return_label47;
-  return_label47: while(false);
-  tracehead = trace.prev;
-  return variable0;
+  struct trace_t trace = {NULL, NULL, 565, LOCATE_abstractmetamodel___MMGlobalProperty___is_method};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[0])(variable[0]) /*MMGlobalProperty::intro*/;
+  /* Register variable[2]: Result */
+  variable[2] = TAG_Bool((variable[2]==NIT_NULL) || VAL_ISA(variable[2], COLOR_MMMethod, ID_MMMethod)) /*cast MMMethod*/;
+  variable[1] = variable[2];
+  goto return_label53;
+  return_label53: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 val_t abstractmetamodel___MMGlobalProperty___is_init(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___is_init, 556};
+  struct trace_t trace = {NULL, NULL, 568, LOCATE_abstractmetamodel___MMGlobalProperty___is_init};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalProperty____is_init( self) /*MMGlobalProperty::_is_init*/;
 }
 void abstractmetamodel___MMGlobalProperty___is_init__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___is_init__eq, 556};
+  struct trace_t trace = {NULL, NULL, 568, LOCATE_abstractmetamodel___MMGlobalProperty___is_init__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMGlobalProperty____is_init( self) /*MMGlobalProperty::_is_init*/ =  param0;
   tracehead = trace.prev;
   return;
 }
+val_t abstractmetamodel___MMGlobalProperty___is_init_for(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 571, LOCATE_abstractmetamodel___MMGlobalProperty___is_init_for};
+  val_t variable[7];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = CALL_abstractmetamodel___MMGlobalProperty___is_init(variable[0])(variable[0]) /*MMGlobalProperty::is_init*/;
+  if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[3])))) { /*if*/
+    variable[2] =  TAG_Bool(false);
+    goto return_label54;
+  }
+  /* Register variable[3]: Local variable */
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[0])(variable[0]) /*MMGlobalProperty::intro*/;
+  /* Register variable[4]: Result */
+  variable[4] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[4])(variable[4]) /*MMLocalProperty::local_class*/;
+  variable[3] = variable[4];
+  /* Register variable[4]: Local variable */
+  /* Register variable[5]: Result */
+  variable[5] = CALL_abstractmetamodel___MMLocalClass___che( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::che*/;
+  /* Register variable[5]: Result */
+  variable[5] = CALL_partial_order___PartialOrderElement_____leq(variable[5])(variable[5],  variable[3] /*sc*/) /*PartialOrderElement::<=*/;
+  /* Ensure var variable[5]: Left 'and' operand*/
+  if (UNTAG_Bool(variable[5])) { /* and */
+    /* Register variable[5]: Result */
+    variable[5] = CALL_abstractmetamodel___MMLocalClass___global( variable[1] /*c*/)( variable[1] /*c*/) /*MMLocalClass::global*/;
+    /* Register variable[5]: Result */
+    variable[5] = CALL_abstractmetamodel___MMGlobalClass___mixin_of(variable[5])(variable[5]) /*MMGlobalClass::mixin_of*/;
+    /* Register variable[6]: Result */
+    variable[6] = CALL_abstractmetamodel___MMLocalClass___global( variable[3] /*sc*/)( variable[3] /*sc*/) /*MMLocalClass::global*/;
+    /* Register variable[6]: Result */
+    variable[6] = CALL_abstractmetamodel___MMGlobalClass___mixin_of(variable[6])(variable[6]) /*MMGlobalClass::mixin_of*/;
+    /* Register variable[5]: Result */
+    variable[5] = TAG_Bool((variable[5] == variable[6]) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5],variable[6])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[6]) /*Object::==*/)))));
+  }
+  /* Register variable[5]: Result */
+  variable[4] = variable[5];
+  variable[2] =  variable[4] /*res*/;
+  goto return_label54;
+  return_label54: while(false);
+  tracehead = trace.prev;
+  return variable[2];
+}
 val_t abstractmetamodel___MMGlobalProperty___visibility_level(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___visibility_level, 559};
+  struct trace_t trace = {NULL, NULL, 580, LOCATE_abstractmetamodel___MMGlobalProperty___visibility_level};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMGlobalProperty____visibility_level( self) /*MMGlobalProperty::_visibility_level*/;
 }
 void abstractmetamodel___MMGlobalProperty___visibility_level__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMGlobalProperty___visibility_level__eq, 559};
+  struct trace_t trace = {NULL, NULL, 580, LOCATE_abstractmetamodel___MMGlobalProperty___visibility_level__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   ATTR_abstractmetamodel___MMGlobalProperty____visibility_level( self) /*MMGlobalProperty::_visibility_level*/ =  param0;
   tracehead = trace.prev;
   return;
 }
+val_t abstractmetamodel___MMLocalProperty___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 632, LOCATE_abstractmetamodel___MMLocalProperty___to_s};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalProperty___name(variable[0])(variable[0]) /*MMLocalProperty::name*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*Symbol::to_s*/;
+  variable[1] = variable[2];
+  goto return_label55;
+  return_label55: while(false);
+  tracehead = trace.prev;
+  return variable[1];
+}
 val_t abstractmetamodel___MMLocalProperty___name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___name, 569};
+  struct trace_t trace = {NULL, NULL, 589, LOCATE_abstractmetamodel___MMLocalProperty___name};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalProperty____name( self) /*MMLocalProperty::_name*/;
 }
 val_t abstractmetamodel___MMLocalProperty___local_class(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___local_class, 572};
+  struct trace_t trace = {NULL, NULL, 592, LOCATE_abstractmetamodel___MMLocalProperty___local_class};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalProperty____local_class( self) /*MMLocalProperty::_local_class*/;
 }
 val_t abstractmetamodel___MMLocalProperty___global(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___global, 575};
+  struct trace_t trace = {NULL, NULL, 595, LOCATE_abstractmetamodel___MMLocalProperty___global};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
   return ATTR_abstractmetamodel___MMLocalProperty____global( self) /*MMLocalProperty::_global*/;
 }
-val_t abstractmetamodel___MMLocalProperty___super_prop(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___super_prop, 578};
-  trace.prev = tracehead; tracehead = &trace;
-  tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMLocalProperty____super_prop( self) /*MMLocalProperty::_super_prop*/;
-}
-val_t abstractmetamodel___MMLocalProperty___concrete_property(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___concrete_property, 582};
+val_t abstractmetamodel___MMLocalProperty___prhe(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 598, LOCATE_abstractmetamodel___MMLocalProperty___prhe};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMLocalProperty____concrete_property( self) /*MMLocalProperty::_concrete_property*/;
+  return ATTR_abstractmetamodel___MMLocalProperty____prhe( self) /*MMLocalProperty::_prhe*/;
 }
 val_t abstractmetamodel___MMLocalProperty___module(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___module, 586};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ATTR_abstractmetamodel___MMLocalProperty____local_class( self) /*MMLocalProperty::_local_class*/;
-  variable0 = ((abstractmetamodel___MMLocalClass___module_t)CALL(variable0,COLOR_abstractmetamodel___MMLocalClass___module))(variable0) /*MMLocalClass::module*/;
-  goto return_label48;
-  return_label48: while(false);
-  tracehead = trace.prev;
-  return variable0;
+  struct trace_t trace = {NULL, NULL, 601, LOCATE_abstractmetamodel___MMLocalProperty___module};
+  val_t variable[3];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = ATTR_abstractmetamodel___MMLocalProperty____local_class(variable[0]) /*MMLocalProperty::_local_class*/;
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalClass___module(variable[2])(variable[2]) /*MMLocalClass::module*/;
+  variable[1] = variable[2];
+  goto return_label56;
+  return_label56: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 val_t abstractmetamodel___MMLocalProperty___full_name(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___full_name, 589};
-  val_t variable0;
-    val_t variable1;
-    val_t variable2;
-    val_t variable3;
-    val_t variable4;
-    val_t variable5;
-    val_t variable6;
-    val_t variable7;
-    val_t variable8;
-    val_t variable9;
-    val_t variable10;
-    val_t variable11;
-    val_t variable12;
-    val_t variable13;
-    val_t variable14;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMLocalProperty___global_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___global))( self) /*MMLocalProperty::global*/;
-  variable0 = TAG_Bool((variable0 ==  NIT_NULL /*null*/) || ((variable0 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable0,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable0, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable0,COLOR_kernel___Object_____eqeq))(variable0,  NIT_NULL /*null*/) /*MMGlobalProperty::==*/)))));
-  if (UNTAG_Bool(variable0)) { /*if*/
-    variable0 = NEW_string___String___init(); /*new String*/
-    variable1 = NEW_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable2 = variable1;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable2) /*String::append*/;
-    variable3 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___local_class))( self) /*MMLocalProperty::local_class*/;
-    variable3 = ((abstractmetamodel___MMLocalClass___module_t)CALL(variable3,COLOR_abstractmetamodel___MMLocalClass___module))(variable3) /*MMLocalClass::module*/;
-    variable4 = variable3;
-    variable4 = ((string___String___to_s_t)CALL(variable4,COLOR_string___Object___to_s))(variable4) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable4) /*String::append*/;
-    variable5 = NEW_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)); /*new String*/
-    variable6 = variable5;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable6) /*String::append*/;
-    variable7 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___local_class))( self) /*MMLocalProperty::local_class*/;
-    variable8 = variable7;
-    variable8 = ((string___String___to_s_t)CALL(variable8,COLOR_string___Object___to_s))(variable8) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable8) /*String::append*/;
-    variable9 = NEW_string___String___with_native(BOX_NativeString("::(?::"), TAG_Int(6)); /*new String*/
-    variable10 = variable9;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable10) /*String::append*/;
-    variable11 = ((abstractmetamodel___MMLocalProperty___name_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___name))( self) /*MMLocalProperty::name*/;
-    variable12 = variable11;
-    variable12 = ((string___String___to_s_t)CALL(variable12,COLOR_string___Object___to_s))(variable12) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable12) /*String::append*/;
-    variable13 = NEW_string___String___with_native(BOX_NativeString(")"), TAG_Int(1)); /*new String*/
-    variable14 = variable13;
-    ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable14) /*String::append*/;
-    goto return_label49;
+  struct trace_t trace = {NULL, NULL, 604, LOCATE_abstractmetamodel___MMLocalProperty___full_name};
+    static val_t once_value_58 = NIT_NULL; /* Once value for string variable[3]*/
+    static val_t once_value_59 = NIT_NULL; /* Once value for string variable[3]*/
+    static val_t once_value_60 = NIT_NULL; /* Once value for string variable[3]*/
+    static val_t once_value_61 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_62 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_63 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_64 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_65 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_66 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_67 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_68 = NIT_NULL; /* Once value for string variable[3]*/
+      static val_t once_value_69 = NIT_NULL; /* Once value for string variable[3]*/
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = CALL_abstractmetamodel___MMLocalProperty___global(variable[0])(variable[0]) /*MMLocalProperty::global*/;
+  /* Register variable[2]: Result */
+  variable[2] = TAG_Bool((variable[2] ==  NIT_NULL /*null*/) || ((variable[2] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[2])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2], NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[2])(variable[2],  NIT_NULL /*null*/) /*Object::==*/)))));
+  if (UNTAG_Bool(variable[2])) { /*if*/
+    variable[2] = NEW_Array_array___Array___with_capacity(TAG_Int(7)) /*new Array[String]*/ /* Ensure var: Array (for super-string)*/;
+    /* Register variable[3]: Once String constant */
+    if (once_value_58 != NIT_NULL) variable[3] = once_value_58;
+    else {
+      variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)) /*new String*/;
+      once_value_58 = variable[3];
+    }
+    /* Register variable[3]: Result */
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[0])(variable[0]) /*MMLocalProperty::local_class*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstractmetamodel___MMLocalClass___module(variable[3])(variable[3]) /*MMLocalClass::module*/;
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+    /* Register variable[3]: Once String constant */
+    if (once_value_59 != NIT_NULL) variable[3] = once_value_59;
+    else {
+      variable[3] = NEW_String_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)) /*new String*/;
+      once_value_59 = variable[3];
+    }
+    /* Register variable[3]: Result */
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[0])(variable[0]) /*MMLocalProperty::local_class*/;
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+    /* Register variable[3]: Once String constant */
+    if (once_value_60 != NIT_NULL) variable[3] = once_value_60;
+    else {
+      variable[3] = NEW_String_string___String___with_native(BOX_NativeString("::(?::"), TAG_Int(6)) /*new String*/;
+      once_value_60 = variable[3];
+    }
+    /* Register variable[3]: Result */
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+    /* Register variable[3]: Result */
+    variable[3] = CALL_abstractmetamodel___MMLocalProperty___name(variable[0])(variable[0]) /*MMLocalProperty::name*/;
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+    /* Register variable[3]: Once String constant */
+    if (once_value_61 != NIT_NULL) variable[3] = once_value_61;
+    else {
+      variable[3] = NEW_String_string___String___with_native(BOX_NativeString(")"), TAG_Int(1)) /*new String*/;
+      once_value_61 = variable[3];
+    }
+    /* Register variable[3]: Result */
+    /* Ensure var variable[3]: super-string element*/
+    CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+    /* Register variable[2]: Result */
+    variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*Object::to_s*/;
+    variable[1] = variable[2];
+    goto return_label57;
   } else { /*if*/
-    variable0 = ((abstractmetamodel___MMLocalProperty___global_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___global))( self) /*MMLocalProperty::global*/;
-    variable0 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL(variable0,COLOR_abstractmetamodel___MMGlobalProperty___intro))(variable0) /*MMGlobalProperty::intro*/;
-    variable0 = TAG_Bool((variable0 ==  self) || ((variable0 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable0,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable0, self)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable0,COLOR_kernel___Object_____eqeq))(variable0,  self) /*MMConcreteProperty::==*/)))));
-    if (UNTAG_Bool(variable0)) { /*if*/
-      variable0 = NEW_string___String___init(); /*new String*/
-      variable1 = NEW_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable2 = variable1;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable2) /*String::append*/;
-      variable3 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___local_class))( self) /*MMLocalProperty::local_class*/;
-      variable3 = ((abstractmetamodel___MMLocalClass___module_t)CALL(variable3,COLOR_abstractmetamodel___MMLocalClass___module))(variable3) /*MMLocalClass::module*/;
-      variable4 = variable3;
-      variable4 = ((string___String___to_s_t)CALL(variable4,COLOR_string___Object___to_s))(variable4) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable4) /*String::append*/;
-      variable5 = NEW_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)); /*new String*/
-      variable6 = variable5;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable6) /*String::append*/;
-      variable7 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___local_class))( self) /*MMLocalProperty::local_class*/;
-      variable8 = variable7;
-      variable8 = ((string___String___to_s_t)CALL(variable8,COLOR_string___Object___to_s))(variable8) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable8) /*String::append*/;
-      variable9 = NEW_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)); /*new String*/
-      variable10 = variable9;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable10) /*String::append*/;
-      variable11 = ((abstractmetamodel___MMLocalProperty___name_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___name))( self) /*MMLocalProperty::name*/;
-      variable12 = variable11;
-      variable12 = ((string___String___to_s_t)CALL(variable12,COLOR_string___Object___to_s))(variable12) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable12) /*String::append*/;
-      variable13 = NEW_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable14 = variable13;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable14) /*String::append*/;
-      goto return_label49;
+    /* Register variable[2]: Result */
+    variable[2] = CALL_abstractmetamodel___MMLocalProperty___global(variable[0])(variable[0]) /*MMLocalProperty::global*/;
+    /* Register variable[2]: Result */
+    variable[2] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[2])(variable[2]) /*MMGlobalProperty::intro*/;
+    /* Register variable[2]: Result */
+    variable[2] = TAG_Bool((variable[2] == variable[0]) || ((variable[2] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[2])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2],variable[0])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[2])(variable[2], variable[0]) /*Object::==*/)))));
+    if (UNTAG_Bool(variable[2])) { /*if*/
+      variable[2] = NEW_Array_array___Array___with_capacity(TAG_Int(7)) /*new Array[String]*/ /* Ensure var: Array (for super-string)*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_62 != NIT_NULL) variable[3] = once_value_62;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)) /*new String*/;
+        once_value_62 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[0])(variable[0]) /*MMLocalProperty::local_class*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalClass___module(variable[3])(variable[3]) /*MMLocalClass::module*/;
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_63 != NIT_NULL) variable[3] = once_value_63;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)) /*new String*/;
+        once_value_63 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[0])(variable[0]) /*MMLocalProperty::local_class*/;
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_64 != NIT_NULL) variable[3] = once_value_64;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)) /*new String*/;
+        once_value_64 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___name(variable[0])(variable[0]) /*MMLocalProperty::name*/;
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_65 != NIT_NULL) variable[3] = once_value_65;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)) /*new String*/;
+        once_value_65 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[2]: Result */
+      variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*Object::to_s*/;
+      variable[1] = variable[2];
+      goto return_label57;
     } else { /*if*/
-      variable0 = NEW_string___String___init(); /*new String*/
-      variable1 = NEW_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable2 = variable1;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable2) /*String::append*/;
-      variable3 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___local_class))( self) /*MMLocalProperty::local_class*/;
-      variable3 = ((abstractmetamodel___MMLocalClass___module_t)CALL(variable3,COLOR_abstractmetamodel___MMLocalClass___module))(variable3) /*MMLocalClass::module*/;
-      variable4 = variable3;
-      variable4 = ((string___String___to_s_t)CALL(variable4,COLOR_string___Object___to_s))(variable4) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable4) /*String::append*/;
-      variable5 = NEW_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)); /*new String*/
-      variable6 = variable5;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable6) /*String::append*/;
-      variable7 = ((abstractmetamodel___MMLocalProperty___local_class_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___local_class))( self) /*MMLocalProperty::local_class*/;
-      variable8 = variable7;
-      variable8 = ((string___String___to_s_t)CALL(variable8,COLOR_string___Object___to_s))(variable8) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable8) /*String::append*/;
-      variable9 = NEW_string___String___with_native(BOX_NativeString("::("), TAG_Int(3)); /*new String*/
-      variable10 = variable9;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable10) /*String::append*/;
-      variable11 = ((abstractmetamodel___MMLocalProperty___global_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___global))( self) /*MMLocalProperty::global*/;
-      variable11 = ((abstractmetamodel___MMGlobalProperty___intro_t)CALL(variable11,COLOR_abstractmetamodel___MMGlobalProperty___intro))(variable11) /*MMGlobalProperty::intro*/;
-      variable11 = ((abstractmetamodel___MMLocalProperty___full_name_t)CALL(variable11,COLOR_abstractmetamodel___MMLocalProperty___full_name))(variable11) /*MMConcreteProperty::full_name*/;
-      variable12 = variable11;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable12) /*String::append*/;
-      variable13 = NEW_string___String___with_native(BOX_NativeString(")"), TAG_Int(1)); /*new String*/
-      variable14 = variable13;
-      ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable14) /*String::append*/;
-      goto return_label49;
+      variable[2] = NEW_Array_array___Array___with_capacity(TAG_Int(7)) /*new Array[String]*/ /* Ensure var: Array (for super-string)*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_66 != NIT_NULL) variable[3] = once_value_66;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)) /*new String*/;
+        once_value_66 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[0])(variable[0]) /*MMLocalProperty::local_class*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalClass___module(variable[3])(variable[3]) /*MMLocalClass::module*/;
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_67 != NIT_NULL) variable[3] = once_value_67;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString("::"), TAG_Int(2)) /*new String*/;
+        once_value_67 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___local_class(variable[0])(variable[0]) /*MMLocalProperty::local_class*/;
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], CALL_string___Object___to_s(variable[3])(variable[3]) /*Object::to_s*/) /*AbstractArray::add*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_68 != NIT_NULL) variable[3] = once_value_68;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString("::("), TAG_Int(3)) /*new String*/;
+        once_value_68 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___global(variable[0])(variable[0]) /*MMLocalProperty::global*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMGlobalProperty___intro(variable[3])(variable[3]) /*MMGlobalProperty::intro*/;
+      /* Register variable[3]: Result */
+      variable[3] = CALL_abstractmetamodel___MMLocalProperty___full_name(variable[3])(variable[3]) /*MMLocalProperty::full_name*/;
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[3]: Once String constant */
+      if (once_value_69 != NIT_NULL) variable[3] = once_value_69;
+      else {
+        variable[3] = NEW_String_string___String___with_native(BOX_NativeString(")"), TAG_Int(1)) /*new String*/;
+        once_value_69 = variable[3];
+      }
+      /* Register variable[3]: Result */
+      /* Ensure var variable[3]: super-string element*/
+      CALL_abstract_collection___SimpleCollection___add(variable[2])(variable[2], variable[3]) /*AbstractArray::add*/;
+      /* Register variable[2]: Result */
+      variable[2] = CALL_string___Object___to_s(variable[2])(variable[2]) /*Object::to_s*/;
+      variable[1] = variable[2];
+      goto return_label57;
     }
   }
-  return_label49: while(false);
+  return_label57: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 void abstractmetamodel___MMLocalProperty___set_global(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___set_global, 601};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable0 /*g*/ ==  NIT_NULL /*null*/) || (( variable0 /*g*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable0 /*g*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable0 /*g*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable0 /*g*/,COLOR_kernel___Object_____eqeq))( variable0 /*g*/,  NIT_NULL /*null*/) /*MMGlobalProperty::==*/)))))));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMLocalProperty___set_global, 604); nit_exit(1);}
-  ATTR_abstractmetamodel___MMLocalProperty____global( self) /*MMLocalProperty::_global*/ =  variable0 /*g*/;
-  variable1 = ATTR_abstractmetamodel___MMLocalProperty____local_class( self) /*MMLocalProperty::_local_class*/;
-  ((abstractmetamodel___MMLocalClass___register_local_property_t)CALL(variable1,COLOR_abstractmetamodel___MMLocalClass___register_local_property))(variable1,  self) /*MMLocalClass::register_local_property*/;
+  struct trace_t trace = {NULL, NULL, 616, LOCATE_abstractmetamodel___MMLocalProperty___set_global};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Method return value and escape marker */
+  /* Register variable[3]: Result */
+  variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*g*/ ==  NIT_NULL /*null*/) || (( variable[1] /*g*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*g*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*g*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*g*/)( variable[1] /*g*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalProperty___set_global, LOCATE_abstractmetamodel, 619); nit_exit(1);}
+  ATTR_abstractmetamodel___MMLocalProperty____global(variable[0]) /*MMLocalProperty::_global*/ =  variable[1] /*g*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalProperty____local_class(variable[0]) /*MMLocalProperty::_local_class*/;
+  CALL_abstractmetamodel___MMLocalClass___register_local_property(variable[3])(variable[3], variable[0]) /*MMLocalClass::register_local_property*/;
+  return_label70: while(false);
   tracehead = trace.prev;
   return;
 }
-val_t abstractmetamodel___MMLocalProperty___to_s(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___to_s, 609};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ((abstractmetamodel___MMLocalProperty___name_t)CALL( self,COLOR_abstractmetamodel___MMLocalProperty___name))( self) /*MMLocalProperty::name*/;
-  variable0 = ((symbol___Symbol___to_s_t)CALL(variable0,COLOR_string___Object___to_s))(variable0) /*Symbol::to_s*/;
-  goto return_label51;
-  return_label51: while(false);
-  tracehead = trace.prev;
-  return variable0;
-}
-void abstractmetamodel___MMLocalProperty___init(val_t  self, val_t  param0, val_t  param1, val_t  param2, int* init_table) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMLocalProperty___init, 611};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 =  param2;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMLocalProperty].i]) return;
-  ATTR_abstractmetamodel___MMLocalProperty____name( self) /*MMLocalProperty::_name*/ =  variable0 /*n*/;
-  ATTR_abstractmetamodel___MMLocalProperty____local_class( self) /*MMLocalProperty::_local_class*/ =  variable1 /*bc*/;
-  ATTR_abstractmetamodel___MMLocalProperty____concrete_property( self) /*MMLocalProperty::_concrete_property*/ =  variable2 /*i*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_MMLocalProperty].i] = 1;
+void abstractmetamodel___MMLocalProperty___new_global(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 624, LOCATE_abstractmetamodel___MMLocalProperty___new_global};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Method return value and escape marker */
+  /* Register variable[2]: Result */
+  variable[2] = ATTR_abstractmetamodel___MMLocalProperty____global(variable[0]) /*MMLocalProperty::_global*/;
+  /* Register variable[2]: Result */
+  variable[2] = TAG_Bool((variable[2] ==  NIT_NULL /*null*/) || ((variable[2] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[2])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2], NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[2])(variable[2],  NIT_NULL /*null*/) /*Object::==*/)))));
+  if (!UNTAG_Bool(variable[2])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_abstractmetamodel___MMLocalProperty___new_global, LOCATE_abstractmetamodel, 627); nit_exit(1);}
+  /* Register variable[2]: Result */
+  variable[2] = NEW_MMGlobalProperty_abstractmetamodel___MMGlobalProperty___init(variable[0]) /*new MMGlobalProperty*/;
+  ATTR_abstractmetamodel___MMLocalProperty____global(variable[0]) /*MMLocalProperty::_global*/ = variable[2];
+  /* Register variable[2]: Result */
+  variable[2] = ATTR_abstractmetamodel___MMLocalProperty____local_class(variable[0]) /*MMLocalProperty::_local_class*/;
+  /* Register variable[3]: Result */
+  variable[3] = ATTR_abstractmetamodel___MMLocalProperty____global(variable[0]) /*MMLocalProperty::_global*/;
+  CALL_abstractmetamodel___MMLocalClass___register_global_property(variable[2])(variable[2], variable[3]) /*MMLocalClass::register_global_property*/;
+  return_label71: while(false);
   tracehead = trace.prev;
   return;
 }
-val_t abstractmetamodel___MMConcreteProperty___cprhe(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMConcreteProperty___cprhe, 637};
-  trace.prev = tracehead; tracehead = &trace;
-  tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMConcreteProperty____cprhe( self) /*MMConcreteProperty::_cprhe*/;
-}
-val_t abstractmetamodel___MMConcreteProperty___need_super(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMConcreteProperty___need_super, 640};
+val_t abstractmetamodel___MMLocalProperty___need_super(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 634, LOCATE_abstractmetamodel___MMLocalProperty___need_super};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
   tracehead = trace.prev;
-  return ATTR_abstractmetamodel___MMConcreteProperty____need_super( self) /*MMConcreteProperty::_need_super*/;
+  return ATTR_abstractmetamodel___MMLocalProperty____need_super( self) /*MMLocalProperty::_need_super*/;
 }
-void abstractmetamodel___MMConcreteProperty___need_super__eq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMConcreteProperty___need_super__eq, 640};
+void abstractmetamodel___MMLocalProperty___need_super__eq(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 634, LOCATE_abstractmetamodel___MMLocalProperty___need_super__eq};
+  val_t *variable = NULL;
+  struct WBT_ **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
-  ATTR_abstractmetamodel___MMConcreteProperty____need_super( self) /*MMConcreteProperty::_need_super*/ =  param0;
+  trace.file = LOCATE_abstractmetamodel;
+  ATTR_abstractmetamodel___MMLocalProperty____need_super( self) /*MMLocalProperty::_need_super*/ =  param0;
   tracehead = trace.prev;
   return;
 }
-void abstractmetamodel___MMConcreteProperty___new_global(val_t  self) {
-  struct trace_t trace = {NULL, LOCATE_abstractmetamodel___MMConcreteProperty___new_global, 643};
-  val_t variable0;
-  val_t variable1;
-  trace.prev = tracehead; tracehead = &trace;
-  variable0 = ATTR_abstractmetamodel___MMLocalProperty____global( self) /*MMConcreteProperty::_global*/;
-  variable0 = TAG_Bool((variable0 ==  NIT_NULL /*null*/) || ((variable0 != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable0,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable0, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable0,COLOR_kernel___Object_____eqeq))(variable0,  NIT_NULL /*null*/) /*MMGlobalProperty::==*/)))));
-  if (!UNTAG_Bool(variable0)) { fprintf(stderr, "Assert%s failed (%s: %d)\n", "", LOCATE_abstractmetamodel___MMConcreteProperty___new_global, 646); nit_exit(1);}
-  variable0 = NEW_abstractmetamodel___MMGlobalProperty___init( self); /*new MMGlobalProperty*/
-  ATTR_abstractmetamodel___MMLocalProperty____global( self) /*MMConcreteProperty::_global*/ = variable0;
-  variable0 = ATTR_abstractmetamodel___MMLocalProperty____local_class( self) /*MMConcreteProperty::_local_class*/;
-  variable1 = ATTR_abstractmetamodel___MMLocalProperty____global( self) /*MMConcreteProperty::_global*/;
-  ((abstractmetamodel___MMLocalClass___register_global_property_t)CALL(variable0,COLOR_abstractmetamodel___MMLocalClass___register_global_property))(variable0, variable1) /*MMLocalClass::register_global_property*/;
+void abstractmetamodel___MMLocalProperty___init(val_t  self, val_t  param0, val_t  param1, int* init_table) {
+  struct trace_t trace = {NULL, NULL, 637, LOCATE_abstractmetamodel___MMLocalProperty___init};
+  val_t variable[4];
+  struct WBT_ **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_abstractmetamodel;
+  /* Register variable[0]: Local variable */
+  variable[0] =  self;
+  /* Register variable[1]: Local variable */
+  variable[1] =  param0;
+  /* Register variable[2]: Local variable */
+  variable[2] =  param1;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMLocalProperty].i]) return;
+  /* Register variable[3]: Method return value and escape marker */
+  ATTR_abstractmetamodel___MMLocalProperty____name(variable[0]) /*MMLocalProperty::_name*/ =  variable[1] /*n*/;
+  ATTR_abstractmetamodel___MMLocalProperty____local_class(variable[0]) /*MMLocalProperty::_local_class*/ =  variable[2] /*bc*/;
+  return_label72: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_MMLocalProperty].i] = 1;
   tracehead = trace.prev;
   return;
 }