gc: add 'help' option to list all available GC
[nit.git] / c_src / kernel._sep.c
index 5035671..6d6ddbb 100644 (file)
 /* This C file is generated by NIT to compile module kernel. */
 #include "kernel._sep.h"
-val_t kernel___Object___object_id(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 26, LOCATE_kernel___Object___object_id};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int((bigint) self);
-}
-val_t kernel___Object___is_same_type(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 29, LOCATE_kernel___Object___is_same_type};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool((VAL2VFT( self)==VAL2VFT( param0)));
-}
-val_t kernel___Object_____eqeq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 32, LOCATE_kernel___Object_____eqeq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = TAG_Bool(IS_EQUAL_NN(variable[3], variable[1] /*other*/));
-  variable[2] = variable[3];
-  goto return_label0;
-  return_label0: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Object_____neq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 37, LOCATE_kernel___Object_____neq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = TAG_Bool((variable[3] ==  variable[1] /*other*/) || ((variable[3] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[3])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[3], variable[1] /*other*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[3])(variable[3],  variable[1] /*other*/) /*Object::==*/)))));
-  variable[2] =  TAG_Bool(!UNTAG_Bool(variable[3]));
-  goto return_label1;
-  return_label1: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-void kernel___Object___output(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 42, LOCATE_kernel___Object___output};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  printf("%c", (unsigned char)UNTAG_Char( TAG_Char('<')));
-  variable[2] = variable[0];
-  variable[2] = TAG_Int((bigint)variable[2]);
-  printf("%ld\n", UNTAG_Int(variable[2]));
-  printf("%c", (unsigned char)UNTAG_Char( TAG_Char('>')));
-  return_label2: while(false);
-  tracehead = trace.prev;
+val_t kernel___Object___object_id(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 26;
+  fra.me.meth = LOCATE_kernel___Object___object_id;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Int((bigint)((obj_t)fra.me.REG[0])[1].object_id);
+  /* ./../lib/standard//kernel.nit:26 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Object___is_same_type(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 29;
+  fra.me.meth = LOCATE_kernel___Object___is_same_type;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool((VAL2VFT(fra.me.REG[0])==VAL2VFT(fra.me.REG[1])));
+  /* ./../lib/standard//kernel.nit:29 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Object_____eqeq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 32;
+  fra.me.meth = LOCATE_kernel___Object_____eqeq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[0],fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:35 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Object_____neq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 37;
+  fra.me.meth = LOCATE_kernel___Object_____neq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[0],fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:40 */
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+    REGB0 = REGB1;
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+void kernel___Object___output(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 42;
+  fra.me.meth = LOCATE_kernel___Object___output;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Char('<');
+  /* ./../lib/standard//kernel.nit:327 */
+  printf("%c", (unsigned char)UNTAG_Char(REGB0));;
+  REGB0 = CALL_kernel___Object___object_id(fra.me.REG[0])(fra.me.REG[0]);
+  /* ./../lib/standard//kernel.nit:209 */
+  printf("%ld\n", UNTAG_Int(REGB0));;
+  REGB0 = TAG_Char('>');
+  /* ./../lib/standard//kernel.nit:327 */
+  printf("%c", (unsigned char)UNTAG_Char(REGB0));;
+  stack_frame_head = fra.me.prev;
   return;
 }
-void kernel___Object___exit(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 50, LOCATE_kernel___Object___exit};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  exit(UNTAG_Int( param0));
-  tracehead = trace.prev;
+void kernel___Object___exit(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 50;
+  fra.me.meth = LOCATE_kernel___Object___exit;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p1;
+  /* ./../lib/standard//kernel.nit:50 */
+  exit(UNTAG_Int(REGB0));;
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t kernel___Object___sys(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 51, LOCATE_kernel___Object___sys};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return (G_sys);
-}
-void kernel___Sys___main(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 56, LOCATE_kernel___Sys___main};
-  val_t variable[2];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  return_label3: while(false);
-  tracehead = trace.prev;
+val_t kernel___Object___sys(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 51;
+  fra.me.meth = LOCATE_kernel___Object___sys;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[0] = (G_sys);
+  /* ./../lib/standard//kernel.nit:51 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+void kernel___Sys___main(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 56;
+  fra.me.meth = LOCATE_kernel___Sys___main;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./../lib/standard//kernel.nit:56 */
+  stack_frame_head = fra.me.prev;
   return;
 }
-void kernel___Sys___init(val_t  self, int* init_table) {
-  struct trace_t trace = {NULL, NULL, 0, LOCATE_kernel___Sys___init};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
+void kernel___Sys___init(val_t p0, int* init_table){
+  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Sys].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos0]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 0;
+  fra.me.meth = LOCATE_kernel___Sys___init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  stack_frame_head = fra.me.prev;
+  init_table[itpos0] = 1;
   return;
 }
-val_t kernel___Comparable_____l(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 69, LOCATE_kernel___Comparable_____l};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
+val_t kernel___Comparable_____l(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 69;
+  fra.me.meth = LOCATE_kernel___Comparable_____l;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./../lib/standard//kernel.nit:69 */
   fprintf(stderr, "Deferred method called");
   fprintf(stderr, " (%s:%d)\n", LOCATE_kernel, 69);
   nit_exit(1);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-val_t kernel___Comparable_____leq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 72, LOCATE_kernel___Comparable_____leq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_kernel___Comparable_____l( variable[1] /*other*/)( variable[1] /*other*/, variable[3]) /*Comparable::<*/;
-  variable[2] =  TAG_Bool(!UNTAG_Bool(variable[3]));
-  goto return_label4;
-  return_label4: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Comparable_____geq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 75, LOCATE_kernel___Comparable_____geq};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_kernel___Comparable_____l(variable[3])(variable[3],  variable[1] /*other*/) /*Comparable::<*/;
-  variable[2] =  TAG_Bool(!UNTAG_Bool(variable[3]));
-  goto return_label5;
-  return_label5: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Comparable_____g(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 78, LOCATE_kernel___Comparable_____g};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_kernel___Comparable_____l( variable[1] /*other*/)( variable[1] /*other*/, variable[3]) /*Comparable::<*/;
-  variable[2] = variable[3];
-  goto return_label6;
-  return_label6: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Comparable_____leqg(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 81, LOCATE_kernel___Comparable_____leqg};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_kernel___Comparable_____l(variable[3])(variable[3],  variable[1] /*other*/) /*Comparable::<*/;
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-    variable[2] = variable[3];
-    goto return_label7;
-  } else { /*if*/
-    variable[3] = variable[0];
-    variable[3] = CALL_kernel___Comparable_____l( variable[1] /*other*/)( variable[1] /*other*/, variable[3]) /*Comparable::<*/;
-    if (UNTAG_Bool(variable[3])) { /*if*/
-      variable[2] =  TAG_Int(1);
-      goto return_label7;
-    } else { /*if*/
-      variable[2] =  TAG_Int(0);
-      goto return_label7;
+val_t kernel___Comparable_____leq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 72;
+  fra.me.meth = LOCATE_kernel___Comparable_____leq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./../lib/standard//kernel.nit:73 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Comparable_____geq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 75;
+  fra.me.meth = LOCATE_kernel___Comparable_____geq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* ./../lib/standard//kernel.nit:76 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Comparable_____g(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 78;
+  fra.me.meth = LOCATE_kernel___Comparable_____g;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./../lib/standard//kernel.nit:79 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Comparable_____leqg(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 81;
+  fra.me.meth = LOCATE_kernel___Comparable_____leqg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  /* ./../lib/standard//kernel.nit:84 */
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = TAG_Int(1);
+    REGB0 = TAG_Int(-UNTAG_Int(REGB0));
+    /* ./../lib/standard//kernel.nit:85 */
+    goto label1;
+  } else {
+    REGB1 = CALL_kernel___Comparable_____l(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./../lib/standard//kernel.nit:86 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Int(1);
+      REGB0 = REGB1;
+      /* ./../lib/standard//kernel.nit:87 */
+      goto label1;
+    } else {
+      REGB1 = TAG_Int(0);
+      REGB0 = REGB1;
+      /* ./../lib/standard//kernel.nit:89 */
+      goto label1;
     }
   }
-  return_label7: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Comparable___is_between(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 93, LOCATE_kernel___Comparable___is_between};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = variable[0];
-  variable[4] = CALL_kernel___Comparable_____leq( variable[1] /*c*/)( variable[1] /*c*/, variable[4]) /*Comparable::<=*/;
-  variable[5] = variable[4];
-  if (UNTAG_Bool(variable[5])) { /* and */
-    variable[5] = variable[0];
-    variable[5] = CALL_kernel___Comparable_____leq(variable[5])(variable[5],  variable[2] /*d*/) /*Comparable::<=*/;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Comparable___is_between(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 93;
+  fra.me.meth = LOCATE_kernel___Comparable___is_between;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  REGB0 = CALL_kernel___Comparable_____leq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./../lib/standard//kernel.nit:96 */
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = CALL_kernel___Comparable_____leq(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[2]);
+  } else {
+    REGB1 = TAG_Bool(false);
+    REGB0 = REGB1;
   }
-  variable[4] = variable[5];
-  variable[3] = variable[4];
-  goto return_label8;
-  return_label8: while(false);
-  tracehead = trace.prev;
-  return variable[3];
-}
-val_t kernel___Comparable___max(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 99, LOCATE_kernel___Comparable___max};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_kernel___Comparable_____l(variable[3])(variable[3],  variable[1] /*other*/) /*Comparable::<*/;
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[2] =  variable[1] /*other*/;
-    goto return_label9;
-  } else { /*if*/
-    variable[3] = variable[0];
-    variable[2] = variable[3];
-    goto return_label9;
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Comparable___max(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 99;
+  fra.me.meth = LOCATE_kernel___Comparable___max;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  /* ./../lib/standard//kernel.nit:102 */
+  if (UNTAG_Bool(REGB0)) {
+    /* ./../lib/standard//kernel.nit:103 */
+    goto label1;
+  } else {
+    fra.me.REG[1] = fra.me.REG[0];
+    /* ./../lib/standard//kernel.nit:105 */
+    goto label1;
   }
-  return_label9: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Comparable___min(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 109, LOCATE_kernel___Comparable___min};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = CALL_kernel___Comparable_____l( variable[1] /*c*/)( variable[1] /*c*/, variable[3]) /*Comparable::<*/;
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[2] =  variable[1] /*c*/;
-    goto return_label10;
-  } else { /*if*/
-    variable[3] = variable[0];
-    variable[2] = variable[3];
-    goto return_label10;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+val_t kernel___Comparable___min(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 109;
+  fra.me.meth = LOCATE_kernel___Comparable___min;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./../lib/standard//kernel.nit:112 */
+  if (UNTAG_Bool(REGB0)) {
+    /* ./../lib/standard//kernel.nit:113 */
+    goto label1;
+  } else {
+    fra.me.REG[1] = fra.me.REG[0];
+    /* ./../lib/standard//kernel.nit:115 */
+    goto label1;
   }
-  return_label10: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Discrete___succ(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 126, LOCATE_kernel___Discrete___succ};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = CALL_kernel___Discrete_____plus(variable[2])(variable[2],  TAG_Int(1)) /*Discrete::+*/;
-  variable[1] = variable[2];
-  goto return_label11;
-  return_label11: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t kernel___Discrete___prec(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 129, LOCATE_kernel___Discrete___prec};
-  val_t variable[3];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = CALL_kernel___Discrete_____minus(variable[2])(variable[2],  TAG_Int(1)) /*Discrete::-*/;
-  variable[1] = variable[2];
-  goto return_label12;
-  return_label12: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t kernel___Discrete_____plus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 132, LOCATE_kernel___Discrete_____plus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+val_t kernel___Discrete___succ(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 126;
+  fra.me.meth = LOCATE_kernel___Discrete___succ;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Int(1);
+  fra.me.REG[0] = CALL_kernel___Discrete_____plus(fra.me.REG[0])(fra.me.REG[0], REGB0);
+  /* ./../lib/standard//kernel.nit:127 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+val_t kernel___Discrete___prec(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 129;
+  fra.me.meth = LOCATE_kernel___Discrete___prec;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Int(1);
+  fra.me.REG[0] = CALL_kernel___Discrete_____minus(fra.me.REG[0])(fra.me.REG[0], REGB0);
+  /* ./../lib/standard//kernel.nit:130 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+val_t kernel___Discrete_____plus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 132;
+  fra.me.meth = LOCATE_kernel___Discrete_____plus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./../lib/standard//kernel.nit:132 */
   fprintf(stderr, "Deferred method called");
   fprintf(stderr, " (%s:%d)\n", LOCATE_kernel, 132);
   nit_exit(1);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-val_t kernel___Discrete_____minus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 135, LOCATE_kernel___Discrete_____minus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
+val_t kernel___Discrete_____minus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 135;
+  fra.me.meth = LOCATE_kernel___Discrete_____minus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  /* ./../lib/standard//kernel.nit:135 */
   fprintf(stderr, "Deferred method called");
   fprintf(stderr, " (%s:%d)\n", LOCATE_kernel, 135);
   nit_exit(1);
-  tracehead = trace.prev;
+  stack_frame_head = fra.me.prev;
   return NIT_NULL;
 }
-val_t kernel___Discrete___distance(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 138, LOCATE_kernel___Discrete___distance};
-  val_t variable[7];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  /*variable[3] is variable cursor*/
-  /*variable[4] is variable stop*/
-  variable[5] = variable[0];
-  variable[5] = CALL_kernel___Comparable_____l(variable[5])(variable[5],  variable[1] /*d*/) /*Comparable::<*/;
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[5] = variable[0];
-    variable[3] = variable[5] /*cursor=*/;
-    variable[4] =  variable[1] /*d*/ /*stop=*/;
-  } else { /*if*/
-    variable[5] = variable[0];
-    variable[5] = CALL_kernel___Comparable_____g(variable[5])(variable[5],  variable[1] /*d*/) /*Comparable::>*/;
-    if (UNTAG_Bool(variable[5])) { /*if*/
-      variable[3] =  variable[1] /*d*/ /*cursor=*/;
-      variable[5] = variable[0];
-      variable[4] = variable[5] /*stop=*/;
-    } else { /*if*/
-      variable[2] =  TAG_Int(0);
-      goto return_label13;
+val_t kernel___Discrete___distance(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 138;
+  fra.me.meth = LOCATE_kernel___Discrete___distance;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = CALL_kernel___Comparable_____l(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  /* ./../lib/standard//kernel.nit:145 */
+  if (UNTAG_Bool(REGB0)) {
+    fra.me.REG[2] = fra.me.REG[0];
+    fra.me.REG[3] = fra.me.REG[1];
+  /* ./../lib/standard//kernel.nit:147 */
+  } else {
+    REGB0 = CALL_kernel___Comparable_____g(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+    /* ./../lib/standard//kernel.nit:148 */
+    if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[2] = fra.me.REG[1];
+      fra.me.REG[3] = fra.me.REG[0];
+    /* ./../lib/standard//kernel.nit:150 */
+    } else {
+      REGB0 = TAG_Int(0);
+      /* ./../lib/standard//kernel.nit:152 */
+      goto label1;
     }
   }
-  variable[5] =  TAG_Int(0);
-  while (true) { /*while*/
-    variable[6] = CALL_kernel___Comparable_____l( variable[3] /*cursor*/)( variable[3] /*cursor*/,  variable[4] /*stop*/) /*Comparable::<*/;
-    if (!UNTAG_Bool(variable[6])) break; /* while*/
-    variable[6] = CALL_kernel___Discrete___succ( variable[3] /*cursor*/)( variable[3] /*cursor*/) /*Discrete::succ*/;
-    variable[3] = variable[6] /*cursor=*/;
-    variable[5] = TAG_Int(UNTAG_Int(variable[5])+UNTAG_Int( TAG_Int(1))) /*nb*/;
-    continue_14: while(0);
+  REGB1 = TAG_Int(0);
+  /* ./../lib/standard//kernel.nit:156 */
+  while(1) {
+    REGB2 = CALL_kernel___Comparable_____l(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
+    if (UNTAG_Bool(REGB2)) {
+      fra.me.REG[0] = CALL_kernel___Discrete___succ(fra.me.REG[2])(fra.me.REG[2]);
+      fra.me.REG[2] = fra.me.REG[0];
+      REGB2 = TAG_Int(1);
+      REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
+      REGB1 = REGB2;
+    /* ./../lib/standard//kernel.nit:158 */
+    } else {
+      /* ./../lib/standard//kernel.nit:156 */
+      goto label2;
+    }
   }
-  break_14: while(0);
-  variable[2] =  variable[5] /*nb*/;
-  goto return_label13;
-  return_label13: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Bool___object_id(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 174, LOCATE_kernel___Bool___object_id};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Bool( self));
-}
-val_t kernel___Bool_____eqeq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 175, LOCATE_kernel___Bool_____eqeq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(( self)==( param0));
-}
-val_t kernel___Bool_____neq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 176, LOCATE_kernel___Bool_____neq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(( self)!=( param0));
-}
-void kernel___Bool___output(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 177, LOCATE_kernel___Bool___output};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  (void)printf(UNTAG_Bool( self)?"true\n":"false\n");
-  tracehead = trace.prev;
+  label2: while(0);
+  REGB0 = REGB1;
+  /* ./../lib/standard//kernel.nit:160 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Bool___object_id(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 174;
+  fra.me.meth = LOCATE_kernel___Bool___object_id;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Int(UNTAG_Bool(REGB0));
+  /* ./../lib/standard//kernel.nit:174 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Bool_____eqeq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 175;
+  fra.me.meth = LOCATE_kernel___Bool_____eqeq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  REGB0 = TAG_Bool((REGB0)==(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:175 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Bool_____neq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 176;
+  fra.me.meth = LOCATE_kernel___Bool_____neq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  REGB0 = TAG_Bool((REGB0)!=(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:176 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+void kernel___Bool___output(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 177;
+  fra.me.meth = LOCATE_kernel___Bool___output;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  /* ./../lib/standard//kernel.nit:177 */
+  (void)printf(UNTAG_Bool(REGB0)?"true\n":"false\n");;
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t kernel___Float___object_id(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 183, LOCATE_kernel___Float___object_id};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int((bigint)UNBOX_Float( self));
-}
-void kernel___Float___output(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 184, LOCATE_kernel___Float___output};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  printf("%f\n", UNBOX_Float( self));
-  tracehead = trace.prev;
+val_t kernel___Float___object_id(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 183;
+  fra.me.meth = LOCATE_kernel___Float___object_id;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:183 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+void kernel___Float___output(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 184;
+  fra.me.meth = LOCATE_kernel___Float___output;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./../lib/standard//kernel.nit:184 */
+  printf("%f\n", UNBOX_Float(fra.me.REG[0]));;
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t kernel___Float_____leq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 186, LOCATE_kernel___Float_____leq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNBOX_Float( self)<=UNBOX_Float( param0));
-}
-val_t kernel___Float_____l(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 187, LOCATE_kernel___Float_____l};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNBOX_Float( self)<UNBOX_Float( param0));
-}
-val_t kernel___Float_____geq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 188, LOCATE_kernel___Float_____geq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNBOX_Float( self)>=UNBOX_Float( param0));
-}
-val_t kernel___Float_____g(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 189, LOCATE_kernel___Float_____g};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNBOX_Float( self)>UNBOX_Float( param0));
-}
-val_t kernel___Float_____plus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 190, LOCATE_kernel___Float_____plus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return BOX_Float(UNBOX_Float( self)+UNBOX_Float( param0));
-}
-val_t kernel___Float___unary__minus(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 191, LOCATE_kernel___Float___unary__minus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return BOX_Float(-UNBOX_Float( self));
-}
-val_t kernel___Float_____minus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 192, LOCATE_kernel___Float_____minus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return BOX_Float(UNBOX_Float( self)-UNBOX_Float( param0));
-}
-val_t kernel___Float_____star(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 193, LOCATE_kernel___Float_____star};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return BOX_Float(UNBOX_Float( self)*UNBOX_Float( param0));
-}
-val_t kernel___Float_____slash(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 194, LOCATE_kernel___Float_____slash};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return BOX_Float(UNBOX_Float( self)/UNBOX_Float( param0));
-}
-val_t kernel___Float___to_i(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 196, LOCATE_kernel___Float___to_i};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int((bigint)UNBOX_Float( self));
-}
-val_t kernel___Int___object_id(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 206, LOCATE_kernel___Int___object_id};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return  self;
-}
-val_t kernel___Int_____eqeq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 207, LOCATE_kernel___Int_____eqeq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(( self)==( param0));
-}
-val_t kernel___Int_____neq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 208, LOCATE_kernel___Int_____neq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(( self)!=( param0));
-}
-void kernel___Int___output(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 209, LOCATE_kernel___Int___output};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  printf("%ld\n", UNTAG_Int( self));
-  tracehead = trace.prev;
+val_t kernel___Float_____leq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 186;
+  fra.me.meth = LOCATE_kernel___Float_____leq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(UNBOX_Float(fra.me.REG[0])<=UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:186 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Float_____l(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 187;
+  fra.me.meth = LOCATE_kernel___Float_____l;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(UNBOX_Float(fra.me.REG[0])<UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:187 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Float_____geq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 188;
+  fra.me.meth = LOCATE_kernel___Float_____geq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(UNBOX_Float(fra.me.REG[0])>=UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:188 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Float_____g(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 189;
+  fra.me.meth = LOCATE_kernel___Float_____g;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  REGB0 = TAG_Bool(UNBOX_Float(fra.me.REG[0])>UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:189 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Float_____plus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 190;
+  fra.me.meth = LOCATE_kernel___Float_____plus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[1] = BOX_Float(UNBOX_Float(fra.me.REG[0])+UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:190 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+val_t kernel___Float___unary__minus(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 191;
+  fra.me.meth = LOCATE_kernel___Float___unary__minus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[0] = BOX_Float(-UNBOX_Float(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:191 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+val_t kernel___Float_____minus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 192;
+  fra.me.meth = LOCATE_kernel___Float_____minus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[1] = BOX_Float(UNBOX_Float(fra.me.REG[0])-UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:192 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+val_t kernel___Float_____star(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 193;
+  fra.me.meth = LOCATE_kernel___Float_____star;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[1] = BOX_Float(UNBOX_Float(fra.me.REG[0])*UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:193 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+val_t kernel___Float_____slash(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 194;
+  fra.me.meth = LOCATE_kernel___Float_____slash;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[1] = BOX_Float(UNBOX_Float(fra.me.REG[0])/UNBOX_Float(fra.me.REG[1]));
+  /* ./../lib/standard//kernel.nit:194 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[1];
+}
+val_t kernel___Float___to_i(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 196;
+  fra.me.meth = LOCATE_kernel___Float___to_i;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = TAG_Int((bigint)UNBOX_Float(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:196 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int___object_id(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 206;
+  fra.me.meth = LOCATE_kernel___Int___object_id;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  /* ./../lib/standard//kernel.nit:206 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int_____eqeq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 207;
+  fra.me.meth = LOCATE_kernel___Int_____eqeq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  REGB0 = TAG_Bool((REGB0)==(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:207 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int_____neq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 208;
+  fra.me.meth = LOCATE_kernel___Int_____neq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  REGB0 = TAG_Bool((REGB0)!=(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:208 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+void kernel___Int___output(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 209;
+  fra.me.meth = LOCATE_kernel___Int___output;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  /* ./../lib/standard//kernel.nit:209 */
+  printf("%ld\n", UNTAG_Int(REGB0));;
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t kernel___Int_____l(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 212, LOCATE_kernel___Int_____l};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Int( self)<UNTAG_Int( param0));
-}
-val_t kernel___Int_____leq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 211, LOCATE_kernel___Int_____leq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Int( self)<=UNTAG_Int( param0));
-}
-val_t kernel___Int_____geq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 213, LOCATE_kernel___Int_____geq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Int( self)>=UNTAG_Int( param0));
-}
-val_t kernel___Int_____g(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 214, LOCATE_kernel___Int_____g};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Int( self)>UNTAG_Int( param0));
-}
-val_t kernel___Int_____leqg(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 239, LOCATE_kernel___Int_____leqg};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = TAG_Bool(UNTAG_Int(variable[3])<UNTAG_Int( variable[1] /*other*/));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[3] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-    variable[2] = variable[3];
-    goto return_label15;
-  } else { /*if*/
-    variable[3] = variable[0];
-    variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*other*/)<UNTAG_Int(variable[3]));
-    if (UNTAG_Bool(variable[3])) { /*if*/
-      variable[2] =  TAG_Int(1);
-      goto return_label15;
-    } else { /*if*/
-      variable[2] =  TAG_Int(0);
-      goto return_label15;
+val_t kernel___Int_____l(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 212;
+  fra.me.meth = LOCATE_kernel___Int_____l;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:212 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____leq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 211;
+  fra.me.meth = LOCATE_kernel___Int_____leq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:211 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____geq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 213;
+  fra.me.meth = LOCATE_kernel___Int_____geq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:213 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____g(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 214;
+  fra.me.meth = LOCATE_kernel___Int_____g;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:214 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____leqg(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 239;
+  fra.me.meth = LOCATE_kernel___Int_____leqg;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:241 */
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = TAG_Int(1);
+    REGB2 = TAG_Int(-UNTAG_Int(REGB2));
+    /* ./../lib/standard//kernel.nit:242 */
+    goto label1;
+  } else {
+    REGB0 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB0));
+    /* ./../lib/standard//kernel.nit:243 */
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Int(1);
+      REGB2 = REGB0;
+      /* ./../lib/standard//kernel.nit:244 */
+      goto label1;
+    } else {
+      REGB0 = TAG_Int(0);
+      REGB2 = REGB0;
+      /* ./../lib/standard//kernel.nit:246 */
+      goto label1;
     }
   }
-  return_label15: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Int___is_between(val_t  self, val_t  param0, val_t  param1) {
-  struct trace_t trace = {NULL, NULL, 250, LOCATE_kernel___Int___is_between};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[2] =  param1;
-  variable[4] = variable[0];
-  variable[4] = TAG_Bool(UNTAG_Int(variable[4])<UNTAG_Int( variable[1] /*c*/));
-  variable[5] = variable[4];
-  if (!UNTAG_Bool(variable[5])) { /* or */
-    variable[5] = variable[0];
-    variable[5] = TAG_Bool(UNTAG_Int( variable[2] /*d*/)<UNTAG_Int(variable[5]));
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB2;
+}
+val_t kernel___Int___is_between(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 250;
+  fra.me.meth = LOCATE_kernel___Int___is_between;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB2 = p2;
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:252 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(true);
+  } else {
+    REGB0 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB0));
+    REGB1 = REGB0;
+  /* ./../lib/standard//kernel.nit:252 */
+  }
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Bool(false);
+    /* ./../lib/standard//kernel.nit:253 */
+    goto label1;
+  } else {
+    REGB0 = TAG_Bool(true);
+    REGB1 = REGB0;
+    /* ./../lib/standard//kernel.nit:255 */
+    goto label1;
   }
-  variable[4] = variable[5];
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[3] =  TAG_Bool(false);
-    goto return_label16;
-  } else { /*if*/
-    variable[3] =  TAG_Bool(true);
-    goto return_label16;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___max(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 259;
+  fra.me.meth = LOCATE_kernel___Int___max;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:261 */
+  if (UNTAG_Bool(REGB2)) {
+    /* ./../lib/standard//kernel.nit:262 */
+    goto label1;
+  } else {
+    REGB1 = REGB0;
+    /* ./../lib/standard//kernel.nit:264 */
+    goto label1;
   }
-  return_label16: while(false);
-  tracehead = trace.prev;
-  return variable[3];
-}
-val_t kernel___Int___max(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 259, LOCATE_kernel___Int___max};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = TAG_Bool(UNTAG_Int(variable[3])<UNTAG_Int( variable[1] /*other*/));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[2] =  variable[1] /*other*/;
-    goto return_label17;
-  } else { /*if*/
-    variable[3] = variable[0];
-    variable[2] = variable[3];
-    goto return_label17;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___min(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 268;
+  fra.me.meth = LOCATE_kernel___Int___min;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB2 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:270 */
+  if (UNTAG_Bool(REGB2)) {
+    /* ./../lib/standard//kernel.nit:271 */
+    goto label1;
+  } else {
+    REGB1 = REGB0;
+    /* ./../lib/standard//kernel.nit:273 */
+    goto label1;
   }
-  return_label17: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Int___min(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 268, LOCATE_kernel___Int___min};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[3] = variable[0];
-  variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*c*/)<UNTAG_Int(variable[3]));
-  if (UNTAG_Bool(variable[3])) { /*if*/
-    variable[2] =  variable[1] /*c*/;
-    goto return_label18;
-  } else { /*if*/
-    variable[3] = variable[0];
-    variable[2] = variable[3];
-    goto return_label18;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___succ(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 227;
+  fra.me.meth = LOCATE_kernel___Int___succ;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Int(UNTAG_Int(REGB0)+1);
+  /* ./../lib/standard//kernel.nit:227 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int___prec(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 228;
+  fra.me.meth = LOCATE_kernel___Int___prec;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Int(UNTAG_Int(REGB0)-1);
+  /* ./../lib/standard//kernel.nit:228 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int_____plus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 215;
+  fra.me.meth = LOCATE_kernel___Int_____plus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:215 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____minus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 217;
+  fra.me.meth = LOCATE_kernel___Int_____minus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:217 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___distance(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 229;
+  fra.me.meth = LOCATE_kernel___Int___distance;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+  REGB0 = TAG_Int(0);
+  REGB0 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:232 */
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = REGB1;
+    /* ./../lib/standard//kernel.nit:233 */
+    goto label1;
+  } else {
+    REGB1 = TAG_Int(-UNTAG_Int(REGB1));
+    REGB0 = REGB1;
+    /* ./../lib/standard//kernel.nit:235 */
+    goto label1;
   }
-  return_label18: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Int___succ(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 227, LOCATE_kernel___Int___succ};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)+1);
-}
-val_t kernel___Int___prec(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 228, LOCATE_kernel___Int___prec};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)-1);
-}
-val_t kernel___Int_____plus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 215, LOCATE_kernel___Int_____plus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)+UNTAG_Int( param0));
-}
-val_t kernel___Int_____minus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 217, LOCATE_kernel___Int_____minus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)-UNTAG_Int( param0));
-}
-val_t kernel___Int___distance(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 229, LOCATE_kernel___Int___distance};
-  val_t variable[5];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( variable[1] /*i*/));
-  variable[3] = variable[4];
-  variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*d*/)>=UNTAG_Int( TAG_Int(0)));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[2] =  variable[3] /*d*/;
-    goto return_label19;
-  } else { /*if*/
-    variable[4] = TAG_Int(-UNTAG_Int( variable[3] /*d*/));
-    variable[2] = variable[4];
-    goto return_label19;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int___unary__minus(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 216;
+  fra.me.meth = LOCATE_kernel___Int___unary__minus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Int(-UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:216 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int_____star(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 218;
+  fra.me.meth = LOCATE_kernel___Int_____star;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)*UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:218 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____slash(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 219;
+  fra.me.meth = LOCATE_kernel___Int_____slash;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)/UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:219 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int_____percent(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 220;
+  fra.me.meth = LOCATE_kernel___Int_____percent;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)%UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:220 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___lshift(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 221;
+  fra.me.meth = LOCATE_kernel___Int___lshift;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)<<UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:221 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___rshift(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 222;
+  fra.me.meth = LOCATE_kernel___Int___rshift;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)>>UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:222 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Int___to_f(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 224;
+  fra.me.meth = LOCATE_kernel___Int___to_f;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = BOX_Float((float)UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:224 */
+  stack_frame_head = fra.me.prev;
+  return fra.me.REG[0];
+}
+val_t kernel___Int___ascii(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 277;
+  fra.me.meth = LOCATE_kernel___Int___ascii;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Char(UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:277 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Int___digit_count(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t REGB5;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 280;
+  fra.me.meth = LOCATE_kernel___Int___digit_count;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB2 = TAG_Int(0);
+  REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB2));
+  /* ./../lib/standard//kernel.nit:286 */
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = TAG_Int(1);
+    REGB3 = TAG_Int(-UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:288 */
+  } else {
+    REGB4 = TAG_Int(0);
+    REGB5 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB4));
+    /* ./../lib/standard//kernel.nit:289 */
+    if (UNTAG_Bool(REGB5)) {
+    } else {
+      REGB4 = TAG_Bool((REGB0)==(REGB4));
+      REGB5 = REGB4;
+    /* ./../lib/standard//kernel.nit:289 */
+    }
+    if (UNTAG_Bool(REGB5)) {
+      REGB5 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:290 */
+      goto label1;
+    } else {
+      REGB4 = TAG_Int(0);
+      REGB2 = REGB4;
+      REGB3 = REGB0;
+    /* ./../lib/standard//kernel.nit:293 */
+    }
   }
-  return_label19: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Int___unary__minus(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 216, LOCATE_kernel___Int___unary__minus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(-UNTAG_Int( self));
-}
-val_t kernel___Int_____star(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 218, LOCATE_kernel___Int_____star};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)*UNTAG_Int( param0));
-}
-val_t kernel___Int_____slash(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 219, LOCATE_kernel___Int_____slash};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)/UNTAG_Int( param0));
-}
-val_t kernel___Int_____percent(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 220, LOCATE_kernel___Int_____percent};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)%UNTAG_Int( param0));
-}
-val_t kernel___Int___lshift(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 221, LOCATE_kernel___Int___lshift};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)<<UNTAG_Int( param0));
-}
-val_t kernel___Int___rshift(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 222, LOCATE_kernel___Int___rshift};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Int( self)>>UNTAG_Int( param0));
-}
-val_t kernel___Int___to_f(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 224, LOCATE_kernel___Int___to_f};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return BOX_Float((float)UNTAG_Int( self));
-}
-val_t kernel___Int___ascii(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 277, LOCATE_kernel___Int___ascii};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Char(UNTAG_Int( self));
-}
-val_t kernel___Int___digit_count(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 280, LOCATE_kernel___Int___digit_count};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  /*variable[3] is variable d*/
-  /*variable[4] is variable n*/
-  variable[5] = variable[0];
-  variable[5] = TAG_Bool(UNTAG_Int(variable[5])<UNTAG_Int( TAG_Int(0)));
-  if (UNTAG_Bool(variable[5])) { /*if*/
-    variable[3] =  TAG_Int(1) /*d=*/;
-    variable[5] = variable[0];
-    variable[5] = TAG_Int(-UNTAG_Int(variable[5]));
-    variable[4] = variable[5] /*n=*/;
-  } else { /*if*/
-    variable[5] = variable[0];
-    variable[5] = TAG_Bool((variable[5])==( TAG_Int(0)));
-    if (UNTAG_Bool(variable[5])) { /*if*/
-      variable[2] =  TAG_Int(1);
-      goto return_label20;
-    } else { /*if*/
-      variable[3] =  TAG_Int(0) /*d=*/;
-      variable[5] = variable[0];
-      variable[4] = variable[5] /*n=*/;
+  /* ./../lib/standard//kernel.nit:296 */
+  while(1) {
+    REGB0 = TAG_Int(0);
+    REGB0 = TAG_Bool(UNTAG_Int(REGB3)>UNTAG_Int(REGB0));
+    /* ./../lib/standard//kernel.nit:296 */
+    if (UNTAG_Bool(REGB0)) {
+      REGB0 = TAG_Int(1);
+      REGB0 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB0));
+      REGB2 = REGB0;
+      REGB0 = TAG_Int(UNTAG_Int(REGB3)/UNTAG_Int(REGB1));
+      REGB3 = REGB0;
+    /* ./../lib/standard//kernel.nit:298 */
+    } else {
+      /* ./../lib/standard//kernel.nit:296 */
+      goto label2;
     }
   }
-  while (true) { /*while*/
-    variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*n*/)>UNTAG_Int( TAG_Int(0)));
-    if (!UNTAG_Bool(variable[5])) break; /* while*/
-    variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*d*/;
-    variable[5] = TAG_Int(UNTAG_Int( variable[4] /*n*/)/UNTAG_Int( variable[1] /*b*/));
-    variable[4] = variable[5] /*n=*/;
-    continue_21: while(0);
+  label2: while(0);
+  REGB5 = REGB2;
+  /* ./../lib/standard//kernel.nit:300 */
+  goto label1;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB5;
+}
+val_t kernel___Int___to_c(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 303;
+  fra.me.meth = LOCATE_kernel___Int___to_c;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = TAG_Int(0);
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:308 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Int(36);
+    REGB1 = TAG_Bool(UNTAG_Int(REGB0)<=UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:308 */
+  } else {
+    REGB2 = TAG_Bool(false);
+    REGB1 = REGB2;
   }
-  break_21: while(0);
-  variable[2] =  variable[3] /*d*/;
-  goto return_label20;
-  return_label20: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Int___to_c(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 303, LOCATE_kernel___Int___to_c};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = TAG_Bool(UNTAG_Int(variable[2])>=UNTAG_Int( TAG_Int(0)));
-  variable[3] = variable[2];
-  if (UNTAG_Bool(variable[3])) { /* and */
-    variable[3] = variable[0];
-    variable[3] = TAG_Bool(UNTAG_Int(variable[3])<=UNTAG_Int( TAG_Int(36)));
+  if (UNTAG_Bool(REGB1)) {
+  } else {
+    fprintf(stderr, "Assert failed");
+    fprintf(stderr, " (%s:%d)\n", LOCATE_kernel, 308);
+    nit_exit(1);
   }
-  variable[2] = variable[3];
-  if (!UNTAG_Bool(variable[2])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_kernel___Int___to_c, LOCATE_kernel, 308); nit_exit(1);}
-  variable[2] = variable[0];
-  variable[2] = TAG_Bool(UNTAG_Int(variable[2])<UNTAG_Int( TAG_Int(10)));
-  if (UNTAG_Bool(variable[2])) { /*if*/
-    variable[2] = variable[0];
-    variable[3] = TAG_Int((unsigned char)UNTAG_Char( TAG_Char('0')));
-    variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int(variable[3]));
-    variable[2] = TAG_Char(UNTAG_Int(variable[2]));
-    variable[1] = variable[2];
-    goto return_label22;
-  } else { /*if*/
-    variable[2] = variable[0];
-    variable[3] = TAG_Int((unsigned char)UNTAG_Char( TAG_Char('a')));
-    variable[3] = TAG_Int(UNTAG_Int(variable[3])-UNTAG_Int( TAG_Int(10)));
-    variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int(variable[3]));
-    variable[2] = TAG_Char(UNTAG_Int(variable[2]));
-    variable[1] = variable[2];
-    goto return_label22;
+  REGB1 = TAG_Int(10);
+  REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+  /* ./../lib/standard//kernel.nit:309 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Char('0');
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB1));
+    REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
+    REGB1 = TAG_Char(UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:310 */
+    goto label1;
+  } else {
+    REGB2 = TAG_Char('a');
+    REGB2 = TAG_Int((unsigned char)UNTAG_Char(REGB2));
+    REGB3 = TAG_Int(10);
+    REGB3 = TAG_Int(UNTAG_Int(REGB2)-UNTAG_Int(REGB3));
+    REGB3 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB3));
+    REGB3 = TAG_Char(UNTAG_Int(REGB3));
+    REGB1 = REGB3;
+    /* ./../lib/standard//kernel.nit:312 */
+    goto label1;
   }
-  return_label22: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t kernel___Char___object_id(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 324, LOCATE_kernel___Char___object_id};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int(UNTAG_Char( self));
-}
-val_t kernel___Char_____eqeq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 325, LOCATE_kernel___Char_____eqeq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(( self)==( param0));
-}
-val_t kernel___Char_____neq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 326, LOCATE_kernel___Char_____neq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(( self)!=( param0));
-}
-void kernel___Char___output(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 327, LOCATE_kernel___Char___output};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  printf("%c", (unsigned char)UNTAG_Char( self));
-  tracehead = trace.prev;
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char___object_id(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 324;
+  fra.me.meth = LOCATE_kernel___Char___object_id;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Int(UNTAG_Char(REGB0));
+  /* ./../lib/standard//kernel.nit:324 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Char_____eqeq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 325;
+  fra.me.meth = LOCATE_kernel___Char_____eqeq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  REGB0 = TAG_Bool((REGB0)==(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:325 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Char_____neq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 326;
+  fra.me.meth = LOCATE_kernel___Char_____neq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  REGB0 = p0;
+  fra.me.REG[0] = p1;
+  REGB0 = TAG_Bool((REGB0)!=(fra.me.REG[0]));
+  /* ./../lib/standard//kernel.nit:326 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+void kernel___Char___output(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 327;
+  fra.me.meth = LOCATE_kernel___Char___output;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  /* ./../lib/standard//kernel.nit:327 */
+  printf("%c", (unsigned char)UNTAG_Char(REGB0));;
+  stack_frame_head = fra.me.prev;
   return;
 }
-val_t kernel___Char_____l(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 330, LOCATE_kernel___Char_____l};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Char( self)<UNTAG_Char( param0));
-}
-val_t kernel___Char_____leq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 329, LOCATE_kernel___Char_____leq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Char( self)<=UNTAG_Char( param0));
-}
-val_t kernel___Char_____geq(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 331, LOCATE_kernel___Char_____geq};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Char( self)>=UNTAG_Char( param0));
-}
-val_t kernel___Char_____g(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 332, LOCATE_kernel___Char_____g};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Bool(UNTAG_Char( self)>UNTAG_Char( param0));
-}
-val_t kernel___Char___succ(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 334, LOCATE_kernel___Char___succ};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Char(UNTAG_Char( self)+1);
-}
-val_t kernel___Char___prec(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 335, LOCATE_kernel___Char___prec};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Char(UNTAG_Char( self)-1);
-}
-val_t kernel___Char_____plus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 363, LOCATE_kernel___Char_____plus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Char(UNTAG_Char( self)+UNTAG_Char( param0));
-}
-val_t kernel___Char_____minus(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 364, LOCATE_kernel___Char_____minus};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Char(UNTAG_Char( self)-UNTAG_Char( param0));
-}
-val_t kernel___Char___distance(val_t  self, val_t  param0) {
-  struct trace_t trace = {NULL, NULL, 337, LOCATE_kernel___Char___distance};
-  val_t variable[6];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[1] =  param0;
-  variable[4] = variable[0];
-  variable[4] = TAG_Int((unsigned char)UNTAG_Char(variable[4]));
-  variable[5] = TAG_Int((unsigned char)UNTAG_Char( variable[1] /*c*/));
-  variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int(variable[5]));
-  variable[3] = variable[4];
-  variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*d*/)>=UNTAG_Int( TAG_Int(0)));
-  if (UNTAG_Bool(variable[4])) { /*if*/
-    variable[2] =  variable[3] /*d*/;
-    goto return_label23;
-  } else { /*if*/
-    variable[4] = TAG_Int(-UNTAG_Int( variable[3] /*d*/));
-    variable[2] = variable[4];
-    goto return_label23;
+val_t kernel___Char_____l(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 330;
+  fra.me.meth = LOCATE_kernel___Char_____l;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)<UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:330 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char_____leq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 329;
+  fra.me.meth = LOCATE_kernel___Char_____leq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:329 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char_____geq(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 331;
+  fra.me.meth = LOCATE_kernel___Char_____geq;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:331 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char_____g(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 332;
+  fra.me.meth = LOCATE_kernel___Char_____g;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)>UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:332 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char___succ(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 334;
+  fra.me.meth = LOCATE_kernel___Char___succ;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Char(UNTAG_Char(REGB0)+1);
+  /* ./../lib/standard//kernel.nit:334 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Char___prec(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 335;
+  fra.me.meth = LOCATE_kernel___Char___prec;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Char(UNTAG_Char(REGB0)-1);
+  /* ./../lib/standard//kernel.nit:335 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Char_____plus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 363;
+  fra.me.meth = LOCATE_kernel___Char_____plus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Char(UNTAG_Char(REGB0)+UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:363 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char_____minus(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 364;
+  fra.me.meth = LOCATE_kernel___Char_____minus;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB1 = TAG_Char(UNTAG_Char(REGB0)-UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:364 */
+  stack_frame_head = fra.me.prev;
+  return REGB1;
+}
+val_t kernel___Char___distance(val_t p0, val_t p1){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 337;
+  fra.me.meth = LOCATE_kernel___Char___distance;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = p1;
+  REGB0 = TAG_Int((unsigned char)UNTAG_Char(REGB0));
+  REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB1));
+  REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+  REGB0 = TAG_Int(0);
+  REGB0 = TAG_Bool(UNTAG_Int(REGB1)>=UNTAG_Int(REGB0));
+  /* ./../lib/standard//kernel.nit:340 */
+  if (UNTAG_Bool(REGB0)) {
+    REGB0 = REGB1;
+    /* ./../lib/standard//kernel.nit:341 */
+    goto label1;
+  } else {
+    REGB1 = TAG_Int(-UNTAG_Int(REGB1));
+    REGB0 = REGB1;
+    /* ./../lib/standard//kernel.nit:343 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Char___to_i(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 347;
+  fra.me.meth = LOCATE_kernel___Char___to_i;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = TAG_Char('-');
+  REGB2 = TAG_Bool(IS_EQUAL_OO(REGB0,REGB1));
+  /* ./../lib/standard//kernel.nit:351 */
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    REGB1 = TAG_Bool((REGB0)==(REGB1));
+    REGB2 = REGB1;
+  /* ./../lib/standard//kernel.nit:351 */
   }
-  return_label23: while(false);
-  tracehead = trace.prev;
-  return variable[2];
-}
-val_t kernel___Char___to_i(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 347, LOCATE_kernel___Char___to_i};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = TAG_Bool((variable[2])==( TAG_Char('-')));
-  if (UNTAG_Bool(variable[2])) { /*if*/
-    variable[2] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
-    variable[1] = variable[2];
-    goto return_label24;
-  } else { /*if*/
-    variable[2] = variable[0];
-    variable[2] = TAG_Bool(UNTAG_Char(variable[2])>=UNTAG_Char( TAG_Char('0')));
-    variable[3] = variable[2];
-    if (UNTAG_Bool(variable[3])) { /* and */
-      variable[3] = variable[0];
-      variable[3] = TAG_Bool(UNTAG_Char(variable[3])<=UNTAG_Char( TAG_Char('9')));
+  if (UNTAG_Bool(REGB2)) {
+    REGB2 = TAG_Int(1);
+    REGB2 = TAG_Int(-UNTAG_Int(REGB2));
+    /* ./../lib/standard//kernel.nit:352 */
+    goto label1;
+  } else {
+    REGB1 = TAG_Char('0');
+    REGB1 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB1));
+    /* ./../lib/standard//kernel.nit:353 */
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Char('9');
+      REGB1 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB1));
+    /* ./../lib/standard//kernel.nit:353 */
+    } else {
+      REGB3 = TAG_Bool(false);
+      REGB1 = REGB3;
     }
-    variable[2] = variable[3];
-    if (UNTAG_Bool(variable[2])) { /*if*/
-      variable[2] = variable[0];
-      variable[2] = TAG_Int((unsigned char)UNTAG_Char(variable[2]));
-      variable[3] = TAG_Int((unsigned char)UNTAG_Char( TAG_Char('0')));
-      variable[2] = TAG_Int(UNTAG_Int(variable[2])-UNTAG_Int(variable[3]));
-      variable[1] = variable[2];
-      goto return_label24;
-    } else { /*if*/
-      variable[2] = variable[0];
-      variable[2] = CALL_kernel___Char___to_lower(variable[2])(variable[2]) /*Char::to_lower*/;
-      variable[2] = TAG_Int((unsigned char)UNTAG_Char(variable[2]));
-      variable[3] = TAG_Int((unsigned char)UNTAG_Char( TAG_Char('a')));
-      variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(10)));
-      variable[2] = TAG_Int(UNTAG_Int(variable[2])-UNTAG_Int(variable[3]));
-      variable[1] = variable[2];
-      goto return_label24;
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB0));
+      REGB3 = TAG_Char('0');
+      REGB3 = TAG_Int((unsigned char)UNTAG_Char(REGB3));
+      REGB3 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB3));
+      REGB2 = REGB3;
+      /* ./../lib/standard//kernel.nit:354 */
+      goto label1;
+    } else {
+      REGB0 = CALL_kernel___Char___to_lower(REGB0)(REGB0);
+      REGB0 = TAG_Int((unsigned char)UNTAG_Char(REGB0));
+      REGB3 = TAG_Char('a');
+      REGB3 = TAG_Int((unsigned char)UNTAG_Char(REGB3));
+      REGB1 = TAG_Int(10);
+      REGB1 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB1));
+      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
+      REGB2 = REGB1;
+      /* ./../lib/standard//kernel.nit:356 */
+      goto label1;
     }
   }
-  return_label24: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t kernel___Char___ascii(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 360, LOCATE_kernel___Char___ascii};
-  val_t *variable = NULL;
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  tracehead = trace.prev;
-  return TAG_Int((unsigned char)UNTAG_Char( self));
-}
-val_t kernel___Char___to_lower(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 366, LOCATE_kernel___Char___to_lower};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = TAG_Bool(UNTAG_Char(variable[2])>=UNTAG_Char( TAG_Char('A')));
-  variable[3] = variable[2];
-  if (UNTAG_Bool(variable[3])) { /* and */
-    variable[3] = variable[0];
-    variable[3] = TAG_Bool(UNTAG_Char(variable[3])<=UNTAG_Char( TAG_Char('Z')));
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB2;
+}
+val_t kernel___Char___ascii(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 360;
+  fra.me.meth = LOCATE_kernel___Char___ascii;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB0 = TAG_Int((unsigned char)UNTAG_Char(REGB0));
+  /* ./../lib/standard//kernel.nit:360 */
+  stack_frame_head = fra.me.prev;
+  return REGB0;
+}
+val_t kernel___Char___to_lower(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 366;
+  fra.me.meth = LOCATE_kernel___Char___to_lower;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = TAG_Char('A');
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:369 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Char('Z');
+    REGB1 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:369 */
+  } else {
+    REGB2 = TAG_Bool(false);
+    REGB1 = REGB2;
   }
-  variable[2] = variable[3];
-  if (UNTAG_Bool(variable[2])) { /*if*/
-    variable[2] = variable[0];
-    variable[2] = TAG_Int((unsigned char)UNTAG_Char(variable[2]));
-    variable[3] = CALL_kernel___Discrete___distance( TAG_Char('a'))( TAG_Char('a'),  TAG_Char('A')) /*Char::distance*/;
-    variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int(variable[3]));
-    variable[2] = TAG_Char(UNTAG_Int(variable[2]));
-    variable[1] = variable[2];
-    goto return_label25;
-  } else { /*if*/
-    variable[2] = variable[0];
-    variable[1] = variable[2];
-    goto return_label25;
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB0));
+    REGB2 = TAG_Char('a');
+    REGB3 = TAG_Char('A');
+    REGB3 = CALL_kernel___Discrete___distance(REGB2)(REGB2, REGB3);
+    REGB3 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB3));
+    REGB3 = TAG_Char(UNTAG_Int(REGB3));
+    /* ./../lib/standard//kernel.nit:370 */
+    goto label1;
+  } else {
+    REGB3 = REGB0;
+    /* ./../lib/standard//kernel.nit:372 */
+    goto label1;
   }
-  return_label25: while(false);
-  tracehead = trace.prev;
-  return variable[1];
-}
-val_t kernel___Char___to_upper(val_t  self) {
-  struct trace_t trace = {NULL, NULL, 376, LOCATE_kernel___Char___to_upper};
-  val_t variable[4];
-  void **closurevariable = NULL;
-  trace.prev = tracehead; tracehead = &trace;
-  trace.file = LOCATE_kernel;
-  variable[0] =  self;
-  variable[2] = variable[0];
-  variable[2] = TAG_Bool(UNTAG_Char(variable[2])>=UNTAG_Char( TAG_Char('a')));
-  variable[3] = variable[2];
-  if (UNTAG_Bool(variable[3])) { /* and */
-    variable[3] = variable[0];
-    variable[3] = TAG_Bool(UNTAG_Char(variable[3])<=UNTAG_Char( TAG_Char('z')));
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB3;
+}
+val_t kernel___Char___to_upper(val_t p0){
+  struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_kernel;
+  fra.me.line = 376;
+  fra.me.meth = LOCATE_kernel___Char___to_upper;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 0;
+  REGB0 = p0;
+  REGB1 = TAG_Char('a');
+  REGB1 = TAG_Bool(UNTAG_Char(REGB0)>=UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:379 */
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Char('z');
+    REGB1 = TAG_Bool(UNTAG_Char(REGB0)<=UNTAG_Char(REGB1));
+  /* ./../lib/standard//kernel.nit:379 */
+  } else {
+    REGB2 = TAG_Bool(false);
+    REGB1 = REGB2;
   }
-  variable[2] = variable[3];
-  if (UNTAG_Bool(variable[2])) { /*if*/
-    variable[2] = variable[0];
-    variable[2] = TAG_Int((unsigned char)UNTAG_Char(variable[2]));
-    variable[3] = CALL_kernel___Discrete___distance( TAG_Char('a'))( TAG_Char('a'),  TAG_Char('A')) /*Char::distance*/;
-    variable[2] = TAG_Int(UNTAG_Int(variable[2])-UNTAG_Int(variable[3]));
-    variable[2] = TAG_Char(UNTAG_Int(variable[2]));
-    variable[1] = variable[2];
-    goto return_label26;
-  } else { /*if*/
-    variable[2] = variable[0];
-    variable[1] = variable[2];
-    goto return_label26;
+  if (UNTAG_Bool(REGB1)) {
+    REGB1 = TAG_Int((unsigned char)UNTAG_Char(REGB0));
+    REGB2 = TAG_Char('a');
+    REGB3 = TAG_Char('A');
+    REGB3 = CALL_kernel___Discrete___distance(REGB2)(REGB2, REGB3);
+    REGB3 = TAG_Int(UNTAG_Int(REGB1)-UNTAG_Int(REGB3));
+    REGB3 = TAG_Char(UNTAG_Int(REGB3));
+    /* ./../lib/standard//kernel.nit:380 */
+    goto label1;
+  } else {
+    REGB3 = REGB0;
+    /* ./../lib/standard//kernel.nit:382 */
+    goto label1;
   }
-  return_label26: while(false);
-  tracehead = trace.prev;
-  return variable[1];
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return REGB3;
 }