-/* method kernel#Comparable#min for (self: Comparable, Comparable): Comparable */
-val* kernel__Comparable__min(val* self, val* p0) {
-val* var /* : Comparable */;
-short int var1 /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-val* var_c /* var c: Comparable */;
-short int var2 /* : Bool */;
-short int var3 /* : Bool */;
-int cltype4;
-int idtype5;
-const struct type* type_struct6;
-const char* var_class_name7;
-/* Covariant cast for argument 0 (c) <p0:Comparable> isa OTHER */
-/* <p0:Comparable> isa OTHER */
-type_struct = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var1 = 0;
-} else {
-var1 = p0->type->type_table[cltype] == idtype;
-}
-if (!var1) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 142);
-exit(1);
-}
-var_c = p0;
-var2 = ((short int (*)(val*, val*))(var_c->class->vft[COLOR_kernel__Comparable___60d]))(var_c, self) /* < on <var_c:Comparable>*/;
-if (var2){
-var = var_c;
-goto RET_LABEL;
-} else {
-/* <self:Comparable> isa OTHER */
-type_struct6 = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype4 = type_struct6->color;
-idtype5 = type_struct6->id;
-if(cltype4 >= self->type->table_size) {
-var3 = 0;
-} else {
-var3 = self->type->type_table[cltype4] == idtype5;
-}
-if (!var3) {
-var_class_name7 = self == NULL ? "null" : self->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name7);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 148);
-exit(1);
-}
-var = self;
-goto RET_LABEL;
-}
-RET_LABEL:;
-return var;
-}
-/* method kernel#Comparable#min for (self: Object, Comparable): Comparable */
-val* VIRTUAL_kernel__Comparable__min(val* self, val* p0) {
-val* var /* : Comparable */;
-val* var1 /* : Comparable */;
-var1 = kernel__Comparable__min(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#succ for (self: Discrete): Discrete */
-val* kernel__Discrete__succ(val* self) {
-val* var /* : Discrete */;
-long var1 /* : Int */;
-val* var2 /* : Discrete */;
-var1 = 1;
-var2 = ((val* (*)(val*, long))(self->class->vft[COLOR_kernel__Discrete___43d]))(self, var1) /* + on <self:Discrete>*/;
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#succ for (self: Object): Discrete */
-val* VIRTUAL_kernel__Discrete__succ(val* self) {
-val* var /* : Discrete */;
-val* var1 /* : Discrete */;
-var1 = kernel__Discrete__succ(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#prec for (self: Discrete): Discrete */
-val* kernel__Discrete__prec(val* self) {
-val* var /* : Discrete */;
-long var1 /* : Int */;
-val* var2 /* : Discrete */;
-var1 = 1;
-var2 = ((val* (*)(val*, long))(self->class->vft[COLOR_kernel__Discrete___45d]))(self, var1) /* - on <self:Discrete>*/;
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#prec for (self: Object): Discrete */
-val* VIRTUAL_kernel__Discrete__prec(val* self) {
-val* var /* : Discrete */;
-val* var1 /* : Discrete */;
-var1 = kernel__Discrete__prec(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#+ for (self: Discrete, Int): Discrete */
-val* kernel__Discrete___43d(val* self, long p0) {
-val* var /* : Discrete */;
-const char* var_class_name;
-var_class_name = self == NULL ? "null" : self->type->name;
-fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "+", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 165);
-exit(1);
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#+ for (self: Object, Int): Discrete */
-val* VIRTUAL_kernel__Discrete___43d(val* self, long p0) {
-val* var /* : Discrete */;
-val* var1 /* : Discrete */;
-var1 = kernel__Discrete___43d(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#- for (self: Discrete, Int): Discrete */
-val* kernel__Discrete___45d(val* self, long p0) {
-val* var /* : Discrete */;
-const char* var_class_name;
-var_class_name = self == NULL ? "null" : self->type->name;
-fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "-", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 168);
-exit(1);
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#- for (self: Object, Int): Discrete */
-val* VIRTUAL_kernel__Discrete___45d(val* self, long p0) {
-val* var /* : Discrete */;
-val* var1 /* : Discrete */;
-var1 = kernel__Discrete___45d(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#distance for (self: Discrete, Discrete): Int */
-long kernel__Discrete__distance(val* self, val* p0) {
-long var /* : Int */;
-short int var1 /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-val* var_d /* var d: Discrete */;
-short int var2 /* : Bool */;
-short int var3 /* : Bool */;
-int cltype4;
-int idtype5;
-const struct type* type_struct6;
-const char* var_class_name7;
-val* var_cursor /* var cursor: Discrete */;
-val* var_stop /* var stop: Discrete */;
-short int var8 /* : Bool */;
-short int var9 /* : Bool */;
-int cltype10;
-int idtype11;
-const struct type* type_struct12;
-const char* var_class_name13;
-long var14 /* : Int */;
-long var15 /* : Int */;
-long var_nb /* var nb: Int */;
-short int var16 /* : Bool */;
-val* var17 /* : Discrete */;
-short int var18 /* : Bool */;
-int cltype19;
-int idtype20;
-const struct type* type_struct21;
-const char* var_class_name22;
-long var23 /* : Int */;
-long var24 /* : Int */;
-long var26 /* : Int */;
-/* Covariant cast for argument 0 (d) <p0:Discrete> isa OTHER */
-/* <p0:Discrete> isa OTHER */
-type_struct = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var1 = 0;
-} else {
-var1 = p0->type->type_table[cltype] == idtype;
-}
-if (!var1) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 171);
-exit(1);
-}
-var_d = p0;
-var2 = ((short int (*)(val*, val*))(self->class->vft[COLOR_kernel__Comparable___60d]))(self, var_d) /* < on <self:Discrete>*/;
-if (var2){
-/* <self:Discrete> isa OTHER */
-type_struct6 = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype4 = type_struct6->color;
-idtype5 = type_struct6->id;
-if(cltype4 >= self->type->table_size) {
-var3 = 0;
-} else {
-var3 = self->type->type_table[cltype4] == idtype5;
-}
-if (!var3) {
-var_class_name7 = self == NULL ? "null" : self->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name7);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 180);
-exit(1);
-}
-var_cursor = self;
-var_stop = var_d;
-} else {
-var8 = ((short int (*)(val*, val*))(self->class->vft[COLOR_kernel__Comparable___62d]))(self, var_d) /* > on <self:Discrete>*/;
-if (var8){
-var_cursor = var_d;
-/* <self:Discrete> isa OTHER */
-type_struct12 = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype10 = type_struct12->color;
-idtype11 = type_struct12->id;
-if(cltype10 >= self->type->table_size) {
-var9 = 0;
-} else {
-var9 = self->type->type_table[cltype10] == idtype11;
-}
-if (!var9) {
-var_class_name13 = self == NULL ? "null" : self->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name13);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 184);
-exit(1);
-}
-var_stop = self;
-} else {
-var14 = 0;
-var = var14;
-goto RET_LABEL;
-}
-}
-var15 = 0;
-var_nb = var15;
-for(;;) {
-var16 = ((short int (*)(val*, val*))(var_cursor->class->vft[COLOR_kernel__Comparable___60d]))(var_cursor, var_stop) /* < on <var_cursor:Discrete>*/;
-if (!var16) break;
-var17 = ((val* (*)(val*))(var_cursor->class->vft[COLOR_kernel__Discrete__succ]))(var_cursor) /* succ on <var_cursor:Discrete>*/;
-/* <var17:Discrete> isa OTHER */
-type_struct21 = self->type->resolution_table->types[COLOR_kernel__Comparable_VTOTHER];
-cltype19 = type_struct21->color;
-idtype20 = type_struct21->id;
-if(cltype19 >= var17->type->table_size) {
-var18 = 0;
-} else {
-var18 = var17->type->type_table[cltype19] == idtype20;
-}
-if (!var18) {
-var_class_name22 = var17 == NULL ? "null" : var17->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name22);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 191);
-exit(1);
-}
-var_cursor = var17;
-var23 = 1;
-{ /* Inline kernel#Int#+ (var_nb,var23) */
-var26 = var_nb + var23;
-var24 = var26;
-goto RET_LABEL25;
-RET_LABEL25:(void)0;
-}
-var_nb = var24;
-CONTINUE_label: (void)0;
-}
-BREAK_label: (void)0;
-var = var_nb;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Discrete#distance for (self: Object, Discrete): Int */
-long VIRTUAL_kernel__Discrete__distance(val* self, val* p0) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = kernel__Discrete__distance(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Bool#object_id for (self: Bool): Int */
-long kernel__Bool__object_id(short int self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = (long)self;
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method kernel#Bool#object_id for (self: Object): Int */
-long VIRTUAL_kernel__Bool__object_id(val* self) {