Update c_src to handle default closures.
[nit.git] / c_src / string._sep.c
index a7ce642..7ae7824 100644 (file)
 /* This C file is generated by NIT to compile module string. */
 #include "string._sep.h"
-val_t string___String_____bra(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 31, LOCATE_string___String_____bra};
-  val_t variable0;
-  val_t variable1;
+val_t string___String_____eqeq(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 294, LOCATE_string___String_____eqeq};
+  val_t variable[9];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = ATTR_string___String____items( self) /*String::_items*/;
-  variable1 = TAG_Char(UNBOX_NativeString(variable1)[UNTAG_Int( variable0 /*index*/)]);
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = TAG_Bool(( variable[1] /*o*/==NIT_NULL) || VAL_ISA( variable[1] /*o*/, COLOR_String, ID_String)) /*cast String*/;
+  variable[3] =  TAG_Bool(!UNTAG_Bool(variable[3]));
+  if (!UNTAG_Bool(variable[3])) { /* or */
+    variable[3] = TAG_Bool(IS_EQUAL_NN( variable[1] /*o*/, NIT_NULL /*null*/));
+  }
+  if (UNTAG_Bool(variable[3])) { /*if*/
+    variable[2] =  TAG_Bool(false);
+    goto return_label0;
+  }
+  variable[3] = TAG_Bool(( variable[1] /*o*/==NIT_NULL) || VAL_ISA( variable[1] /*o*/, COLOR_String, ID_String)) /*cast String*/;
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String_____eqeq, LOCATE_string, 297); nit_exit(1);}
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[3] = variable[4];
+  variable[4] = ((array___AbstractArray___length_t)CALL( variable[1] /*o*/,COLOR_abstract_collection___Collection___length))( variable[1] /*o*/) /*AbstractArray::length*/;
+  variable[4] = TAG_Bool((variable[4])!=( variable[3] /*l*/));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    variable[2] =  TAG_Bool(false);
+    goto return_label0;
+  }
+  variable[4] =  TAG_Int(0);
+  variable[6] = variable[0];
+  variable[6] = ATTR_string___String____items(variable[6]) /*String::_items*/;
+  variable[5] = variable[6];
+  variable[7] = ATTR_string___String____items( variable[1] /*o*/) /*String::_items*/;
+  variable[6] = variable[7];
+  while (true) { /*while*/
+    variable[7] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[3] /*l*/));
+    if (!UNTAG_Bool(variable[7])) break; /* while*/
+    variable[7] = TAG_Char(UNBOX_NativeString( variable[5] /*it*/)[UNTAG_Int( variable[4] /*i*/)]);
+    variable[8] = TAG_Char(UNBOX_NativeString( variable[6] /*oit*/)[UNTAG_Int( variable[4] /*i*/)]);
+    variable[7] = TAG_Bool((variable[7])!=(variable[8]));
+    if (UNTAG_Bool(variable[7])) { /*if*/
+      variable[2] =  TAG_Bool(false);
+      goto return_label0;
+    }
+    variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
+    continue_1: while(0);
+  }
+  break_1: while(0);
+  variable[2] =  TAG_Bool(true);
   goto return_label0;
   return_label0: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
+}
+void string___String___output(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 285, LOCATE_string___String___output};
+  val_t variable[4];
+  void **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_string;
+  variable[0] =  self;
+  variable[2] =  TAG_Int(0);
+  while (true) { /*while*/
+    variable[3] = variable[0];
+    variable[3] = ((array___AbstractArray___length_t)CALL(variable[3],COLOR_abstract_collection___Collection___length))(variable[3]) /*AbstractArray::length*/;
+    variable[3] = TAG_Bool(UNTAG_Int( variable[2] /*i*/)<UNTAG_Int(variable[3]));
+    if (!UNTAG_Bool(variable[3])) break; /* while*/
+    variable[3] = variable[0];
+    variable[3] = ATTR_string___String____items(variable[3]) /*String::_items*/;
+    variable[3] = TAG_Char(UNBOX_NativeString(variable[3])[UNTAG_Int( variable[2] /*i*/)]);
+    printf("%c", (unsigned char)UNTAG_Char(variable[3]));
+    variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int( TAG_Int(1))) /*i*/;
+    continue_3: while(0);
+  }
+  break_3: while(0);
+  return_label2: while(false);
+  tracehead = trace.prev;
+  return;
+}
+val_t string___String_____bra(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 31, LOCATE_string___String_____bra};
+  val_t variable[4];
+  void **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_string;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = variable[0];
+  variable[3] = ATTR_string___String____items(variable[3]) /*String::_items*/;
+  variable[3] = TAG_Char(UNBOX_NativeString(variable[3])[UNTAG_Int( variable[1] /*index*/)]);
+  variable[2] = variable[3];
+  goto return_label4;
+  return_label4: while(false);
+  tracehead = trace.prev;
+  return variable[2];
 }
 void string___String_____braeq(val_t  self, val_t  param0, val_t  param1) {
   struct trace_t trace = {NULL, NULL, 33, LOCATE_string___String_____braeq};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = TAG_Bool(( variable0 /*index*/)==(variable2));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    ((string___String___add_t)CALL( self,COLOR_abstract_collection___SimpleCollection___add))( self,  variable1 /*item*/) /*String::add*/;
-    goto return_label1;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[4] = TAG_Bool(( variable[1] /*index*/)==(variable[4]));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    variable[4] = variable[0];
+    ((string___String___add_t)CALL(variable[4],COLOR_abstract_collection___SimpleCollection___add))(variable[4],  variable[2] /*item*/) /*String::add*/;
+    goto return_label5;
   }
-  variable2 = TAG_Bool(UNTAG_Int( variable0 /*index*/)>=UNTAG_Int( TAG_Int(0)));
-  variable3 = variable2;
-  if (UNTAG_Bool(variable3)) { /* and */
-    variable3 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-    variable3 = TAG_Bool(UNTAG_Int( variable0 /*index*/)<UNTAG_Int(variable3));
+  variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)>=UNTAG_Int( TAG_Int(0)));
+  variable[5] = variable[4];
+  if (UNTAG_Bool(variable[5])) { /* and */
+    variable[5] = variable[0];
+    variable[5] = ((array___AbstractArray___length_t)CALL(variable[5],COLOR_abstract_collection___Collection___length))(variable[5]) /*AbstractArray::length*/;
+    variable[5] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)<UNTAG_Int(variable[5]));
   }
-  variable2 = variable3;
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String_____braeq, LOCATE_string, 39); nit_exit(1);}
-  variable2 = ATTR_string___String____items( self) /*String::_items*/;
-  UNBOX_NativeString(variable2)[UNTAG_Int( variable0 /*index*/)]=UNTAG_Char( variable1 /*item*/);
-  return_label1: while(false);
+  variable[4] = variable[5];
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String_____braeq, LOCATE_string, 39); nit_exit(1);}
+  variable[4] = variable[0];
+  variable[4] = ATTR_string___String____items(variable[4]) /*String::_items*/;
+  UNBOX_NativeString(variable[4])[UNTAG_Int( variable[1] /*index*/)]=UNTAG_Char( variable[2] /*item*/);
+  return_label5: while(false);
   tracehead = trace.prev;
   return;
 }
 void string___String___add(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 43, LOCATE_string___String___add};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
+  val_t variable[5];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = ATTR_string___String____capacity( self) /*String::_capacity*/;
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable1 = TAG_Bool(UNTAG_Int(variable1)<=UNTAG_Int(variable2));
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-    variable1 = TAG_Int(UNTAG_Int(variable1)+UNTAG_Int( TAG_Int(5)));
-    ((string___String___enlarge_t)CALL( self,COLOR_array___AbstractArray___enlarge))( self, variable1) /*String::enlarge*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = variable[0];
+  variable[3] = ATTR_string___String____capacity(variable[3]) /*String::_capacity*/;
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[3] = TAG_Bool(UNTAG_Int(variable[3])<=UNTAG_Int(variable[4]));
+  if (UNTAG_Bool(variable[3])) { /*if*/
+    variable[3] = variable[0];
+    variable[4] = variable[0];
+    variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+    variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(5)));
+    ((string___String___enlarge_t)CALL(variable[3],COLOR_array___AbstractArray___enlarge))(variable[3], variable[4]) /*String::enlarge*/;
   }
-  variable1 = ATTR_string___String____items( self) /*String::_items*/;
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  UNBOX_NativeString(variable1)[UNTAG_Int(variable2)]=UNTAG_Char( variable0 /*c*/);
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/)+UNTAG_Int( TAG_Int(1)));
+  variable[3] = variable[0];
+  variable[3] = ATTR_string___String____items(variable[3]) /*String::_items*/;
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  UNBOX_NativeString(variable[3])[UNTAG_Int(variable[4])]=UNTAG_Char( variable[1] /*c*/);
+  variable[3] = variable[0];
+  ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/)+UNTAG_Int( TAG_Int(1)));
+  return_label6: while(false);
+  tracehead = trace.prev;
+  return;
+}
+void string___String___append(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 61, LOCATE_string___String___append};
+  val_t variable[7];
+  void **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_string;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = TAG_Bool(( variable[1] /*s*/==NIT_NULL) || VAL_ISA( variable[1] /*s*/, COLOR_String, ID_String)) /*cast String*/;
+  if (UNTAG_Bool(variable[3])) { /*if*/
+    variable[4] = ((array___AbstractArray___length_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Collection___length))( variable[1] /*s*/) /*AbstractArray::length*/;
+    variable[3] = variable[4];
+    variable[4] = variable[0];
+    variable[4] = ATTR_string___String____capacity(variable[4]) /*String::_capacity*/;
+    variable[5] = variable[0];
+    variable[5] = ((array___AbstractArray___length_t)CALL(variable[5],COLOR_abstract_collection___Collection___length))(variable[5]) /*AbstractArray::length*/;
+    variable[5] = TAG_Int(UNTAG_Int(variable[5])+UNTAG_Int( variable[3] /*sl*/));
+    variable[4] = TAG_Bool(UNTAG_Int(variable[4])<UNTAG_Int(variable[5]));
+    if (UNTAG_Bool(variable[4])) { /*if*/
+      variable[4] = variable[0];
+      variable[5] = variable[0];
+      variable[5] = ((array___AbstractArray___length_t)CALL(variable[5],COLOR_abstract_collection___Collection___length))(variable[5]) /*AbstractArray::length*/;
+      variable[5] = TAG_Int(UNTAG_Int(variable[5])+UNTAG_Int( variable[3] /*sl*/));
+      ((string___String___enlarge_t)CALL(variable[4],COLOR_array___AbstractArray___enlarge))(variable[4], variable[5]) /*String::enlarge*/;
+    }
+    variable[4] = ((string___String___items_t)CALL( variable[1] /*s*/,COLOR_string___String___items))( variable[1] /*s*/) /*String::items*/;
+    variable[5] = variable[0];
+    variable[5] = ATTR_string___String____items(variable[5]) /*String::_items*/;
+    variable[6] = variable[0];
+    variable[6] = ((array___AbstractArray___length_t)CALL(variable[6],COLOR_abstract_collection___Collection___length))(variable[6]) /*AbstractArray::length*/;
+    (void)memcpy(UNBOX_NativeString(variable[5])+UNTAG_Int(variable[6]), UNBOX_NativeString(variable[4])+UNTAG_Int( TAG_Int(0)), UNTAG_Int( variable[3] /*sl*/));
+    variable[4] = variable[0];
+    ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/)+UNTAG_Int( variable[3] /*sl*/));
+  } else { /*if*/
+    ((string___String___append_t)CALL(variable[0],COLOR_SUPER_string___String___append))(variable[0], variable[1]) /*super String::append*/;
+  }
+  return_label7: while(false);
   tracehead = trace.prev;
   return;
 }
 void string___String___enlarge(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 50, LOCATE_string___String___enlarge};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable2 = ATTR_string___String____capacity( self) /*String::_capacity*/;
-  variable1 = variable2;
-  variable2 = TAG_Bool(UNTAG_Int( variable0 /*cap*/)<=UNTAG_Int( variable1 /*c*/));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    goto return_label3;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[4] = variable[0];
+  variable[4] = ATTR_string___String____capacity(variable[4]) /*String::_capacity*/;
+  variable[3] = variable[4];
+  variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*cap*/)<=UNTAG_Int( variable[3] /*c*/));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    goto return_label8;
   }
   while (true) { /*while*/
-    variable2 = TAG_Bool(UNTAG_Int( variable1 /*c*/)<=UNTAG_Int( variable0 /*cap*/));
-    if (!UNTAG_Bool(variable2)) break; /* while*/
-    variable2 = TAG_Int(UNTAG_Int( variable1 /*c*/)*UNTAG_Int( TAG_Int(2)));
-    variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int( TAG_Int(2)));
-    variable1 = variable2 /*c=*/;
-    continue_4: while(0);
+    variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*c*/)<=UNTAG_Int( variable[1] /*cap*/));
+    if (!UNTAG_Bool(variable[4])) break; /* while*/
+    variable[4] = TAG_Int(UNTAG_Int( variable[3] /*c*/)*UNTAG_Int( TAG_Int(2)));
+    variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(2)));
+    variable[3] = variable[4] /*c=*/;
+    continue_9: while(0);
   }
-  break_4: while(0);
-  variable3 = BOX_NativeString((char*)malloc((UNTAG_Int( variable1 /*c*/) * sizeof(char))));
-  variable2 = variable3;
-  variable3 = ATTR_string___String____items( self) /*String::_items*/;
-  variable4 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  (void)memcpy(UNBOX_NativeString( variable2 /*a*/)+UNTAG_Int( TAG_Int(0)), UNBOX_NativeString(variable3)+UNTAG_Int( TAG_Int(0)), UNTAG_Int(variable4));
-  ATTR_string___String____items( self) /*String::_items*/ =  variable2 /*a*/;
-  ATTR_string___String____capacity( self) /*String::_capacity*/ =  variable1 /*c*/;
-  return_label3: while(false);
+  break_9: while(0);
+  variable[5] = variable[0];
+  variable[5] = BOX_NativeString((char*)malloc((UNTAG_Int( variable[3] /*c*/) * sizeof(char))));
+  variable[4] = variable[5];
+  variable[5] = variable[0];
+  variable[5] = ATTR_string___String____items(variable[5]) /*String::_items*/;
+  variable[6] = variable[0];
+  variable[6] = ((array___AbstractArray___length_t)CALL(variable[6],COLOR_abstract_collection___Collection___length))(variable[6]) /*AbstractArray::length*/;
+  (void)memcpy(UNBOX_NativeString( variable[4] /*a*/)+UNTAG_Int( TAG_Int(0)), UNBOX_NativeString(variable[5])+UNTAG_Int( TAG_Int(0)), UNTAG_Int(variable[6]));
+  variable[5] = variable[0];
+  ATTR_string___String____items(variable[5]) /*String::_items*/ =  variable[4] /*a*/;
+  variable[5] = variable[0];
+  ATTR_string___String____capacity(variable[5]) /*String::_capacity*/ =  variable[3] /*c*/;
+  return_label8: while(false);
   tracehead = trace.prev;
   return;
 }
-void string___String___append(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 61, LOCATE_string___String___append};
-  val_t variable0;
-  val_t variable1;
-    val_t variable2;
-    val_t variable3;
-    val_t variable4;
+val_t string___String___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 94, LOCATE_string___String___to_s};
+  val_t variable[4];
+  void **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_string;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[3] = NEW_String_string___String___from(variable[2]); /*new String*/
+  variable[2] = variable[3];
+  variable[1] = variable[2];
+  goto return_label10;
+  return_label10: while(false);
+  tracehead = trace.prev;
+  return variable[1];
+}
+val_t string___String_____l(val_t  self, val_t  param0) {
+  struct trace_t trace = {NULL, NULL, 209, LOCATE_string___String_____l};
+  val_t variable[9];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = TAG_Bool(( variable0 /*s*/==NIT_NULL) || VAL_ISA( variable0 /*s*/, COLOR_String, ID_String)) /*cast String*/;
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable2 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
-    variable1 = variable2;
-    variable2 = ATTR_string___String____capacity( self) /*String::_capacity*/;
-    variable3 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-    variable3 = TAG_Int(UNTAG_Int(variable3)+UNTAG_Int( variable1 /*sl*/));
-    variable2 = TAG_Bool(UNTAG_Int(variable2)<UNTAG_Int(variable3));
-    if (UNTAG_Bool(variable2)) { /*if*/
-      variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-      variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int( variable1 /*sl*/));
-      ((string___String___enlarge_t)CALL( self,COLOR_array___AbstractArray___enlarge))( self, variable2) /*String::enlarge*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] =  TAG_Int(0);
+  variable[5] = variable[0];
+  variable[5] = ((array___AbstractArray___length_t)CALL(variable[5],COLOR_abstract_collection___Collection___length))(variable[5]) /*AbstractArray::length*/;
+  variable[4] = variable[5];
+  variable[6] = ((array___AbstractArray___length_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Collection___length))( variable[1] /*s*/) /*AbstractArray::length*/;
+  variable[5] = variable[6];
+  while (true) { /*while*/
+    variable[6] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)<UNTAG_Int( variable[4] /*l1*/));
+    variable[7] = variable[6];
+    if (UNTAG_Bool(variable[7])) { /* and */
+      variable[7] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)<UNTAG_Int( variable[5] /*l2*/));
     }
-    variable2 = ((string___String___items_t)CALL( variable0 /*s*/,COLOR_string___String___items))( variable0 /*s*/) /*String::items*/;
-    variable3 = ATTR_string___String____items( self) /*String::_items*/;
-    variable4 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-    (void)memcpy(UNBOX_NativeString(variable3)+UNTAG_Int(variable4), UNBOX_NativeString(variable2)+UNTAG_Int( TAG_Int(0)), UNTAG_Int( variable1 /*sl*/));
-    ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/)+UNTAG_Int( variable1 /*sl*/));
+    variable[6] = variable[7];
+    if (!UNTAG_Bool(variable[6])) break; /* while*/
+    variable[7] = variable[0];
+    variable[7] = ((string___String_____bra_t)CALL(variable[7],COLOR_abstract_collection___Map_____bra))(variable[7],  variable[3] /*i*/) /*String::[]*/;
+    variable[7] = TAG_Int((unsigned char)UNTAG_Char(variable[7]));
+    variable[6] = variable[7];
+    variable[8] = ((string___String_____bra_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Map_____bra))( variable[1] /*s*/,  variable[3] /*i*/) /*String::[]*/;
+    variable[8] = TAG_Int((unsigned char)UNTAG_Char(variable[8]));
+    variable[7] = variable[8];
+    variable[8] = TAG_Bool(UNTAG_Int( variable[6] /*c1*/)<UNTAG_Int( variable[7] /*c2*/));
+    if (UNTAG_Bool(variable[8])) { /*if*/
+      variable[2] =  TAG_Bool(true);
+      goto return_label11;
+    } else { /*if*/
+      variable[8] = TAG_Bool(UNTAG_Int( variable[7] /*c2*/)<UNTAG_Int( variable[6] /*c1*/));
+      if (UNTAG_Bool(variable[8])) { /*if*/
+        variable[2] =  TAG_Bool(false);
+        goto return_label11;
+      }
+    }
+    variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*i*/;
+    continue_12: while(0);
+  }
+  break_12: while(0);
+  variable[6] = TAG_Bool(UNTAG_Int( variable[4] /*l1*/)<UNTAG_Int( variable[5] /*l2*/));
+  if (UNTAG_Bool(variable[6])) { /*if*/
+    variable[2] =  TAG_Bool(true);
+    goto return_label11;
   } else { /*if*/
-    ((string___String___append_t)CALL( self,COLOR_SUPER_string___String___append))( self,  param0) /*super String::append*/;
+    variable[2] =  TAG_Bool(false);
+    goto return_label11;
   }
+  return_label11: while(false);
   tracehead = trace.prev;
-  return;
+  return variable[2];
 }
 val_t string___String_____plus(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 73, LOCATE_string___String_____plus};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable3 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
-  variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int(variable3));
-  variable3 = NEW_String_string___String___with_capacity(variable2); /*new String*/
-  variable2 = variable3;
-  variable1 = variable2;
-  ((string___String___append_t)CALL( variable1 /*r*/,COLOR_abstract_collection___IndexedCollection___append))( variable1 /*r*/,  self) /*String::append*/;
-  ((string___String___append_t)CALL( variable1 /*r*/,COLOR_abstract_collection___IndexedCollection___append))( variable1 /*r*/,  variable0 /*s*/) /*String::append*/;
-  variable1 =  variable1 /*r*/;
-  goto return_label6;
-  return_label6: while(false);
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[5] = ((array___AbstractArray___length_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Collection___length))( variable[1] /*s*/) /*AbstractArray::length*/;
+  variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int(variable[5]));
+  variable[5] = NEW_String_string___String___with_capacity(variable[4]); /*new String*/
+  variable[4] = variable[5];
+  variable[3] = variable[4];
+  variable[4] = variable[0];
+  ((string___String___append_t)CALL( variable[3] /*r*/,COLOR_abstract_collection___IndexedCollection___append))( variable[3] /*r*/, variable[4]) /*String::append*/;
+  ((string___String___append_t)CALL( variable[3] /*r*/,COLOR_abstract_collection___IndexedCollection___append))( variable[3] /*r*/,  variable[1] /*s*/) /*String::append*/;
+  variable[2] =  variable[3] /*r*/;
+  goto return_label13;
+  return_label13: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t string___String_____star(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 82, LOCATE_string___String_____star};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = TAG_Bool(UNTAG_Int( variable0 /*i*/)>=UNTAG_Int( TAG_Int(0)));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String_____star, LOCATE_string, 85); nit_exit(1);}
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = TAG_Int(UNTAG_Int(variable2)*UNTAG_Int( variable0 /*i*/));
-  variable3 = NEW_String_string___String___with_capacity(variable2); /*new String*/
-  variable2 = variable3;
-  variable1 = variable2;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*i*/)>=UNTAG_Int( TAG_Int(0)));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String_____star, LOCATE_string, 85); nit_exit(1);}
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[4] = TAG_Int(UNTAG_Int(variable[4])*UNTAG_Int( variable[1] /*i*/));
+  variable[5] = NEW_String_string___String___with_capacity(variable[4]); /*new String*/
+  variable[4] = variable[5];
+  variable[3] = variable[4];
   while (true) { /*while*/
-    variable2 = TAG_Bool(UNTAG_Int( variable0 /*i*/)>UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable2)) break; /* while*/
-    ((string___String___append_t)CALL( variable1 /*r*/,COLOR_abstract_collection___IndexedCollection___append))( variable1 /*r*/,  self) /*String::append*/;
-    variable0 = TAG_Int(UNTAG_Int(variable0)-UNTAG_Int( TAG_Int(1))) /*i*/;
-    continue_8: while(0);
+    variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*i*/)>UNTAG_Int( TAG_Int(0)));
+    if (!UNTAG_Bool(variable[4])) break; /* while*/
+    variable[4] = variable[0];
+    ((string___String___append_t)CALL( variable[3] /*r*/,COLOR_abstract_collection___IndexedCollection___append))( variable[3] /*r*/, variable[4]) /*String::append*/;
+    variable[1] = TAG_Int(UNTAG_Int(variable[1])-UNTAG_Int( TAG_Int(1))) /*i*/;
+    continue_15: while(0);
   }
-  break_8: while(0);
-  variable1 =  variable1 /*r*/;
-  goto return_label7;
-  return_label7: while(false);
-  tracehead = trace.prev;
-  return variable1;
-}
-val_t string___String___to_s(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 94, LOCATE_string___String___to_s};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_string;
-  variable0 = NEW_String_string___String___from( self); /*new String*/
-  goto return_label9;
-  return_label9: while(false);
+  break_15: while(0);
+  variable[2] =  variable[3] /*r*/;
+  goto return_label14;
+  return_label14: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[2];
 }
 val_t string___String___to_i(val_t  self) {
   struct trace_t trace = {NULL, NULL, 97, LOCATE_string___String___to_i};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((string___String___to_cstring_t)CALL( self,COLOR_string___String___to_cstring))( self) /*String::to_cstring*/;
-  variable0 = TAG_Int(atoi(UNBOX_NativeString(variable0)));
-  goto return_label10;
-  return_label10: while(false);
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___String___to_cstring_t)CALL(variable[2],COLOR_string___String___to_cstring))(variable[2]) /*String::to_cstring*/;
+  variable[2] = TAG_Int(atoi(UNBOX_NativeString(variable[2])));
+  variable[1] = variable[2];
+  goto return_label16;
+  return_label16: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___String___to_hex(val_t  self) {
   struct trace_t trace = {NULL, NULL, 104, LOCATE_string___String___to_hex};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((string___String___a_to_t)CALL( self,COLOR_string___String___a_to))( self,  TAG_Int(16)) /*String::a_to*/;
-  goto return_label11;
-  return_label11: while(false);
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___String___a_to_t)CALL(variable[2],COLOR_string___String___a_to))(variable[2],  TAG_Int(16)) /*String::a_to*/;
+  variable[1] = variable[2];
+  goto return_label17;
+  return_label17: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___String___a_to(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 107, LOCATE_string___String___a_to};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-    val_t variable4;
-    val_t variable5;
-    val_t variable6;
+  val_t variable[10];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  TAG_Int(0);
-  variable2 =  TAG_Bool(false);
-  variable3 = ((array___AbstractArray___iterator_t)CALL( self,COLOR_abstract_collection___Collection___iterator))( self) /*AbstractArray::iterator*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] =  TAG_Int(0);
+  variable[4] =  TAG_Bool(false);
+  variable[5] = variable[0];
+  variable[5] = ((array___AbstractArray___iterator_t)CALL(variable[5],COLOR_abstract_collection___Collection___iterator))(variable[5]) /*AbstractArray::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 = ((kernel___Char___to_i_t)CALL( variable4 /*c*/,COLOR_kernel___Char___to_i))( variable4 /*c*/) /*Char::to_i*/;
-    variable5 = variable6;
-    variable6 = TAG_Bool(UNTAG_Int( variable5 /*v*/)>UNTAG_Int( variable0 /*base*/));
-    if (UNTAG_Bool(variable6)) { /*if*/
-      if (UNTAG_Bool( variable2 /*neg*/)) { /*if*/
-        variable6 = TAG_Int(-UNTAG_Int( variable1 /*i*/));
-        variable1 = variable6;
-        goto return_label12;
+    variable[6] = ((array___ArrayIterator___is_ok_t)CALL(variable[5],COLOR_abstract_collection___Iterator___is_ok))(variable[5]) /*ArrayIterator::is_ok*/;
+    if (!UNTAG_Bool(variable[6])) break; /*for*/
+    variable[6] = ((array___ArrayIterator___item_t)CALL(variable[5],COLOR_abstract_collection___Iterator___item))(variable[5]) /*ArrayIterator::item*/;
+    variable[7] = variable[6];
+    variable[9] = ((kernel___Char___to_i_t)CALL( variable[7] /*c*/,COLOR_kernel___Char___to_i))( variable[7] /*c*/) /*Char::to_i*/;
+    variable[8] = variable[9];
+    variable[9] = TAG_Bool(UNTAG_Int( variable[8] /*v*/)>UNTAG_Int( variable[1] /*base*/));
+    if (UNTAG_Bool(variable[9])) { /*if*/
+      if (UNTAG_Bool( variable[4] /*neg*/)) { /*if*/
+        variable[9] = TAG_Int(-UNTAG_Int( variable[3] /*i*/));
+        variable[2] = variable[9];
+        goto return_label18;
       } else { /*if*/
-        variable1 =  variable1 /*i*/;
-        goto return_label12;
+        variable[2] =  variable[3] /*i*/;
+        goto return_label18;
       }
     } else { /*if*/
-      variable6 = TAG_Bool(UNTAG_Int( variable5 /*v*/)<UNTAG_Int( TAG_Int(0)));
-      if (UNTAG_Bool(variable6)) { /*if*/
-        variable2 =  TAG_Bool(true) /*neg=*/;
+      variable[9] = TAG_Bool(UNTAG_Int( variable[8] /*v*/)<UNTAG_Int( TAG_Int(0)));
+      if (UNTAG_Bool(variable[9])) { /*if*/
+        variable[4] =  TAG_Bool(true) /*neg=*/;
       } else { /*if*/
-        variable6 = TAG_Int(UNTAG_Int( variable1 /*i*/)*UNTAG_Int( variable0 /*base*/));
-        variable6 = TAG_Int(UNTAG_Int(variable6)+UNTAG_Int( variable5 /*v*/));
-        variable1 = variable6 /*i=*/;
+        variable[9] = TAG_Int(UNTAG_Int( variable[3] /*i*/)*UNTAG_Int( variable[1] /*base*/));
+        variable[9] = TAG_Int(UNTAG_Int(variable[9])+UNTAG_Int( variable[8] /*v*/));
+        variable[3] = variable[9] /*i=*/;
       }
     }
-    continue_13: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable3,COLOR_abstract_collection___Iterator___next))(variable3) /*ArrayIterator::next*/;
+    continue_19: while(0);
+    ((array___ArrayIterator___next_t)CALL(variable[5],COLOR_abstract_collection___Iterator___next))(variable[5]) /*ArrayIterator::next*/;
   }
-  break_13: while(0);
-  if (UNTAG_Bool( variable2 /*neg*/)) { /*if*/
-    variable3 = TAG_Int(-UNTAG_Int( variable1 /*i*/));
-    variable1 = variable3;
-    goto return_label12;
+  break_19: while(0);
+  if (UNTAG_Bool( variable[4] /*neg*/)) { /*if*/
+    variable[5] = TAG_Int(-UNTAG_Int( variable[3] /*i*/));
+    variable[2] = variable[5];
+    goto return_label18;
   } else { /*if*/
-    variable1 =  variable1 /*i*/;
-    goto return_label12;
+    variable[2] =  variable[3] /*i*/;
+    goto return_label18;
   }
-  return_label12: while(false);
+  return_label18: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t string___String___to_cstring(val_t  self) {
   struct trace_t trace = {NULL, NULL, 135, LOCATE_string___String___to_cstring};
-  val_t variable0;
+  val_t variable[4];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  ((string___String_____braeq_t)CALL( self,COLOR_abstract_collection___Map_____braeq))( self, variable0,  TAG_Char('\0')) /*String::[]=*/;
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/)-UNTAG_Int( TAG_Int(1)));
-  variable0 = ATTR_string___String____items( self) /*String::_items*/;
-  goto return_label14;
-  return_label14: while(false);
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[3] = variable[0];
+  variable[3] = ((array___AbstractArray___length_t)CALL(variable[3],COLOR_abstract_collection___Collection___length))(variable[3]) /*AbstractArray::length*/;
+  ((string___String_____braeq_t)CALL(variable[2],COLOR_abstract_collection___Map_____braeq))(variable[2], variable[3],  TAG_Char('\0')) /*String::[]=*/;
+  variable[2] = variable[0];
+  ATTR_array___AbstractArray____length(variable[2]) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length(variable[2]) /*AbstractArray::_length*/)-UNTAG_Int( TAG_Int(1)));
+  variable[2] = variable[0];
+  variable[2] = ATTR_string___String____items(variable[2]) /*String::_items*/;
+  variable[1] = variable[2];
+  goto return_label20;
+  return_label20: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___String___substring(val_t  self, val_t  param0, val_t  param1) {
   struct trace_t trace = {NULL, NULL, 143, LOCATE_string___String___substring};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
-    val_t variable4;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = TAG_Bool(UNTAG_Int( variable1 /*count*/)>=UNTAG_Int( TAG_Int(0)));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___substring, LOCATE_string, 151); nit_exit(1);}
-  variable1 = TAG_Int(UNTAG_Int(variable1)+UNTAG_Int( variable0 /*from*/)) /*count*/;
-  variable2 = TAG_Bool(UNTAG_Int( variable0 /*from*/)<UNTAG_Int( TAG_Int(0)));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable0 =  TAG_Int(0) /*from=*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*count*/)>=UNTAG_Int( TAG_Int(0)));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___substring, LOCATE_string, 151); nit_exit(1);}
+  variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int( variable[1] /*from*/)) /*count*/;
+  variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*from*/)<UNTAG_Int( TAG_Int(0)));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    variable[1] =  TAG_Int(0) /*from=*/;
   }
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = TAG_Bool(UNTAG_Int( variable1 /*count*/)>UNTAG_Int(variable2));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-    variable1 = variable2 /*count=*/;
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*count*/)>UNTAG_Int(variable[4]));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    variable[4] = variable[0];
+    variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+    variable[2] = variable[4] /*count=*/;
   }
-  variable2 = TAG_Bool(UNTAG_Int( variable0 /*from*/)<UNTAG_Int( variable1 /*count*/));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable3 = TAG_Int(UNTAG_Int( variable1 /*count*/)-UNTAG_Int( variable0 /*from*/));
-    variable4 = NEW_String_string___String___with_capacity(variable3); /*new String*/
-    variable3 = variable4;
-    variable2 = variable3;
+  variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*from*/)<UNTAG_Int( variable[2] /*count*/));
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    variable[5] = TAG_Int(UNTAG_Int( variable[2] /*count*/)-UNTAG_Int( variable[1] /*from*/));
+    variable[6] = NEW_String_string___String___with_capacity(variable[5]); /*new String*/
+    variable[5] = variable[6];
+    variable[4] = variable[5];
     while (true) { /*while*/
-      variable3 = TAG_Bool(UNTAG_Int( variable0 /*from*/)<UNTAG_Int( variable1 /*count*/));
-      if (!UNTAG_Bool(variable3)) break; /* while*/
-      variable3 = ATTR_string___String____items( self) /*String::_items*/;
-      variable3 = TAG_Char(UNBOX_NativeString(variable3)[UNTAG_Int( variable0 /*from*/)]);
-      ((array___AbstractArray___push_t)CALL( variable2 /*r*/,COLOR_abstract_collection___IndexedCollection___push))( variable2 /*r*/, variable3) /*AbstractArray::push*/;
-      variable0 = TAG_Int(UNTAG_Int(variable0)+UNTAG_Int( TAG_Int(1))) /*from*/;
-      continue_16: while(0);
+      variable[5] = TAG_Bool(UNTAG_Int( variable[1] /*from*/)<UNTAG_Int( variable[2] /*count*/));
+      if (!UNTAG_Bool(variable[5])) break; /* while*/
+      variable[5] = variable[0];
+      variable[5] = ATTR_string___String____items(variable[5]) /*String::_items*/;
+      variable[5] = TAG_Char(UNBOX_NativeString(variable[5])[UNTAG_Int( variable[1] /*from*/)]);
+      ((array___AbstractArray___push_t)CALL( variable[4] /*r*/,COLOR_abstract_collection___IndexedCollection___push))( variable[4] /*r*/, variable[5]) /*AbstractArray::push*/;
+      variable[1] = TAG_Int(UNTAG_Int(variable[1])+UNTAG_Int( TAG_Int(1))) /*from*/;
+      continue_22: while(0);
     }
-    break_16: while(0);
-    variable2 =  variable2 /*r*/;
-    goto return_label15;
+    break_22: while(0);
+    variable[3] =  variable[4] /*r*/;
+    goto return_label21;
   } else { /*if*/
-    variable2 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    goto return_label15;
+    variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[3] = variable[4];
+    goto return_label21;
   }
-  return_label15: while(false);
+  return_label21: while(false);
   tracehead = trace.prev;
-  return variable2;
+  return variable[3];
 }
 val_t string___String___substring_from(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 167, LOCATE_string___String___substring_from};
-  val_t variable0;
-  val_t variable1;
+  val_t variable[5];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable1 = TAG_Bool(UNTAG_Int( variable0 /*from*/)<UNTAG_Int(variable1));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___substring_from, LOCATE_string, 174); nit_exit(1);}
-  variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable1 = TAG_Int(UNTAG_Int(variable1)-UNTAG_Int( variable0 /*from*/));
-  variable1 = ((string___String___substring_t)CALL( self,COLOR_string___String___substring))( self,  variable0 /*from*/, variable1) /*String::substring*/;
-  goto return_label17;
-  return_label17: while(false);
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = variable[0];
+  variable[3] = ((array___AbstractArray___length_t)CALL(variable[3],COLOR_abstract_collection___Collection___length))(variable[3]) /*AbstractArray::length*/;
+  variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*from*/)<UNTAG_Int(variable[3]));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___substring_from, LOCATE_string, 174); nit_exit(1);}
+  variable[3] = variable[0];
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( variable[1] /*from*/));
+  variable[3] = ((string___String___substring_t)CALL(variable[3],COLOR_string___String___substring))(variable[3],  variable[1] /*from*/, variable[4]) /*String::substring*/;
+  variable[2] = variable[3];
+  goto return_label23;
+  return_label23: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t string___String___has_substring(val_t  self, val_t  param0, val_t  param1) {
   struct trace_t trace = {NULL, NULL, 178, LOCATE_string___String___has_substring};
-  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 variable[10];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable3 = ((array___AbstractArray___length_t)CALL( variable0 /*str*/,COLOR_abstract_collection___Collection___length))( variable0 /*str*/) /*AbstractArray::length*/;
-  variable3 = TAG_Int(UNTAG_Int(variable3)-UNTAG_Int( TAG_Int(1)));
-  variable2 = variable3;
-  variable4 = TAG_Int(UNTAG_Int( variable1 /*pos*/)+UNTAG_Int( variable2 /*itsindex*/));
-  variable3 = variable4;
-  variable5 = ATTR_string___String____items( self) /*String::_items*/;
-  variable4 = variable5;
-  variable6 = ATTR_string___String____items( variable0 /*str*/) /*String::_items*/;
-  variable5 = variable6;
-  variable6 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable6 = TAG_Bool(UNTAG_Int( variable3 /*myindex*/)>UNTAG_Int(variable6));
-  variable7 = variable6;
-  if (!UNTAG_Bool(variable7)) { /* or */
-    variable7 = TAG_Bool(UNTAG_Int( variable2 /*itsindex*/)>UNTAG_Int( variable3 /*myindex*/));
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  variable[5] = ((array___AbstractArray___length_t)CALL( variable[1] /*str*/,COLOR_abstract_collection___Collection___length))( variable[1] /*str*/) /*AbstractArray::length*/;
+  variable[5] = TAG_Int(UNTAG_Int(variable[5])-UNTAG_Int( TAG_Int(1)));
+  variable[4] = variable[5];
+  variable[6] = TAG_Int(UNTAG_Int( variable[2] /*pos*/)+UNTAG_Int( variable[4] /*itsindex*/));
+  variable[5] = variable[6];
+  variable[7] = variable[0];
+  variable[7] = ATTR_string___String____items(variable[7]) /*String::_items*/;
+  variable[6] = variable[7];
+  variable[8] = ATTR_string___String____items( variable[1] /*str*/) /*String::_items*/;
+  variable[7] = variable[8];
+  variable[8] = variable[0];
+  variable[8] = ((array___AbstractArray___length_t)CALL(variable[8],COLOR_abstract_collection___Collection___length))(variable[8]) /*AbstractArray::length*/;
+  variable[8] = TAG_Bool(UNTAG_Int( variable[5] /*myindex*/)>UNTAG_Int(variable[8]));
+  variable[9] = variable[8];
+  if (!UNTAG_Bool(variable[9])) { /* or */
+    variable[9] = TAG_Bool(UNTAG_Int( variable[4] /*itsindex*/)>UNTAG_Int( variable[5] /*myindex*/));
   }
-  variable6 = variable7;
-  if (UNTAG_Bool(variable6)) { /*if*/
-    variable2 =  TAG_Bool(false);
-    goto return_label18;
+  variable[8] = variable[9];
+  if (UNTAG_Bool(variable[8])) { /*if*/
+    variable[3] =  TAG_Bool(false);
+    goto return_label24;
   }
   while (true) { /*while*/
-    variable6 = TAG_Bool(UNTAG_Int( variable2 /*itsindex*/)>UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable6)) break; /* while*/
-    variable6 = TAG_Char(UNBOX_NativeString( variable4 /*myitems*/)[UNTAG_Int( variable3 /*myindex*/)]);
-    variable7 = TAG_Char(UNBOX_NativeString( variable5 /*itsitems*/)[UNTAG_Int( variable2 /*itsindex*/)]);
-    variable6 = TAG_Bool((variable6)!=(variable7));
-    if (UNTAG_Bool(variable6)) { /*if*/
-      variable2 =  TAG_Bool(false);
-      goto return_label18;
+    variable[8] = TAG_Bool(UNTAG_Int( variable[4] /*itsindex*/)>UNTAG_Int( TAG_Int(0)));
+    if (!UNTAG_Bool(variable[8])) break; /* while*/
+    variable[8] = TAG_Char(UNBOX_NativeString( variable[6] /*myitems*/)[UNTAG_Int( variable[5] /*myindex*/)]);
+    variable[9] = TAG_Char(UNBOX_NativeString( variable[7] /*itsitems*/)[UNTAG_Int( variable[4] /*itsindex*/)]);
+    variable[8] = TAG_Bool((variable[8])!=(variable[9]));
+    if (UNTAG_Bool(variable[8])) { /*if*/
+      variable[3] =  TAG_Bool(false);
+      goto return_label24;
     }
-    variable3 = TAG_Int(UNTAG_Int(variable3)-UNTAG_Int( variable3 /*myindex*/)) /*myindex*/;
-    variable2 = TAG_Int(UNTAG_Int(variable2)-UNTAG_Int( variable2 /*itsindex*/)) /*itsindex*/;
-    continue_19: while(0);
+    variable[5] = TAG_Int(UNTAG_Int(variable[5])-UNTAG_Int( variable[5] /*myindex*/)) /*myindex*/;
+    variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( variable[4] /*itsindex*/)) /*itsindex*/;
+    continue_25: while(0);
   }
-  break_19: while(0);
-  variable2 =  TAG_Bool(true);
-  goto return_label18;
-  return_label18: while(false);
+  break_25: while(0);
+  variable[3] =  TAG_Bool(true);
+  goto return_label24;
+  return_label24: while(false);
   tracehead = trace.prev;
-  return variable2;
+  return variable[3];
 }
 val_t string___String___has_prefix(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 197, LOCATE_string___String___has_prefix};
-  val_t variable0;
-  val_t variable1;
+  val_t variable[4];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = ((string___String___has_substring_t)CALL( self,COLOR_string___String___has_substring))( self,  variable0 /*prefix*/,  TAG_Int(0)) /*String::has_substring*/;
-  goto return_label20;
-  return_label20: while(false);
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = variable[0];
+  variable[3] = ((string___String___has_substring_t)CALL(variable[3],COLOR_string___String___has_substring))(variable[3],  variable[1] /*prefix*/,  TAG_Int(0)) /*String::has_substring*/;
+  variable[2] = variable[3];
+  goto return_label26;
+  return_label26: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t string___String___has_suffix(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 203, LOCATE_string___String___has_suffix};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = ((array___AbstractArray___length_t)CALL( variable0 /*suffix*/,COLOR_abstract_collection___Collection___length))( variable0 /*suffix*/) /*AbstractArray::length*/;
-  variable1 = TAG_Int(UNTAG_Int(variable1)-UNTAG_Int(variable2));
-  variable1 = ((string___String___has_substring_t)CALL( self,COLOR_string___String___has_substring))( self,  variable0 /*suffix*/, variable1) /*String::has_substring*/;
-  goto return_label21;
-  return_label21: while(false);
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = variable[0];
+  variable[4] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL(variable[4],COLOR_abstract_collection___Collection___length))(variable[4]) /*AbstractArray::length*/;
+  variable[5] = ((array___AbstractArray___length_t)CALL( variable[1] /*suffix*/,COLOR_abstract_collection___Collection___length))( variable[1] /*suffix*/) /*AbstractArray::length*/;
+  variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int(variable[5]));
+  variable[3] = ((string___String___has_substring_t)CALL(variable[3],COLOR_string___String___has_substring))(variable[3],  variable[1] /*suffix*/, variable[4]) /*String::has_substring*/;
+  variable[2] = variable[3];
+  goto return_label27;
+  return_label27: while(false);
   tracehead = trace.prev;
-  return variable1;
-}
-val_t string___String_____l(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 209, LOCATE_string___String_____l};
-  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;
-  trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  TAG_Int(0);
-  variable3 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = variable3;
-  variable4 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
-  variable3 = variable4;
-  while (true) { /*while*/
-    variable4 = TAG_Bool(UNTAG_Int( variable1 /*i*/)<UNTAG_Int( variable2 /*l1*/));
-    variable5 = variable4;
-    if (UNTAG_Bool(variable5)) { /* and */
-      variable5 = TAG_Bool(UNTAG_Int( variable1 /*i*/)<UNTAG_Int( variable3 /*l2*/));
-    }
-    variable4 = variable5;
-    if (!UNTAG_Bool(variable4)) break; /* while*/
-    variable5 = ((string___String_____bra_t)CALL( self,COLOR_abstract_collection___Map_____bra))( self,  variable1 /*i*/) /*String::[]*/;
-    variable5 = TAG_Int((unsigned char)UNTAG_Char(variable5));
-    variable4 = variable5;
-    variable6 = ((string___String_____bra_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____bra))( variable0 /*s*/,  variable1 /*i*/) /*String::[]*/;
-    variable6 = TAG_Int((unsigned char)UNTAG_Char(variable6));
-    variable5 = variable6;
-    variable6 = TAG_Bool(UNTAG_Int( variable4 /*c1*/)<UNTAG_Int( variable5 /*c2*/));
-    if (UNTAG_Bool(variable6)) { /*if*/
-      variable1 =  TAG_Bool(true);
-      goto return_label22;
-    } else { /*if*/
-      variable6 = TAG_Bool(UNTAG_Int( variable5 /*c2*/)<UNTAG_Int( variable4 /*c1*/));
-      if (UNTAG_Bool(variable6)) { /*if*/
-        variable1 =  TAG_Bool(false);
-        goto return_label22;
-      }
-    }
-    variable1 = TAG_Int(UNTAG_Int(variable1)+UNTAG_Int( TAG_Int(1))) /*i*/;
-    continue_23: while(0);
-  }
-  break_23: while(0);
-  variable4 = TAG_Bool(UNTAG_Int( variable2 /*l1*/)<UNTAG_Int( variable3 /*l2*/));
-  if (UNTAG_Bool(variable4)) { /*if*/
-    variable1 =  TAG_Bool(true);
-    goto return_label22;
-  } else { /*if*/
-    variable1 =  TAG_Bool(false);
-    goto return_label22;
-  }
-  return_label22: while(false);
-  tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 void string___String___init(val_t  self, int* init_table) {
   struct trace_t trace = {NULL, NULL, 231, LOCATE_string___String___init};
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i]) return;
-  ((string___String___with_capacity_t)CALL( self,COLOR_string___String___with_capacity))( self,  TAG_Int(5), init_table /*YYY*/) /*String::with_capacity*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i] = 1;
+  variable[0] =  self;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i]) return;
+  variable[2] = variable[0];
+  ((string___String___with_capacity_t)CALL(variable[2],COLOR_string___String___with_capacity))(variable[2],  TAG_Int(5), init_table /*YYY*/) /*String::with_capacity*/;
+  return_label28: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i] = 1;
   tracehead = trace.prev;
   return;
 }
 void string___String___from(val_t  self, val_t  param0, int* init_table) {
   struct trace_t trace = {NULL, NULL, 237, LOCATE_string___String___from};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i]) return;
-  variable1 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
-  variable1 = TAG_Int(UNTAG_Int(variable1)+UNTAG_Int( TAG_Int(1)));
-  ATTR_string___String____capacity( self) /*String::_capacity*/ = variable1;
-  variable1 = ((array___AbstractArray___length_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Collection___length))( variable0 /*s*/) /*AbstractArray::length*/;
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ = variable1;
-  variable1 = ATTR_string___String____capacity( self) /*String::_capacity*/;
-  variable1 = BOX_NativeString((char*)malloc((UNTAG_Int(variable1) * sizeof(char))));
-  ATTR_string___String____items( self) /*String::_items*/ = variable1;
-  variable1 = ((string___String___items_t)CALL( variable0 /*s*/,COLOR_string___String___items))( variable0 /*s*/) /*String::items*/;
-  variable2 = ATTR_string___String____items( self) /*String::_items*/;
-  variable3 = ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/;
-  (void)memcpy(UNBOX_NativeString(variable2)+UNTAG_Int( TAG_Int(0)), UNBOX_NativeString(variable1)+UNTAG_Int( TAG_Int(0)), UNTAG_Int(variable3));
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i] = 1;
+  variable[0] =  self;
+  variable[1] =  param0;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i]) return;
+  variable[3] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Collection___length))( variable[1] /*s*/) /*AbstractArray::length*/;
+  variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1)));
+  ATTR_string___String____capacity(variable[3]) /*String::_capacity*/ = variable[4];
+  variable[3] = variable[0];
+  variable[4] = ((array___AbstractArray___length_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Collection___length))( variable[1] /*s*/) /*AbstractArray::length*/;
+  ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/ = variable[4];
+  variable[3] = variable[0];
+  variable[4] = variable[0];
+  variable[5] = variable[0];
+  variable[5] = ATTR_string___String____capacity(variable[5]) /*String::_capacity*/;
+  variable[4] = BOX_NativeString((char*)malloc((UNTAG_Int(variable[5]) * sizeof(char))));
+  ATTR_string___String____items(variable[3]) /*String::_items*/ = variable[4];
+  variable[3] = ((string___String___items_t)CALL( variable[1] /*s*/,COLOR_string___String___items))( variable[1] /*s*/) /*String::items*/;
+  variable[4] = variable[0];
+  variable[4] = ATTR_string___String____items(variable[4]) /*String::_items*/;
+  variable[5] = variable[0];
+  variable[5] = ATTR_array___AbstractArray____length(variable[5]) /*AbstractArray::_length*/;
+  (void)memcpy(UNBOX_NativeString(variable[4])+UNTAG_Int( TAG_Int(0)), UNBOX_NativeString(variable[3])+UNTAG_Int( TAG_Int(0)), UNTAG_Int(variable[5]));
+  return_label29: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i] = 1;
   tracehead = trace.prev;
   return;
 }
 void string___String___with_capacity(val_t  self, val_t  param0, int* init_table) {
   struct trace_t trace = {NULL, NULL, 245, LOCATE_string___String___with_capacity};
-  val_t variable0;
-  val_t variable1;
+  val_t variable[5];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i]) return;
-  variable1 = TAG_Bool(UNTAG_Int( variable0 /*cap*/)>=UNTAG_Int( TAG_Int(0)));
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___with_capacity, LOCATE_string, 248); nit_exit(1);}
-  variable1 = BOX_NativeString((char*)malloc((UNTAG_Int( variable0 /*cap*/) * sizeof(char))));
-  ATTR_string___String____items( self) /*String::_items*/ = variable1;
-  ATTR_string___String____capacity( self) /*String::_capacity*/ =  variable0 /*cap*/;
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ =  TAG_Int(0);
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i] = 1;
+  variable[0] =  self;
+  variable[1] =  param0;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i]) return;
+  variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*cap*/)>=UNTAG_Int( TAG_Int(0)));
+  if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___with_capacity, LOCATE_string, 248); nit_exit(1);}
+  variable[3] = variable[0];
+  variable[4] = variable[0];
+  variable[4] = BOX_NativeString((char*)malloc((UNTAG_Int( variable[1] /*cap*/) * sizeof(char))));
+  ATTR_string___String____items(variable[3]) /*String::_items*/ = variable[4];
+  variable[3] = variable[0];
+  ATTR_string___String____capacity(variable[3]) /*String::_capacity*/ =  variable[1] /*cap*/;
+  variable[3] = variable[0];
+  ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/ =  TAG_Int(0);
+  return_label30: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i] = 1;
   tracehead = trace.prev;
   return;
 }
 void string___String___with_native(val_t  self, val_t  param0, val_t  param1, int* init_table) {
   struct trace_t trace = {NULL, NULL, 255, LOCATE_string___String___with_native};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
+  val_t variable[5];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i]) return;
-  variable2 = TAG_Bool(UNTAG_Int( variable1 /*size*/)>=UNTAG_Int( TAG_Int(0)));
-  if (!UNTAG_Bool(variable2)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___with_native, LOCATE_string, 258); nit_exit(1);}
-  ATTR_string___String____items( self) /*String::_items*/ =  variable0 /*nat*/;
-  ATTR_string___String____capacity( self) /*String::_capacity*/ =  variable1 /*size*/;
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ =  variable1 /*size*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i] = 1;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i]) return;
+  variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*size*/)>=UNTAG_Int( TAG_Int(0)));
+  if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String___with_native, LOCATE_string, 258); nit_exit(1);}
+  variable[4] = variable[0];
+  ATTR_string___String____items(variable[4]) /*String::_items*/ =  variable[1] /*nat*/;
+  variable[4] = variable[0];
+  ATTR_string___String____capacity(variable[4]) /*String::_capacity*/ =  variable[2] /*size*/;
+  variable[4] = variable[0];
+  ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/ =  variable[2] /*size*/;
+  return_label31: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i] = 1;
   tracehead = trace.prev;
   return;
 }
 void string___String___from_cstring(val_t  self, val_t  param0, int* init_table) {
   struct trace_t trace = {NULL, NULL, 264, LOCATE_string___String___from_cstring};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i]) return;
-  variable2 = ((string___NativeString___cstring_length_t)CALL( variable0 /*str*/,COLOR_string___NativeString___cstring_length))( variable0 /*str*/) /*NativeString::cstring_length*/;
-  variable1 = variable2;
-  ATTR_string___String____items( self) /*String::_items*/ =  variable0 /*str*/;
-  variable2 = TAG_Int(UNTAG_Int( variable1 /*size*/)+UNTAG_Int( TAG_Int(1)));
-  ATTR_string___String____capacity( self) /*String::_capacity*/ = variable2;
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ =  variable1 /*size*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i] = 1;
+  variable[0] =  self;
+  variable[1] =  param0;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i]) return;
+  variable[4] = ((string___NativeString___cstring_length_t)CALL( variable[1] /*str*/,COLOR_string___NativeString___cstring_length))( variable[1] /*str*/) /*NativeString::cstring_length*/;
+  variable[3] = variable[4];
+  variable[4] = variable[0];
+  ATTR_string___String____items(variable[4]) /*String::_items*/ =  variable[1] /*str*/;
+  variable[4] = variable[0];
+  variable[5] = TAG_Int(UNTAG_Int( variable[3] /*size*/)+UNTAG_Int( TAG_Int(1)));
+  ATTR_string___String____capacity(variable[4]) /*String::_capacity*/ = variable[5];
+  variable[4] = variable[0];
+  ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/ =  variable[3] /*size*/;
+  return_label32: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i] = 1;
   tracehead = trace.prev;
   return;
 }
 void string___String___filled_with(val_t  self, val_t  param0, val_t  param1, int* init_table) {
   struct trace_t trace = {NULL, NULL, 273, LOCATE_string___String___filled_with};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  if (init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i]) return;
-  ((string___String___with_capacity_t)CALL( self,COLOR_string___String___with_capacity))( self,  variable1 /*count*/, init_table /*YYY*/) /*String::with_capacity*/;
-  variable2 =  TAG_Int(0);
-  while (true) { /*while*/
-    variable3 = TAG_Bool(UNTAG_Int( variable2 /*i*/)<UNTAG_Int( variable1 /*count*/));
-    if (!UNTAG_Bool(variable3)) break; /* while*/
-    variable3 = ATTR_string___String____items( self) /*String::_items*/;
-    UNBOX_NativeString(variable3)[UNTAG_Int( variable2 /*i*/)]=UNTAG_Char( variable0 /*c*/);
-    variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int( TAG_Int(1))) /*i*/;
-    continue_30: while(0);
-  }
-  break_30: while(0);
-  ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/ =  variable1 /*count*/;
-  init_table[VAL2OBJ( self)->vft[INIT_TABLE_POS_String].i] = 1;
-  tracehead = trace.prev;
-  return;
-}
-void string___String___output(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 285, LOCATE_string___String___output};
-  val_t variable0;
-    val_t variable1;
+  val_t variable[6];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  TAG_Int(0);
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i]) return;
+  variable[4] = variable[0];
+  ((string___String___with_capacity_t)CALL(variable[4],COLOR_string___String___with_capacity))(variable[4],  variable[2] /*count*/, init_table /*YYY*/) /*String::with_capacity*/;
+  variable[4] =  TAG_Int(0);
   while (true) { /*while*/
-    variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-    variable1 = TAG_Bool(UNTAG_Int( variable0 /*i*/)<UNTAG_Int(variable1));
-    if (!UNTAG_Bool(variable1)) break; /* while*/
-    variable1 = ATTR_string___String____items( self) /*String::_items*/;
-    variable1 = TAG_Char(UNBOX_NativeString(variable1)[UNTAG_Int( variable0 /*i*/)]);
-    printf("%c", (unsigned char)UNTAG_Char(variable1));
-    variable0 = TAG_Int(UNTAG_Int(variable0)+UNTAG_Int( TAG_Int(1))) /*i*/;
-    continue_32: while(0);
-  }
-  break_32: while(0);
-  tracehead = trace.prev;
-  return;
-}
-val_t string___String_____eqeq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 294, LOCATE_string___String_____eqeq};
-  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;
-  trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = TAG_Bool(( variable0 /*o*/==NIT_NULL) || VAL_ISA( variable0 /*o*/, COLOR_String, ID_String)) /*cast String*/;
-  variable1 =  TAG_Bool(!UNTAG_Bool(variable1));
-  if (!UNTAG_Bool(variable1)) { /* or */
-    variable1 = TAG_Bool(IS_EQUAL_NN( variable0 /*o*/, NIT_NULL /*null*/));
-  }
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 =  TAG_Bool(false);
-    goto return_label33;
-  }
-  variable1 = TAG_Bool(( variable0 /*o*/==NIT_NULL) || VAL_ISA( variable0 /*o*/, COLOR_String, ID_String)) /*cast String*/;
-  if (!UNTAG_Bool(variable1)) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_string___String_____eqeq, LOCATE_string, 297); nit_exit(1);}
-  variable2 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable1 = variable2;
-  variable2 = ((array___AbstractArray___length_t)CALL( variable0 /*o*/,COLOR_abstract_collection___Collection___length))( variable0 /*o*/) /*AbstractArray::length*/;
-  variable2 = TAG_Bool((variable2)!=( variable1 /*l*/));
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable1 =  TAG_Bool(false);
-    goto return_label33;
-  }
-  variable2 =  TAG_Int(0);
-  variable4 = ATTR_string___String____items( self) /*String::_items*/;
-  variable3 = variable4;
-  variable5 = ATTR_string___String____items( variable0 /*o*/) /*String::_items*/;
-  variable4 = variable5;
-  while (true) { /*while*/
-    variable5 = TAG_Bool(UNTAG_Int( variable2 /*i*/)<UNTAG_Int( variable1 /*l*/));
-    if (!UNTAG_Bool(variable5)) break; /* while*/
-    variable5 = TAG_Char(UNBOX_NativeString( variable3 /*it*/)[UNTAG_Int( variable2 /*i*/)]);
-    variable6 = TAG_Char(UNBOX_NativeString( variable4 /*oit*/)[UNTAG_Int( variable2 /*i*/)]);
-    variable5 = TAG_Bool((variable5)!=(variable6));
-    if (UNTAG_Bool(variable5)) { /*if*/
-      variable1 =  TAG_Bool(false);
-      goto return_label33;
-    }
-    variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int( TAG_Int(1))) /*i*/;
+    variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[2] /*count*/));
+    if (!UNTAG_Bool(variable[5])) break; /* while*/
+    variable[5] = variable[0];
+    variable[5] = ATTR_string___String____items(variable[5]) /*String::_items*/;
+    UNBOX_NativeString(variable[5])[UNTAG_Int( variable[4] /*i*/)]=UNTAG_Char( variable[1] /*c*/);
+    variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
     continue_34: while(0);
   }
   break_34: while(0);
-  variable1 =  TAG_Bool(true);
-  goto return_label33;
+  variable[5] = variable[0];
+  ATTR_array___AbstractArray____length(variable[5]) /*AbstractArray::_length*/ =  variable[2] /*count*/;
   return_label33: while(false);
+  init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_String].i] = 1;
   tracehead = trace.prev;
-  return variable1;
+  return;
 }
 val_t string___String___to_upper(val_t  self) {
   struct trace_t trace = {NULL, NULL, 310, LOCATE_string___String___to_upper};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = NEW_String_string___String___with_capacity(variable1); /*new String*/
-  variable1 = variable2;
-  variable0 = variable1;
-  variable1 = ((array___AbstractArray___iterator_t)CALL( self,COLOR_abstract_collection___Collection___iterator))( self) /*AbstractArray::iterator*/;
+  variable[0] =  self;
+  variable[3] = variable[0];
+  variable[3] = ((array___AbstractArray___length_t)CALL(variable[3],COLOR_abstract_collection___Collection___length))(variable[3]) /*AbstractArray::length*/;
+  variable[4] = NEW_String_string___String___with_capacity(variable[3]); /*new String*/
+  variable[3] = variable[4];
+  variable[2] = variable[3];
+  variable[3] = variable[0];
+  variable[3] = ((array___AbstractArray___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*AbstractArray::iterator*/;
   while (true) { /*for*/
-    variable2 = ((array___ArrayIterator___is_ok_t)CALL(variable1,COLOR_abstract_collection___Iterator___is_ok))(variable1) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable2)) break; /*for*/
-    variable2 = ((array___ArrayIterator___item_t)CALL(variable1,COLOR_abstract_collection___Iterator___item))(variable1) /*ArrayIterator::item*/;
-    variable3 = ((kernel___Char___to_upper_t)CALL( variable2 /*i*/,COLOR_kernel___Char___to_upper))( variable2 /*i*/) /*Char::to_upper*/;
-    ((string___String___add_t)CALL( variable0 /*s*/,COLOR_abstract_collection___SimpleCollection___add))( variable0 /*s*/, variable3) /*String::add*/;
+    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
+    if (!UNTAG_Bool(variable[4])) break; /*for*/
+    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
+    variable[5] = variable[4];
+    variable[6] = ((kernel___Char___to_upper_t)CALL( variable[5] /*i*/,COLOR_kernel___Char___to_upper))( variable[5] /*i*/) /*Char::to_upper*/;
+    ((string___String___add_t)CALL( variable[2] /*s*/,COLOR_abstract_collection___SimpleCollection___add))( variable[2] /*s*/, variable[6]) /*String::add*/;
     continue_36: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable1,COLOR_abstract_collection___Iterator___next))(variable1) /*ArrayIterator::next*/;
+    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
   }
   break_36: while(0);
-  variable0 =  variable0 /*s*/;
+  variable[1] =  variable[2] /*s*/;
   goto return_label35;
   return_label35: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___String___to_lower(val_t  self) {
   struct trace_t trace = {NULL, NULL, 318, LOCATE_string___String___to_lower};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable1 = ((array___AbstractArray___length_t)CALL( self,COLOR_abstract_collection___Collection___length))( self) /*AbstractArray::length*/;
-  variable2 = NEW_String_string___String___with_capacity(variable1); /*new String*/
-  variable1 = variable2;
-  variable0 = variable1;
-  variable1 = ((array___AbstractArray___iterator_t)CALL( self,COLOR_abstract_collection___Collection___iterator))( self) /*AbstractArray::iterator*/;
+  variable[0] =  self;
+  variable[3] = variable[0];
+  variable[3] = ((array___AbstractArray___length_t)CALL(variable[3],COLOR_abstract_collection___Collection___length))(variable[3]) /*AbstractArray::length*/;
+  variable[4] = NEW_String_string___String___with_capacity(variable[3]); /*new String*/
+  variable[3] = variable[4];
+  variable[2] = variable[3];
+  variable[3] = variable[0];
+  variable[3] = ((array___AbstractArray___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*AbstractArray::iterator*/;
   while (true) { /*for*/
-    variable2 = ((array___ArrayIterator___is_ok_t)CALL(variable1,COLOR_abstract_collection___Iterator___is_ok))(variable1) /*ArrayIterator::is_ok*/;
-    if (!UNTAG_Bool(variable2)) break; /*for*/
-    variable2 = ((array___ArrayIterator___item_t)CALL(variable1,COLOR_abstract_collection___Iterator___item))(variable1) /*ArrayIterator::item*/;
-    variable3 = ((kernel___Char___to_lower_t)CALL( variable2 /*i*/,COLOR_kernel___Char___to_lower))( variable2 /*i*/) /*Char::to_lower*/;
-    ((string___String___add_t)CALL( variable0 /*s*/,COLOR_abstract_collection___SimpleCollection___add))( variable0 /*s*/, variable3) /*String::add*/;
+    variable[4] = ((array___ArrayIterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*ArrayIterator::is_ok*/;
+    if (!UNTAG_Bool(variable[4])) break; /*for*/
+    variable[4] = ((array___ArrayIterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*ArrayIterator::item*/;
+    variable[5] = variable[4];
+    variable[6] = ((kernel___Char___to_lower_t)CALL( variable[5] /*i*/,COLOR_kernel___Char___to_lower))( variable[5] /*i*/) /*Char::to_lower*/;
+    ((string___String___add_t)CALL( variable[2] /*s*/,COLOR_abstract_collection___SimpleCollection___add))( variable[2] /*s*/, variable[6]) /*String::add*/;
     continue_38: while(0);
-    ((array___ArrayIterator___next_t)CALL(variable1,COLOR_abstract_collection___Iterator___next))(variable1) /*ArrayIterator::next*/;
+    ((array___ArrayIterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*ArrayIterator::next*/;
   }
   break_38: while(0);
-  variable0 =  variable0 /*s*/;
+  variable[1] =  variable[2] /*s*/;
   goto return_label37;
   return_label37: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___String___items(val_t  self) {
   struct trace_t trace = {NULL, NULL, 326, LOCATE_string___String___items};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -769,6 +858,8 @@ val_t string___String___items(val_t  self) {
 }
 val_t string___String___capacity(val_t  self) {
   struct trace_t trace = {NULL, NULL, 327, LOCATE_string___String___capacity};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -776,471 +867,485 @@ val_t string___String___capacity(val_t  self) {
 }
 val_t string___Object___to_s(val_t  self) {
   struct trace_t trace = {NULL, NULL, 337, LOCATE_string___Object___to_s};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((string___Object___inspect_t)CALL( self,COLOR_string___Object___inspect))( self) /*Object::inspect*/;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___Object___inspect_t)CALL(variable[2],COLOR_string___Object___inspect))(variable[2]) /*Object::inspect*/;
+  variable[1] = variable[2];
   goto return_label39;
   return_label39: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Object___inspect(val_t  self) {
   struct trace_t trace = {NULL, NULL, 340, LOCATE_string___Object___inspect};
-  val_t variable0;
-  val_t variable1;
+  val_t variable[4];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable1 = ((string___Object___inspect_head_t)CALL( self,COLOR_string___Object___inspect_head))( self) /*Object::inspect_head*/;
-  variable0 = variable1;
-  ((string___String___add_t)CALL( variable0 /*r*/,COLOR_abstract_collection___SimpleCollection___add))( variable0 /*r*/,  TAG_Char('>')) /*String::add*/;
-  variable0 =  variable0 /*r*/;
+  variable[0] =  self;
+  variable[3] = variable[0];
+  variable[3] = ((string___Object___inspect_head_t)CALL(variable[3],COLOR_string___Object___inspect_head))(variable[3]) /*Object::inspect_head*/;
+  variable[2] = variable[3];
+  ((string___String___add_t)CALL( variable[2] /*r*/,COLOR_abstract_collection___SimpleCollection___add))( variable[2] /*r*/,  TAG_Char('>')) /*String::add*/;
+  variable[1] =  variable[2] /*r*/;
   goto return_label40;
   return_label40: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Object___inspect_head(val_t  self) {
   struct trace_t trace = {NULL, NULL, 349, LOCATE_string___Object___inspect_head};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
-  val_t variable5;
-  val_t variable6;
+  val_t variable[9];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = NEW_String_string___String___init(); /*new String*/
-  variable1 = NEW_String_string___String___with_native(BOX_NativeString("<"), TAG_Int(1)); /*new String*/
-  variable2 = variable1;
-  ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable2) /*String::append*/;
-  variable3 = TAG_Int((bigint) self);
-  variable3 = ((string___Int___to_hex_t)CALL(variable3,COLOR_string___Int___to_hex))(variable3) /*Int::to_hex*/;
-  variable4 = variable3;
-  ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable4) /*String::append*/;
-  variable5 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable6 = variable5;
-  ((string___String___append_t)CALL(variable0,COLOR_abstract_collection___IndexedCollection___append))(variable0, variable6) /*String::append*/;
+  variable[0] =  self;
+  variable[2] = NEW_String_string___String___init(); /*new String*/
+  variable[3] = NEW_String_string___String___with_native(BOX_NativeString("<"), TAG_Int(1)); /*new String*/
+  variable[4] = variable[3];
+  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[4]) /*String::append*/;
+  variable[5] = variable[0];
+  variable[5] = TAG_Int((bigint)variable[5]);
+  variable[5] = ((string___Int___to_hex_t)CALL(variable[5],COLOR_string___Int___to_hex))(variable[5]) /*Int::to_hex*/;
+  variable[6] = variable[5];
+  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[6]) /*String::append*/;
+  variable[7] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+  variable[8] = variable[7];
+  ((string___String___append_t)CALL(variable[2],COLOR_abstract_collection___IndexedCollection___append))(variable[2], variable[8]) /*String::append*/;
+  variable[1] = variable[2];
   goto return_label41;
   return_label41: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Object___args(val_t  self) {
   struct trace_t trace = {NULL, NULL, 356, LOCATE_string___Object___args};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = (G_sys);
-  variable0 = ((string___Sys___args_t)CALL(variable0,COLOR_string___Object___args))(variable0) /*Sys::args*/;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = (G_sys);
+  variable[2] = ((string___Sys___args_t)CALL(variable[2],COLOR_string___Object___args))(variable[2]) /*Sys::args*/;
+  variable[1] = variable[2];
   goto return_label42;
   return_label42: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Bool___to_s(val_t  self) {
   struct trace_t trace = {NULL, NULL, 363, LOCATE_string___Bool___to_s};
-  val_t variable0;
-    static val_t once_value_variable0_44; static int once_bool_variable0_44;
-    static val_t once_value_variable0_45; static int once_bool_variable0_45;
+    static val_t once_value_44; static int once_bool_44; /* Once value for variable[2]*/
+    static val_t once_value_45; static int once_bool_45; /* Once value for variable[2]*/
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  if (UNTAG_Bool( self)) { /*if*/
-    if (once_bool_variable0_44) variable0 = once_value_variable0_44;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  if (UNTAG_Bool(variable[2])) { /*if*/
+    if (once_bool_44) variable[2] = once_value_44;
     else {
-      variable0 = NEW_String_string___String___with_native(BOX_NativeString("true"), TAG_Int(4)); /*new String*/
-      once_value_variable0_44 = variable0;
-      once_bool_variable0_44 = true;
+      variable[2] = NEW_String_string___String___with_native(BOX_NativeString("true"), TAG_Int(4)); /*new String*/
+      once_value_44 = variable[2];
+      once_bool_44 = true;
     }
+    variable[1] = variable[2];
     goto return_label43;
   } else { /*if*/
-    if (once_bool_variable0_45) variable0 = once_value_variable0_45;
+    if (once_bool_45) variable[2] = once_value_45;
     else {
-      variable0 = NEW_String_string___String___with_native(BOX_NativeString("false"), TAG_Int(5)); /*new String*/
-      once_value_variable0_45 = variable0;
-      once_bool_variable0_45 = true;
+      variable[2] = NEW_String_string___String___with_native(BOX_NativeString("false"), TAG_Int(5)); /*new String*/
+      once_value_45 = variable[2];
+      once_bool_45 = true;
     }
+    variable[1] = variable[2];
     goto return_label43;
   }
   return_label43: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
+}
+val_t string___Int___to_s(val_t  self) {
+  struct trace_t trace = {NULL, NULL, 398, LOCATE_string___Int___to_s};
+  val_t variable[3];
+  void **closurevariable = NULL;
+  trace.prev = tracehead; tracehead = &trace;
+  trace.file = LOCATE_string;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___Int___to_base_t)CALL(variable[2],COLOR_string___Int___to_base))(variable[2],  TAG_Int(10),  TAG_Bool(true)) /*Int::to_base*/;
+  variable[1] = variable[2];
+  goto return_label46;
+  return_label46: while(false);
+  tracehead = trace.prev;
+  return variable[1];
 }
 void string___Int___fill_string(val_t  self, val_t  param0, val_t  param1, val_t  param2) {
   struct trace_t trace = {NULL, NULL, 374, LOCATE_string___Int___fill_string};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
-  val_t variable5;
-    val_t variable6;
+  val_t variable[9];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 =  param2;
-  variable3 = TAG_Int((bigint)0) /*decl variable n*/;
-  variable4 = TAG_Bool(UNTAG_Int( self)<UNTAG_Int( TAG_Int(0)));
-  if (UNTAG_Bool(variable4)) { /*if*/
-    variable4 = TAG_Int(-UNTAG_Int( self));
-    variable3 = variable4 /*n=*/;
-    ((string___String_____braeq_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____braeq))( variable0 /*s*/,  TAG_Int(0),  TAG_Char('-')) /*String::[]=*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  variable[3] =  param2;
+  /*variable[5] is variable n*/
+  variable[6] = variable[0];
+  variable[6] = TAG_Bool(UNTAG_Int(variable[6])<UNTAG_Int( TAG_Int(0)));
+  if (UNTAG_Bool(variable[6])) { /*if*/
+    variable[6] = variable[0];
+    variable[6] = TAG_Int(-UNTAG_Int(variable[6]));
+    variable[5] = variable[6] /*n=*/;
+    ((string___String_____braeq_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Map_____braeq))( variable[1] /*s*/,  TAG_Int(0),  TAG_Char('-')) /*String::[]=*/;
   } else { /*if*/
-    variable4 = TAG_Bool(( self)==( TAG_Int(0)));
-    if (UNTAG_Bool(variable4)) { /*if*/
-      ((string___String_____braeq_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____braeq))( variable0 /*s*/,  TAG_Int(0),  TAG_Char('0')) /*String::[]=*/;
-      goto return_label46;
+    variable[6] = variable[0];
+    variable[6] = TAG_Bool((variable[6])==( TAG_Int(0)));
+    if (UNTAG_Bool(variable[6])) { /*if*/
+      ((string___String_____braeq_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Map_____braeq))( variable[1] /*s*/,  TAG_Int(0),  TAG_Char('0')) /*String::[]=*/;
+      goto return_label47;
     } else { /*if*/
-      variable3 =  self /*n=*/;
+      variable[6] = variable[0];
+      variable[5] = variable[6] /*n=*/;
     }
   }
-  variable5 = ((kernel___Int___digit_count_t)CALL( self,COLOR_kernel___Int___digit_count))( self,  variable1 /*base*/) /*Int::digit_count*/;
-  variable5 = TAG_Int(UNTAG_Int(variable5)-UNTAG_Int( TAG_Int(1)));
-  variable4 = variable5;
+  variable[7] = variable[0];
+  variable[7] = ((kernel___Int___digit_count_t)CALL(variable[7],COLOR_kernel___Int___digit_count))(variable[7],  variable[2] /*base*/) /*Int::digit_count*/;
+  variable[7] = TAG_Int(UNTAG_Int(variable[7])-UNTAG_Int( TAG_Int(1)));
+  variable[6] = variable[7];
   while (true) { /*while*/
-    variable5 = TAG_Bool(UNTAG_Int( variable4 /*pos*/)>=UNTAG_Int( TAG_Int(0)));
-    variable6 = variable5;
-    if (UNTAG_Bool(variable6)) { /* and */
-      variable6 = TAG_Bool(UNTAG_Int( variable3 /*n*/)>UNTAG_Int( TAG_Int(0)));
+    variable[7] = TAG_Bool(UNTAG_Int( variable[6] /*pos*/)>=UNTAG_Int( TAG_Int(0)));
+    variable[8] = variable[7];
+    if (UNTAG_Bool(variable[8])) { /* and */
+      variable[8] = TAG_Bool(UNTAG_Int( variable[5] /*n*/)>UNTAG_Int( TAG_Int(0)));
     }
-    variable5 = variable6;
-    if (!UNTAG_Bool(variable5)) break; /* while*/
-    variable5 = TAG_Int(UNTAG_Int( variable3 /*n*/)%UNTAG_Int( variable1 /*base*/));
-    variable5 = ((kernel___Int___to_c_t)CALL(variable5,COLOR_kernel___Int___to_c))(variable5) /*Int::to_c*/;
-    ((string___String_____braeq_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____braeq))( variable0 /*s*/,  variable4 /*pos*/, variable5) /*String::[]=*/;
-    variable5 = TAG_Int(UNTAG_Int( variable3 /*n*/)/UNTAG_Int( variable1 /*base*/));
-    variable3 = variable5 /*n=*/;
-    variable4 = TAG_Int(UNTAG_Int(variable4)-UNTAG_Int( TAG_Int(1))) /*pos*/;
-    continue_47: while(0);
+    variable[7] = variable[8];
+    if (!UNTAG_Bool(variable[7])) break; /* while*/
+    variable[7] = TAG_Int(UNTAG_Int( variable[5] /*n*/)%UNTAG_Int( variable[2] /*base*/));
+    variable[7] = ((kernel___Int___to_c_t)CALL(variable[7],COLOR_kernel___Int___to_c))(variable[7]) /*Int::to_c*/;
+    ((string___String_____braeq_t)CALL( variable[1] /*s*/,COLOR_abstract_collection___Map_____braeq))( variable[1] /*s*/,  variable[6] /*pos*/, variable[7]) /*String::[]=*/;
+    variable[7] = TAG_Int(UNTAG_Int( variable[5] /*n*/)/UNTAG_Int( variable[2] /*base*/));
+    variable[5] = variable[7] /*n=*/;
+    variable[6] = TAG_Int(UNTAG_Int(variable[6])-UNTAG_Int( TAG_Int(1))) /*pos*/;
+    continue_48: while(0);
   }
-  break_47: while(0);
-  return_label46: while(false);
+  break_48: while(0);
+  return_label47: while(false);
   tracehead = trace.prev;
   return;
 }
-val_t string___Int___to_s(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 398, LOCATE_string___Int___to_s};
-  val_t variable0;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_string;
-  variable0 = ((string___Int___to_base_t)CALL( self,COLOR_string___Int___to_base))( self,  TAG_Int(10),  TAG_Bool(true)) /*Int::to_base*/;
-  goto return_label48;
-  return_label48: while(false);
-  tracehead = trace.prev;
-  return variable0;
-}
 val_t string___Int___to_hex(val_t  self) {
   struct trace_t trace = {NULL, NULL, 401, LOCATE_string___Int___to_hex};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((string___Int___to_base_t)CALL( self,COLOR_string___Int___to_base))( self,  TAG_Int(16),  TAG_Bool(false)) /*Int::to_base*/;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___Int___to_base_t)CALL(variable[2],COLOR_string___Int___to_base))(variable[2],  TAG_Int(16),  TAG_Bool(false)) /*Int::to_base*/;
+  variable[1] = variable[2];
   goto return_label49;
   return_label49: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Int___to_base(val_t  self, val_t  param0, val_t  param1) {
   struct trace_t trace = {NULL, NULL, 404, LOCATE_string___Int___to_base};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable3 = ((kernel___Int___digit_count_t)CALL( self,COLOR_kernel___Int___digit_count))( self,  variable0 /*base*/) /*Int::digit_count*/;
-  variable2 = variable3;
-  variable4 = NEW_String_string___String___filled_with( TAG_Char(' '),  variable2 /*l*/); /*new String*/
-  variable3 = variable4;
-  ((string___Int___fill_string_t)CALL( self,COLOR_string___Int___fill_string))( self,  variable3 /*s*/,  variable0 /*base*/,  variable1 /*signed*/) /*Int::fill_string*/;
-  variable2 =  variable3 /*s*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  variable[5] = variable[0];
+  variable[5] = ((kernel___Int___digit_count_t)CALL(variable[5],COLOR_kernel___Int___digit_count))(variable[5],  variable[1] /*base*/) /*Int::digit_count*/;
+  variable[4] = variable[5];
+  variable[6] = NEW_String_string___String___filled_with( TAG_Char(' '),  variable[4] /*l*/); /*new String*/
+  variable[5] = variable[6];
+  variable[6] = variable[0];
+  ((string___Int___fill_string_t)CALL(variable[6],COLOR_string___Int___fill_string))(variable[6],  variable[5] /*s*/,  variable[1] /*base*/,  variable[2] /*signed*/) /*Int::fill_string*/;
+  variable[3] =  variable[5] /*s*/;
   goto return_label50;
   return_label50: while(false);
   tracehead = trace.prev;
-  return variable2;
+  return variable[3];
 }
 val_t string___Float___to_s(val_t  self) {
   struct trace_t trace = {NULL, NULL, 415, LOCATE_string___Float___to_s};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((string___Float___to_precision_t)CALL( self,COLOR_string___Float___to_precision))( self,  TAG_Int(6)) /*Float::to_precision*/;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___Float___to_precision_t)CALL(variable[2],COLOR_string___Float___to_precision))(variable[2],  TAG_Int(6)) /*Float::to_precision*/;
+  variable[1] = variable[2];
   goto return_label51;
   return_label51: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Float___to_precision(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 417, LOCATE_string___Float___to_precision};
-  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 variable[15];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = TAG_Bool(( variable0 /*nb*/)==( TAG_Int(0)));
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 = TAG_Int((bigint)UNBOX_Float( self));
-    variable1 = ((string___Int___to_s_t)CALL(variable1,COLOR_string___Object___to_s))(variable1) /*Int::to_s*/;
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = TAG_Bool(( variable[1] /*nb*/)==( TAG_Int(0)));
+  if (UNTAG_Bool(variable[3])) { /*if*/
+    variable[3] = variable[0];
+    variable[3] = TAG_Int((bigint)UNBOX_Float(variable[3]));
+    variable[3] = ((string___Int___to_s_t)CALL(variable[3],COLOR_string___Object___to_s))(variable[3]) /*Int::to_s*/;
+    variable[2] = variable[3];
     goto return_label52;
   }
-  variable2 = TAG_Int((bigint)UNBOX_Float( self));
-  variable1 = variable2;
-  variable3 = BOX_Float(1.0);
-  variable2 = variable3;
+  variable[4] = variable[0];
+  variable[4] = TAG_Int((bigint)UNBOX_Float(variable[4]));
+  variable[3] = variable[4];
+  variable[5] = BOX_Float(1.0);
+  variable[4] = variable[5];
   while (true) { /*while*/
-    variable3 = TAG_Bool(UNTAG_Int( variable0 /*nb*/)>UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable3)) break; /* while*/
-    variable3 = BOX_Float(10.0);
-    variable3 = BOX_Float(UNBOX_Float( variable2 /*dec*/)*UNBOX_Float(variable3));
-    variable2 = variable3 /*dec=*/;
-    variable0 = TAG_Int(UNTAG_Int(variable0)-UNTAG_Int( TAG_Int(1))) /*nb*/;
+    variable[5] = TAG_Bool(UNTAG_Int( variable[1] /*nb*/)>UNTAG_Int( TAG_Int(0)));
+    if (!UNTAG_Bool(variable[5])) break; /* while*/
+    variable[5] = BOX_Float(10.0);
+    variable[5] = BOX_Float(UNBOX_Float( variable[4] /*dec*/)*UNBOX_Float(variable[5]));
+    variable[4] = variable[5] /*dec=*/;
+    variable[1] = TAG_Int(UNTAG_Int(variable[1])-UNTAG_Int( TAG_Int(1))) /*nb*/;
     continue_53: while(0);
   }
   break_53: while(0);
-  variable4 = BOX_Float((float)UNTAG_Int( variable1 /*i*/));
-  variable4 = BOX_Float(UNBOX_Float( self)-UNBOX_Float(variable4));
-  variable4 = BOX_Float(UNBOX_Float(variable4)*UNBOX_Float( variable2 /*dec*/));
-  variable4 = TAG_Int((bigint)UNBOX_Float(variable4));
-  variable3 = variable4;
-  variable4 = NEW_String_string___String___init(); /*new String*/
-  variable5 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable6 = variable5;
-  ((string___String___append_t)CALL(variable4,COLOR_abstract_collection___IndexedCollection___append))(variable4, variable6) /*String::append*/;
-  variable7 =  variable1 /*i*/;
-  variable7 = ((string___String___to_s_t)CALL(variable7,COLOR_string___Object___to_s))(variable7) /*String::to_s*/;
-  ((string___String___append_t)CALL(variable4,COLOR_abstract_collection___IndexedCollection___append))(variable4, variable7) /*String::append*/;
-  variable8 = NEW_String_string___String___with_native(BOX_NativeString("."), TAG_Int(1)); /*new String*/
-  variable9 = variable8;
-  ((string___String___append_t)CALL(variable4,COLOR_abstract_collection___IndexedCollection___append))(variable4, variable9) /*String::append*/;
-  variable10 =  variable3 /*d*/;
-  variable10 = ((string___String___to_s_t)CALL(variable10,COLOR_string___Object___to_s))(variable10) /*String::to_s*/;
-  ((string___String___append_t)CALL(variable4,COLOR_abstract_collection___IndexedCollection___append))(variable4, variable10) /*String::append*/;
-  variable11 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-  variable12 = variable11;
-  ((string___String___append_t)CALL(variable4,COLOR_abstract_collection___IndexedCollection___append))(variable4, variable12) /*String::append*/;
-  variable1 = variable4;
+  variable[6] = variable[0];
+  variable[7] = BOX_Float((float)UNTAG_Int( variable[3] /*i*/));
+  variable[6] = BOX_Float(UNBOX_Float(variable[6])-UNBOX_Float(variable[7]));
+  variable[6] = BOX_Float(UNBOX_Float(variable[6])*UNBOX_Float( variable[4] /*dec*/));
+  variable[6] = TAG_Int((bigint)UNBOX_Float(variable[6]));
+  variable[5] = variable[6];
+  variable[6] = NEW_String_string___String___init(); /*new String*/
+  variable[7] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+  variable[8] = variable[7];
+  ((string___String___append_t)CALL(variable[6],COLOR_abstract_collection___IndexedCollection___append))(variable[6], variable[8]) /*String::append*/;
+  variable[9] =  variable[3] /*i*/;
+  variable[9] = ((string___String___to_s_t)CALL(variable[9],COLOR_string___Object___to_s))(variable[9]) /*String::to_s*/;
+  ((string___String___append_t)CALL(variable[6],COLOR_abstract_collection___IndexedCollection___append))(variable[6], variable[9]) /*String::append*/;
+  variable[10] = NEW_String_string___String___with_native(BOX_NativeString("."), TAG_Int(1)); /*new String*/
+  variable[11] = variable[10];
+  ((string___String___append_t)CALL(variable[6],COLOR_abstract_collection___IndexedCollection___append))(variable[6], variable[11]) /*String::append*/;
+  variable[12] =  variable[5] /*d*/;
+  variable[12] = ((string___String___to_s_t)CALL(variable[12],COLOR_string___Object___to_s))(variable[12]) /*String::to_s*/;
+  ((string___String___append_t)CALL(variable[6],COLOR_abstract_collection___IndexedCollection___append))(variable[6], variable[12]) /*String::append*/;
+  variable[13] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+  variable[14] = variable[13];
+  ((string___String___append_t)CALL(variable[6],COLOR_abstract_collection___IndexedCollection___append))(variable[6], variable[14]) /*String::append*/;
+  variable[2] = variable[6];
   goto return_label52;
   return_label52: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t string___Char___to_s(val_t  self) {
   struct trace_t trace = {NULL, NULL, 434, LOCATE_string___Char___to_s};
-  val_t variable0;
-  val_t variable1;
+  val_t variable[4];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable1 = NEW_String_string___String___with_capacity( TAG_Int(1)); /*new String*/
-  variable0 = variable1;
-  ((string___String_____braeq_t)CALL( variable0 /*s*/,COLOR_abstract_collection___Map_____braeq))( variable0 /*s*/,  TAG_Int(0),  self) /*String::[]=*/;
-  variable0 =  variable0 /*s*/;
+  variable[0] =  self;
+  variable[3] = NEW_String_string___String___with_capacity( TAG_Int(1)); /*new String*/
+  variable[2] = variable[3];
+  variable[3] = variable[0];
+  ((string___String_____braeq_t)CALL( variable[2] /*s*/,COLOR_abstract_collection___Map_____braeq))( variable[2] /*s*/,  TAG_Int(0), variable[3]) /*String::[]=*/;
+  variable[1] =  variable[2] /*s*/;
   goto return_label54;
   return_label54: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Collection___to_s(val_t  self) {
   struct trace_t trace = {NULL, NULL, 443, LOCATE_string___Collection___to_s};
-  val_t variable0;
-  val_t variable1;
-    val_t variable2;
-    val_t variable3;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable1 = NEW_String_string___String___init(); /*new String*/
-  variable0 = variable1;
-  variable1 = ((abstract_collection___Collection___iterator_t)CALL( self,COLOR_abstract_collection___Collection___iterator))( self) /*Collection::iterator*/;
+  variable[0] =  self;
+  variable[3] = NEW_String_string___String___init(); /*new String*/
+  variable[2] = variable[3];
+  variable[3] = variable[0];
+  variable[3] = ((abstract_collection___Collection___iterator_t)CALL(variable[3],COLOR_abstract_collection___Collection___iterator))(variable[3]) /*Collection::iterator*/;
   while (true) { /*for*/
-    variable2 = ((abstract_collection___Iterator___is_ok_t)CALL(variable1,COLOR_abstract_collection___Iterator___is_ok))(variable1) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable2)) break; /*for*/
-    variable2 = ((abstract_collection___Iterator___item_t)CALL(variable1,COLOR_abstract_collection___Iterator___item))(variable1) /*Iterator::item*/;
-    variable3 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable2 /*e*/ ==  NIT_NULL /*null*/) || (( variable2 /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable2 /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable2 /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable2 /*e*/,COLOR_kernel___Object_____eqeq))( variable2 /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable3)) { /*if*/
-      variable3 = ((string___Object___to_s_t)CALL( variable2 /*e*/,COLOR_string___Object___to_s))( variable2 /*e*/) /*Object::to_s*/;
-      ((string___String___append_t)CALL( variable0 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable0 /*s*/, variable3) /*String::append*/;
+    variable[4] = ((abstract_collection___Iterator___is_ok_t)CALL(variable[3],COLOR_abstract_collection___Iterator___is_ok))(variable[3]) /*Iterator::is_ok*/;
+    if (!UNTAG_Bool(variable[4])) break; /*for*/
+    variable[4] = ((abstract_collection___Iterator___item_t)CALL(variable[3],COLOR_abstract_collection___Iterator___item))(variable[3]) /*Iterator::item*/;
+    variable[5] = variable[4];
+    variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*e*/ ==  NIT_NULL /*null*/) || (( variable[5] /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*e*/,COLOR_kernel___Object_____eqeq))( variable[5] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+    if (UNTAG_Bool(variable[6])) { /*if*/
+      variable[6] = ((string___Object___to_s_t)CALL( variable[5] /*e*/,COLOR_string___Object___to_s))( variable[5] /*e*/) /*Object::to_s*/;
+      ((string___String___append_t)CALL( variable[2] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[2] /*s*/, variable[6]) /*String::append*/;
     }
     continue_56: while(0);
-    ((abstract_collection___Iterator___next_t)CALL(variable1,COLOR_abstract_collection___Iterator___next))(variable1) /*Iterator::next*/;
+    ((abstract_collection___Iterator___next_t)CALL(variable[3],COLOR_abstract_collection___Iterator___next))(variable[3]) /*Iterator::next*/;
   }
   break_56: while(0);
-  variable0 =  variable0 /*s*/;
+  variable[1] =  variable[2] /*s*/;
   goto return_label55;
   return_label55: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Collection___join(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 451, LOCATE_string___Collection___join};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-  val_t variable3;
-  val_t variable4;
+  val_t variable[7];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 = ((abstract_collection___Collection___is_empty_t)CALL( self,COLOR_abstract_collection___Collection___is_empty))( self) /*Collection::is_empty*/;
-  if (UNTAG_Bool(variable1)) { /*if*/
-    variable1 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[3] = variable[0];
+  variable[3] = ((abstract_collection___Collection___is_empty_t)CALL(variable[3],COLOR_abstract_collection___Collection___is_empty))(variable[3]) /*Collection::is_empty*/;
+  if (UNTAG_Bool(variable[3])) { /*if*/
+    variable[3] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[2] = variable[3];
     goto return_label57;
   }
-  variable2 = NEW_String_string___String___init(); /*new String*/
-  variable1 = variable2;
-  variable3 = ((abstract_collection___Collection___iterator_t)CALL( self,COLOR_abstract_collection___Collection___iterator))( self) /*Collection::iterator*/;
-  variable2 = variable3;
-  variable4 = ((abstract_collection___Iterator___item_t)CALL( variable2 /*i*/,COLOR_abstract_collection___Iterator___item))( variable2 /*i*/) /*Iterator::item*/;
-  variable3 = variable4;
-  variable4 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable3 /*e*/ ==  NIT_NULL /*null*/) || (( variable3 /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable3 /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable3 /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable3 /*e*/,COLOR_kernel___Object_____eqeq))( variable3 /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable4)) { /*if*/
-    variable4 = ((string___Object___to_s_t)CALL( variable3 /*e*/,COLOR_string___Object___to_s))( variable3 /*e*/) /*Object::to_s*/;
-    ((string___String___append_t)CALL( variable1 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable1 /*s*/, variable4) /*String::append*/;
+  variable[4] = NEW_String_string___String___init(); /*new String*/
+  variable[3] = variable[4];
+  variable[5] = variable[0];
+  variable[5] = ((abstract_collection___Collection___iterator_t)CALL(variable[5],COLOR_abstract_collection___Collection___iterator))(variable[5]) /*Collection::iterator*/;
+  variable[4] = variable[5];
+  variable[6] = ((abstract_collection___Iterator___item_t)CALL( variable[4] /*i*/,COLOR_abstract_collection___Iterator___item))( variable[4] /*i*/) /*Iterator::item*/;
+  variable[5] = variable[6];
+  variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*e*/ ==  NIT_NULL /*null*/) || (( variable[5] /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*e*/,COLOR_kernel___Object_____eqeq))( variable[5] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (UNTAG_Bool(variable[6])) { /*if*/
+    variable[6] = ((string___Object___to_s_t)CALL( variable[5] /*e*/,COLOR_string___Object___to_s))( variable[5] /*e*/) /*Object::to_s*/;
+    ((string___String___append_t)CALL( variable[3] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[3] /*s*/, variable[6]) /*String::append*/;
   }
-  ((abstract_collection___Iterator___next_t)CALL( variable2 /*i*/,COLOR_abstract_collection___Iterator___next))( variable2 /*i*/) /*Iterator::next*/;
+  ((abstract_collection___Iterator___next_t)CALL( variable[4] /*i*/,COLOR_abstract_collection___Iterator___next))( variable[4] /*i*/) /*Iterator::next*/;
   while (true) { /*while*/
-    variable4 = ((abstract_collection___Iterator___is_ok_t)CALL( variable2 /*i*/,COLOR_abstract_collection___Iterator___is_ok))( variable2 /*i*/) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable4)) break; /* while*/
-    ((string___String___append_t)CALL( variable1 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable1 /*s*/,  variable0 /*sep*/) /*String::append*/;
-    variable4 = ((abstract_collection___Iterator___item_t)CALL( variable2 /*i*/,COLOR_abstract_collection___Iterator___item))( variable2 /*i*/) /*Iterator::item*/;
-    variable3 = variable4 /*e=*/;
-    variable4 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable3 /*e*/ ==  NIT_NULL /*null*/) || (( variable3 /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable3 /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable3 /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable3 /*e*/,COLOR_kernel___Object_____eqeq))( variable3 /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable4)) { /*if*/
-      variable4 = ((string___Object___to_s_t)CALL( variable3 /*e*/,COLOR_string___Object___to_s))( variable3 /*e*/) /*Object::to_s*/;
-      ((string___String___append_t)CALL( variable1 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable1 /*s*/, variable4) /*String::append*/;
+    variable[6] = ((abstract_collection___Iterator___is_ok_t)CALL( variable[4] /*i*/,COLOR_abstract_collection___Iterator___is_ok))( variable[4] /*i*/) /*Iterator::is_ok*/;
+    if (!UNTAG_Bool(variable[6])) break; /* while*/
+    ((string___String___append_t)CALL( variable[3] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[3] /*s*/,  variable[1] /*sep*/) /*String::append*/;
+    variable[6] = ((abstract_collection___Iterator___item_t)CALL( variable[4] /*i*/,COLOR_abstract_collection___Iterator___item))( variable[4] /*i*/) /*Iterator::item*/;
+    variable[5] = variable[6] /*e=*/;
+    variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[5] /*e*/ ==  NIT_NULL /*null*/) || (( variable[5] /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[5] /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[5] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[5] /*e*/,COLOR_kernel___Object_____eqeq))( variable[5] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+    if (UNTAG_Bool(variable[6])) { /*if*/
+      variable[6] = ((string___Object___to_s_t)CALL( variable[5] /*e*/,COLOR_string___Object___to_s))( variable[5] /*e*/) /*Object::to_s*/;
+      ((string___String___append_t)CALL( variable[3] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[3] /*s*/, variable[6]) /*String::append*/;
     }
-    ((abstract_collection___Iterator___next_t)CALL( variable2 /*i*/,COLOR_abstract_collection___Iterator___next))( variable2 /*i*/) /*Iterator::next*/;
+    ((abstract_collection___Iterator___next_t)CALL( variable[4] /*i*/,COLOR_abstract_collection___Iterator___next))( variable[4] /*i*/) /*Iterator::next*/;
     continue_58: while(0);
   }
   break_58: while(0);
-  variable1 =  variable1 /*s*/;
+  variable[2] =  variable[3] /*s*/;
   goto return_label57;
   return_label57: while(false);
   tracehead = trace.prev;
-  return variable1;
+  return variable[2];
 }
 val_t string___Map___map_join(val_t  self, val_t  param0, val_t  param1) {
   struct trace_t trace = {NULL, NULL, 476, LOCATE_string___Map___map_join};
-  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;
-    val_t variable15;
-    val_t variable16;
-    val_t variable17;
+  val_t variable[20];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  param0;
-  variable1 =  param1;
-  variable2 = ((abstract_collection___Collection___is_empty_t)CALL( self,COLOR_abstract_collection___Collection___is_empty))( self) /*Collection::is_empty*/;
-  if (UNTAG_Bool(variable2)) { /*if*/
-    variable2 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+  variable[0] =  self;
+  variable[1] =  param0;
+  variable[2] =  param1;
+  variable[4] = variable[0];
+  variable[4] = ((abstract_collection___Collection___is_empty_t)CALL(variable[4],COLOR_abstract_collection___Collection___is_empty))(variable[4]) /*Collection::is_empty*/;
+  if (UNTAG_Bool(variable[4])) { /*if*/
+    variable[4] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[3] = variable[4];
     goto return_label59;
   }
-  variable3 = NEW_String_string___String___init(); /*new String*/
-  variable2 = variable3;
-  variable4 = ((abstract_collection___Map___iterator_t)CALL( self,COLOR_abstract_collection___Collection___iterator))( self) /*Map::iterator*/;
-  variable3 = variable4;
-  variable5 = ((abstract_collection___MapIterator___key_t)CALL( variable3 /*i*/,COLOR_abstract_collection___MapIterator___key))( variable3 /*i*/) /*MapIterator::key*/;
-  variable4 = variable5;
-  variable6 = ((abstract_collection___Iterator___item_t)CALL( variable3 /*i*/,COLOR_abstract_collection___Iterator___item))( variable3 /*i*/) /*Iterator::item*/;
-  variable5 = variable6;
-  variable6 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable5 /*e*/ ==  NIT_NULL /*null*/) || (( variable5 /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable5 /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable5 /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable5 /*e*/,COLOR_kernel___Object_____eqeq))( variable5 /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-  if (UNTAG_Bool(variable6)) { /*if*/
-    variable6 = NEW_String_string___String___init(); /*new String*/
-    variable7 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable8 = variable7;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable8) /*String::append*/;
-    variable9 =  variable4 /*k*/;
-    variable9 = ((string___String___to_s_t)CALL(variable9,COLOR_string___Object___to_s))(variable9) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable9) /*String::append*/;
-    variable10 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable11 = variable10;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable11) /*String::append*/;
-    variable12 =  variable1 /*couple_sep*/;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable12) /*String::append*/;
-    variable13 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable14 = variable13;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable14) /*String::append*/;
-    variable15 =  variable5 /*e*/;
-    variable15 = ((string___String___to_s_t)CALL(variable15,COLOR_string___Object___to_s))(variable15) /*String::to_s*/;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable15) /*String::append*/;
-    variable16 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-    variable17 = variable16;
-    ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable17) /*String::append*/;
-    ((string___String___append_t)CALL( variable2 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable2 /*s*/, variable6) /*String::append*/;
+  variable[5] = NEW_String_string___String___init(); /*new String*/
+  variable[4] = variable[5];
+  variable[6] = variable[0];
+  variable[6] = ((abstract_collection___Map___iterator_t)CALL(variable[6],COLOR_abstract_collection___Collection___iterator))(variable[6]) /*Map::iterator*/;
+  variable[5] = variable[6];
+  variable[7] = ((abstract_collection___MapIterator___key_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___MapIterator___key))( variable[5] /*i*/) /*MapIterator::key*/;
+  variable[6] = variable[7];
+  variable[8] = ((abstract_collection___Iterator___item_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___Iterator___item))( variable[5] /*i*/) /*Iterator::item*/;
+  variable[7] = variable[8];
+  variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[7] /*e*/ ==  NIT_NULL /*null*/) || (( variable[7] /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[7] /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[7] /*e*/,COLOR_kernel___Object_____eqeq))( variable[7] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+  if (UNTAG_Bool(variable[8])) { /*if*/
+    variable[8] = NEW_String_string___String___init(); /*new String*/
+    variable[9] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[10] = variable[9];
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[10]) /*String::append*/;
+    variable[11] =  variable[6] /*k*/;
+    variable[11] = ((string___String___to_s_t)CALL(variable[11],COLOR_string___Object___to_s))(variable[11]) /*String::to_s*/;
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[11]) /*String::append*/;
+    variable[12] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[13] = variable[12];
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[13]) /*String::append*/;
+    variable[14] =  variable[2] /*couple_sep*/;
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[14]) /*String::append*/;
+    variable[15] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[16] = variable[15];
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[16]) /*String::append*/;
+    variable[17] =  variable[7] /*e*/;
+    variable[17] = ((string___String___to_s_t)CALL(variable[17],COLOR_string___Object___to_s))(variable[17]) /*String::to_s*/;
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[17]) /*String::append*/;
+    variable[18] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+    variable[19] = variable[18];
+    ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[19]) /*String::append*/;
+    ((string___String___append_t)CALL( variable[4] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[4] /*s*/, variable[8]) /*String::append*/;
   }
-  ((abstract_collection___Iterator___next_t)CALL( variable3 /*i*/,COLOR_abstract_collection___Iterator___next))( variable3 /*i*/) /*Iterator::next*/;
+  ((abstract_collection___Iterator___next_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___Iterator___next))( variable[5] /*i*/) /*Iterator::next*/;
   while (true) { /*while*/
-    variable6 = ((abstract_collection___Iterator___is_ok_t)CALL( variable3 /*i*/,COLOR_abstract_collection___Iterator___is_ok))( variable3 /*i*/) /*Iterator::is_ok*/;
-    if (!UNTAG_Bool(variable6)) break; /* while*/
-    ((string___String___append_t)CALL( variable2 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable2 /*s*/,  variable0 /*sep*/) /*String::append*/;
-    variable6 = ((abstract_collection___MapIterator___key_t)CALL( variable3 /*i*/,COLOR_abstract_collection___MapIterator___key))( variable3 /*i*/) /*MapIterator::key*/;
-    variable4 = variable6 /*k=*/;
-    variable6 = ((abstract_collection___Iterator___item_t)CALL( variable3 /*i*/,COLOR_abstract_collection___Iterator___item))( variable3 /*i*/) /*Iterator::item*/;
-    variable5 = variable6 /*e=*/;
-    variable6 = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable5 /*e*/ ==  NIT_NULL /*null*/) || (( variable5 /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable5 /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable5 /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable5 /*e*/,COLOR_kernel___Object_____eqeq))( variable5 /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
-    if (UNTAG_Bool(variable6)) { /*if*/
-      variable6 = NEW_String_string___String___init(); /*new String*/
-      variable7 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable8 = variable7;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable8) /*String::append*/;
-      variable9 =  variable4 /*k*/;
-      variable9 = ((string___String___to_s_t)CALL(variable9,COLOR_string___Object___to_s))(variable9) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable9) /*String::append*/;
-      variable10 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable11 = variable10;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable11) /*String::append*/;
-      variable12 =  variable1 /*couple_sep*/;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable12) /*String::append*/;
-      variable13 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable14 = variable13;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable14) /*String::append*/;
-      variable15 =  variable5 /*e*/;
-      variable15 = ((string___String___to_s_t)CALL(variable15,COLOR_string___Object___to_s))(variable15) /*String::to_s*/;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable15) /*String::append*/;
-      variable16 = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
-      variable17 = variable16;
-      ((string___String___append_t)CALL(variable6,COLOR_abstract_collection___IndexedCollection___append))(variable6, variable17) /*String::append*/;
-      ((string___String___append_t)CALL( variable2 /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable2 /*s*/, variable6) /*String::append*/;
+    variable[8] = ((abstract_collection___Iterator___is_ok_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___Iterator___is_ok))( variable[5] /*i*/) /*Iterator::is_ok*/;
+    if (!UNTAG_Bool(variable[8])) break; /* while*/
+    ((string___String___append_t)CALL( variable[4] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[4] /*s*/,  variable[1] /*sep*/) /*String::append*/;
+    variable[8] = ((abstract_collection___MapIterator___key_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___MapIterator___key))( variable[5] /*i*/) /*MapIterator::key*/;
+    variable[6] = variable[8] /*k=*/;
+    variable[8] = ((abstract_collection___Iterator___item_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___Iterator___item))( variable[5] /*i*/) /*Iterator::item*/;
+    variable[7] = variable[8] /*e=*/;
+    variable[8] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[7] /*e*/ ==  NIT_NULL /*null*/) || (( variable[7] /*e*/ != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL( variable[7] /*e*/,COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[7] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL( variable[7] /*e*/,COLOR_kernel___Object_____eqeq))( variable[7] /*e*/,  NIT_NULL /*null*/) /*Object::==*/)))))));
+    if (UNTAG_Bool(variable[8])) { /*if*/
+      variable[8] = NEW_String_string___String___init(); /*new String*/
+      variable[9] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+      variable[10] = variable[9];
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[10]) /*String::append*/;
+      variable[11] =  variable[6] /*k*/;
+      variable[11] = ((string___String___to_s_t)CALL(variable[11],COLOR_string___Object___to_s))(variable[11]) /*String::to_s*/;
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[11]) /*String::append*/;
+      variable[12] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+      variable[13] = variable[12];
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[13]) /*String::append*/;
+      variable[14] =  variable[2] /*couple_sep*/;
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[14]) /*String::append*/;
+      variable[15] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+      variable[16] = variable[15];
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[16]) /*String::append*/;
+      variable[17] =  variable[7] /*e*/;
+      variable[17] = ((string___String___to_s_t)CALL(variable[17],COLOR_string___Object___to_s))(variable[17]) /*String::to_s*/;
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[17]) /*String::append*/;
+      variable[18] = NEW_String_string___String___with_native(BOX_NativeString(""), TAG_Int(0)); /*new String*/
+      variable[19] = variable[18];
+      ((string___String___append_t)CALL(variable[8],COLOR_abstract_collection___IndexedCollection___append))(variable[8], variable[19]) /*String::append*/;
+      ((string___String___append_t)CALL( variable[4] /*s*/,COLOR_abstract_collection___IndexedCollection___append))( variable[4] /*s*/, variable[8]) /*String::append*/;
     }
-    ((abstract_collection___Iterator___next_t)CALL( variable3 /*i*/,COLOR_abstract_collection___Iterator___next))( variable3 /*i*/) /*Iterator::next*/;
+    ((abstract_collection___Iterator___next_t)CALL( variable[5] /*i*/,COLOR_abstract_collection___Iterator___next))( variable[5] /*i*/) /*Iterator::next*/;
     continue_60: while(0);
   }
   break_60: while(0);
-  variable2 =  variable2 /*s*/;
+  variable[3] =  variable[4] /*s*/;
   goto return_label59;
   return_label59: while(false);
   tracehead = trace.prev;
-  return variable2;
+  return variable[3];
 }
 val_t string___NativeString_____bra(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 508, LOCATE_string___NativeString_____bra};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -1248,6 +1353,8 @@ val_t string___NativeString_____bra(val_t  self, val_t  param0) {
 }
 void string___NativeString_____braeq(val_t  self, val_t  param0, val_t  param1) {
   struct trace_t trace = {NULL, NULL, 509, LOCATE_string___NativeString_____braeq};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   UNBOX_NativeString( self)[UNTAG_Int( param0)]=UNTAG_Char( param1);
@@ -1256,6 +1363,8 @@ void string___NativeString_____braeq(val_t  self, val_t  param0, val_t  param1)
 }
 void string___NativeString___copy_to(val_t  self, val_t  param0, val_t  param1, val_t  param2, val_t  param3) {
   struct trace_t trace = {NULL, NULL, 510, LOCATE_string___NativeString___copy_to};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   (void)memcpy(UNBOX_NativeString( param0)+UNTAG_Int( param3), UNBOX_NativeString( self)+UNTAG_Int( param2), UNTAG_Int( param1));
@@ -1264,27 +1373,31 @@ void string___NativeString___copy_to(val_t  self, val_t  param0, val_t  param1,
 }
 val_t string___NativeString___cstring_length(val_t  self) {
   struct trace_t trace = {NULL, NULL, 512, LOCATE_string___NativeString___cstring_length};
-  val_t variable0;
-    val_t variable1;
+  val_t variable[4];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 =  TAG_Int(0);
+  variable[0] =  self;
+  variable[2] =  TAG_Int(0);
   while (true) { /*while*/
-    variable1 = TAG_Char(UNBOX_NativeString( self)[UNTAG_Int( variable0 /*l*/)]);
-    variable1 = TAG_Bool((variable1)!=( TAG_Char('\0')));
-    if (!UNTAG_Bool(variable1)) break; /* while*/
-    variable0 = TAG_Int(UNTAG_Int(variable0)+UNTAG_Int( TAG_Int(1))) /*l*/;
+    variable[3] = variable[0];
+    variable[3] = TAG_Char(UNBOX_NativeString(variable[3])[UNTAG_Int( variable[2] /*l*/)]);
+    variable[3] = TAG_Bool((variable[3])!=( TAG_Char('\0')));
+    if (!UNTAG_Bool(variable[3])) break; /* while*/
+    variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int( TAG_Int(1))) /*l*/;
     continue_62: while(0);
   }
   break_62: while(0);
-  variable0 =  variable0 /*l*/;
+  variable[1] =  variable[2] /*l*/;
   goto return_label61;
   return_label61: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___NativeString___atoi(val_t  self) {
   struct trace_t trace = {NULL, NULL, 519, LOCATE_string___NativeString___atoi};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -1292,6 +1405,8 @@ val_t string___NativeString___atoi(val_t  self) {
 }
 void string___NativeString___init(val_t  self, int* init_table) {
   struct trace_t trace = {NULL, NULL, 0, LOCATE_string___NativeString___init};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -1299,6 +1414,8 @@ void string___NativeString___init(val_t  self, int* init_table) {
 }
 val_t string___StringCapable___calloc_string(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 524, LOCATE_string___StringCapable___calloc_string};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -1306,6 +1423,8 @@ val_t string___StringCapable___calloc_string(val_t  self, val_t  param0) {
 }
 void string___StringCapable___init(val_t  self, int* init_table) {
   struct trace_t trace = {NULL, NULL, 0, LOCATE_string___StringCapable___init};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -1313,67 +1432,79 @@ void string___StringCapable___init(val_t  self, int* init_table) {
 }
 val_t string___Sys___args(val_t  self) {
   struct trace_t trace = {NULL, NULL, 530, LOCATE_string___Sys___args};
-  val_t variable0;
+  val_t variable[3];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ATTR_string___Sys____args_cache( self) /*Sys::_args_cache*/;
-  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*/) /*Object::==*/)))));
-  if (UNTAG_Bool(variable0)) { /*if*/
-    ((string___Sys___init_args_t)CALL( self,COLOR_string___Sys___init_args))( self) /*Sys::init_args*/;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ATTR_string___Sys____args_cache(variable[2]) /*Sys::_args_cache*/;
+  variable[2] = TAG_Bool((variable[2] ==  NIT_NULL /*null*/) || ((variable[2] != NIT_NULL) && ((((kernel___Object_____eqeq_t)CALL(variable[2],COLOR_kernel___Object_____eqeq))==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[2], NIT_NULL /*null*/)):(UNTAG_Bool(((kernel___Object_____eqeq_t)CALL(variable[2],COLOR_kernel___Object_____eqeq))(variable[2],  NIT_NULL /*null*/) /*Object::==*/)))));
+  if (UNTAG_Bool(variable[2])) { /*if*/
+    variable[2] = variable[0];
+    ((string___Sys___init_args_t)CALL(variable[2],COLOR_string___Sys___init_args))(variable[2]) /*Sys::init_args*/;
   }
-  variable0 = ATTR_string___Sys____args_cache( self) /*Sys::_args_cache*/;
+  variable[2] = variable[0];
+  variable[2] = ATTR_string___Sys____args_cache(variable[2]) /*Sys::_args_cache*/;
+  variable[1] = variable[2];
   goto return_label63;
   return_label63: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 val_t string___Sys___program_name(val_t  self) {
   struct trace_t trace = {NULL, NULL, 536, LOCATE_string___Sys___program_name};
-  val_t variable0;
-  val_t variable1;
+  val_t variable[4];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable0 = ((string___Sys___native_argv_t)CALL( self,COLOR_string___Sys___native_argv))( self,  TAG_Int(0)) /*Sys::native_argv*/;
-  variable1 = NEW_String_string___String___from_cstring(variable0); /*new String*/
-  variable0 = variable1;
+  variable[0] =  self;
+  variable[2] = variable[0];
+  variable[2] = ((string___Sys___native_argv_t)CALL(variable[2],COLOR_string___Sys___native_argv))(variable[2],  TAG_Int(0)) /*Sys::native_argv*/;
+  variable[3] = NEW_String_string___String___from_cstring(variable[2]); /*new String*/
+  variable[2] = variable[3];
+  variable[1] = variable[2];
   goto return_label64;
   return_label64: while(false);
   tracehead = trace.prev;
-  return variable0;
+  return variable[1];
 }
 void string___Sys___init_args(val_t  self) {
   struct trace_t trace = {NULL, NULL, 542, LOCATE_string___Sys___init_args};
-  val_t variable0;
-  val_t variable1;
-  val_t variable2;
-    val_t variable3;
-    val_t variable4;
-    val_t variable5;
+  val_t variable[8];
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
-  variable1 = ((string___Sys___native_argc_t)CALL( self,COLOR_string___Sys___native_argc))( self) /*Sys::native_argc*/;
-  variable0 = variable1;
-  variable2 = NEW_Array_array___Array___with_capacity( TAG_Int(0)); /*new Array[String]*/
-  variable1 = variable2;
-  variable2 =  TAG_Int(1);
+  variable[0] =  self;
+  variable[3] = variable[0];
+  variable[3] = ((string___Sys___native_argc_t)CALL(variable[3],COLOR_string___Sys___native_argc))(variable[3]) /*Sys::native_argc*/;
+  variable[2] = variable[3];
+  variable[4] = NEW_Array_array___Array___with_capacity( TAG_Int(0)); /*new Array[String]*/
+  variable[3] = variable[4];
+  variable[4] =  TAG_Int(1);
   while (true) { /*while*/
-    variable3 = TAG_Bool(UNTAG_Int( variable2 /*i*/)<UNTAG_Int( variable0 /*argc*/));
-    if (!UNTAG_Bool(variable3)) break; /* while*/
-    variable3 = TAG_Int(UNTAG_Int( variable2 /*i*/)-UNTAG_Int( TAG_Int(1)));
-    variable4 = ((string___Sys___native_argv_t)CALL( self,COLOR_string___Sys___native_argv))( self,  variable2 /*i*/) /*Sys::native_argv*/;
-    variable5 = NEW_String_string___String___from_cstring(variable4); /*new String*/
-    variable4 = variable5;
-    ((array___Array_____braeq_t)CALL( variable1 /*args*/,COLOR_abstract_collection___Map_____braeq))( variable1 /*args*/, variable3, variable4) /*Array::[]=*/;
-    variable2 = TAG_Int(UNTAG_Int(variable2)+UNTAG_Int( TAG_Int(1))) /*i*/;
+    variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[2] /*argc*/));
+    if (!UNTAG_Bool(variable[5])) break; /* while*/
+    variable[5] = TAG_Int(UNTAG_Int( variable[4] /*i*/)-UNTAG_Int( TAG_Int(1)));
+    variable[6] = variable[0];
+    variable[6] = ((string___Sys___native_argv_t)CALL(variable[6],COLOR_string___Sys___native_argv))(variable[6],  variable[4] /*i*/) /*Sys::native_argv*/;
+    variable[7] = NEW_String_string___String___from_cstring(variable[6]); /*new String*/
+    variable[6] = variable[7];
+    ((array___Array_____braeq_t)CALL( variable[3] /*args*/,COLOR_abstract_collection___Map_____braeq))( variable[3] /*args*/, variable[5], variable[6]) /*Array::[]=*/;
+    variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
     continue_66: while(0);
   }
   break_66: while(0);
-  ATTR_string___Sys____args_cache( self) /*Sys::_args_cache*/ =  variable1 /*args*/;
+  variable[5] = variable[0];
+  ATTR_string___Sys____args_cache(variable[5]) /*Sys::_args_cache*/ =  variable[3] /*args*/;
+  return_label65: while(false);
   tracehead = trace.prev;
   return;
 }
 val_t string___Sys___native_argc(val_t  self) {
   struct trace_t trace = {NULL, NULL, 555, LOCATE_string___Sys___native_argc};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;
@@ -1381,6 +1512,8 @@ val_t string___Sys___native_argc(val_t  self) {
 }
 val_t string___Sys___native_argv(val_t  self, val_t  param0) {
   struct trace_t trace = {NULL, NULL, 557, LOCATE_string___Sys___native_argv};
+  val_t *variable = NULL;
+  void **closurevariable = NULL;
   trace.prev = tracehead; tracehead = &trace;
   trace.file = LOCATE_string;
   tracehead = trace.prev;