c_src: update
[nit.git] / c_src / poset.sep.1.c
index ec3f4d8..c04fc9f 100644 (file)
@@ -3,12 +3,38 @@
 val* poset__POSet__iterator(val* self) {
 val* var /* : Iterator[Object] */;
 val* var1 /* : HashMap[Object, POSetElement[Object]] */;
-val* var2 /* : Collection[Object] */;
-val* var3 /* : Iterator[nullable Object] */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var2 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__MapRead__keys]))(var1) /* keys on <var1:HashMap[Object, POSetElement[Object]]>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-var = var3;
+val* var3 /* : HashMap[Object, POSetElement[Object]] */;
+val* var4 /* : RemovableCollection[Object] */;
+val* var6 /* : RemovableCollection[Object] */;
+val* var7 /* : Iterator[nullable Object] */;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var3 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+{ /* Inline hash_collection#HashMap#keys (var1) on <var1:HashMap[Object, POSetElement[Object]]> */
+var6 = var1->attrs[COLOR_hash_collection__HashMap___keys].val; /* _keys on <var1:HashMap[Object, POSetElement[Object]]> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _keys");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/hash_collection.nit", 245);
+show_backtrace(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+{
+var7 = ((val* (*)(val*))(var4->class->vft[COLOR_abstract_collection__Collection__iterator]))(var4) /* iterator on <var4:RemovableCollection[Object]>*/;
+}
+var = var7;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -26,10 +52,10 @@ return var;
 val* poset__POSet__elements(val* self) {
 val* var /* : HashMap[Object, POSetElement[Object]] */;
 val* var1 /* : HashMap[Object, POSetElement[Object]] */;
-var1 = self->attrs[COLOR_poset__POSet___64delements].val; /* @elements on <self:POSet[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @elements");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 31);
+var1 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
 show_backtrace(1);
 }
 var = var1;
@@ -40,41 +66,20 @@ return var;
 val* VIRTUAL_poset__POSet__elements(val* self) {
 val* var /* : HashMap[Object, POSetElement[Object]] */;
 val* var1 /* : HashMap[Object, POSetElement[Object]] */;
-var1 = poset__POSet__elements(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSet#elements= for (self: POSet[Object], HashMap[Object, POSetElement[Object]]) */
-void poset__POSet__elements_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (elements) <p0:HashMap[Object, POSetElement[Object]]> isa HashMap[POSet#0, POSetElement[POSet#0]] */
-/* <p0:HashMap[Object, POSetElement[Object]]> isa HashMap[POSet#0, POSetElement[POSet#0]] */
-type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashMapposet__POSet_FT0poset__POSetElementposet__POSet_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "HashMap[POSet#0, POSetElement[POSet#0]]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 31);
+val* var3 /* : HashMap[Object, POSetElement[Object]] */;
+{ /* Inline poset#POSet#elements (self) on <self:Object(POSet[Object])> */
+var3 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:Object(POSet[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSet___64delements].val = p0; /* @elements on <self:POSet[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSet#elements= for (self: Object, HashMap[Object, POSetElement[Object]]) */
-void VIRTUAL_poset__POSet__elements_61d(val* self, val* p0) {
-poset__POSet__elements_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSet#has for (self: POSet[Object], Object): Bool */
 short int poset__POSet__has(val* self, val* p0) {
@@ -86,8 +91,10 @@ const struct type* type_struct;
 const char* var_class_name;
 val* var_e /* var e: Object */;
 val* var2 /* : HashMap[Object, POSetElement[Object]] */;
-val* var3 /* : Collection[Object] */;
-short int var4 /* : Bool */;
+val* var4 /* : HashMap[Object, POSetElement[Object]] */;
+val* var5 /* : RemovableCollection[Object] */;
+val* var7 /* : RemovableCollection[Object] */;
+short int var8 /* : Bool */;
 /* Covariant cast for argument 0 (e) <p0:Object> isa Collection#0 */
 /* <p0:Object> isa Collection#0 */
 type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collection_FT0];
@@ -98,17 +105,41 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 34);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 34);
 show_backtrace(1);
 }
 var_e = p0;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapRead__keys]))(var2) /* keys on <var2:HashMap[Object, POSetElement[Object]]>*/;
-var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_e) /* has on <var3:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-var = var4;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var4 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline hash_collection#HashMap#keys (var2) on <var2:HashMap[Object, POSetElement[Object]]> */
+var7 = var2->attrs[COLOR_hash_collection__HashMap___keys].val; /* _keys on <var2:HashMap[Object, POSetElement[Object]]> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _keys");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/hash_collection.nit", 245);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+var8 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_e) /* has on <var5:RemovableCollection[Object]>*/;
+}
+var = var8;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -132,17 +163,34 @@ const struct type* type_struct;
 const char* var_class_name;
 val* var_e /* var e: Object */;
 val* var2 /* : HashMap[Object, POSetElement[Object]] */;
-val* var3 /* : Collection[Object] */;
-short int var4 /* : Bool */;
-val* var5 /* : HashMap[Object, POSetElement[Object]] */;
-val* var6 /* : nullable Object */;
-val* var7 /* : POSetElement[Object] */;
-val* var8 /* : HashMap[Object, POSetElement[Object]] */;
-long var9 /* : Int */;
+val* var4 /* : HashMap[Object, POSetElement[Object]] */;
+val* var5 /* : RemovableCollection[Object] */;
+val* var7 /* : RemovableCollection[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : HashMap[Object, POSetElement[Object]] */;
+val* var11 /* : HashMap[Object, POSetElement[Object]] */;
+val* var12 /* : nullable Object */;
+val* var13 /* : POSetElement[Object] */;
+val* var14 /* : HashMap[Object, POSetElement[Object]] */;
+val* var16 /* : HashMap[Object, POSetElement[Object]] */;
+long var17 /* : Int */;
+short int var19 /* : Bool */;
+int cltype20;
+int idtype21;
+const struct type* type_struct22;
+const char* var_class_name23;
+short int var24 /* : Bool */;
+int cltype25;
+int idtype26;
+const struct type* type_struct27;
+const char* var_class_name28;
 val* var_poe /* var poe: POSetElement[Object] */;
-val* var10 /* : HashSet[Object] */;
-val* var11 /* : HashSet[Object] */;
-val* var12 /* : HashMap[Object, POSetElement[Object]] */;
+val* var29 /* : HashSet[Object] */;
+val* var31 /* : HashSet[Object] */;
+val* var32 /* : HashSet[Object] */;
+val* var34 /* : HashSet[Object] */;
+val* var35 /* : HashMap[Object, POSetElement[Object]] */;
+val* var37 /* : HashMap[Object, POSetElement[Object]] */;
 /* Covariant cast for argument 0 (e) <p0:Object> isa POSet#0 */
 /* <p0:Object> isa POSet#0 */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
@@ -153,34 +201,162 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 36);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 36);
 show_backtrace(1);
 }
 var_e = p0;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapRead__keys]))(var2) /* keys on <var2:HashMap[Object, POSetElement[Object]]>*/;
-var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_e) /* has on <var3:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-if (var4){
-var5 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var_e) /* [] on <var5:HashMap[Object, POSetElement[Object]]>*/;
-var = var6;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var4 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline hash_collection#HashMap#keys (var2) on <var2:HashMap[Object, POSetElement[Object]]> */
+var7 = var2->attrs[COLOR_hash_collection__HashMap___keys].val; /* _keys on <var2:HashMap[Object, POSetElement[Object]]> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _keys");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/hash_collection.nit", 245);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+var8 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_e) /* has on <var5:RemovableCollection[Object]>*/;
+}
+if (var8){
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var11 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+var12 = hash_collection__HashMap___91d_93d(var9, var_e);
+}
+var = var12;
 goto RET_LABEL;
 } else {
 }
-var7 = NEW_poset__POSetElement(self->type->resolution_table->types[COLOR_poset__POSetElementposet__POSet_FT0]);
-var8 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var9 = ((long (*)(val*))(var8->class->vft[COLOR_abstract_collection__MapRead__length]))(var8) /* length on <var8:HashMap[Object, POSetElement[Object]]>*/;
-((void (*)(val*, val*, val*, long))(var7->class->vft[COLOR_poset__POSetElement__init]))(var7, self, var_e, var9) /* init on <var7:POSetElement[Object]>*/;
-var_poe = var7;
-var10 = ((val* (*)(val*))(var_poe->class->vft[COLOR_poset__POSetElement__tos]))(var_poe) /* tos on <var_poe:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var10->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var10, var_e) /* add on <var10:HashSet[Object]>*/;
-var11 = ((val* (*)(val*))(var_poe->class->vft[COLOR_poset__POSetElement__froms]))(var_poe) /* froms on <var_poe:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var11->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var11, var_e) /* add on <var11:HashSet[Object]>*/;
-var12 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-((void (*)(val*, val*, val*))(var12->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var12, var_e, var_poe) /* []= on <var12:HashMap[Object, POSetElement[Object]]>*/;
+var13 = NEW_poset__POSetElement(self->type->resolution_table->types[COLOR_poset__POSetElementposet__POSet_FT0]);
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var16 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+{
+var17 = hash_collection__HashMap__length(var14);
+}
+{
+{ /* Inline poset#POSetElement#init (var13,self,var_e,var17) on <var13:POSetElement[Object]> */
+/* Covariant cast for argument 0 (poset) <self:POSet[Object]> isa POSet[POSetElement#0] */
+/* <self:POSet[Object]> isa POSet[POSetElement#0] */
+type_struct22 = var13->type->resolution_table->types[COLOR_poset__POSetposet__POSetElement_FT0];
+cltype20 = type_struct22->color;
+idtype21 = type_struct22->id;
+if(cltype20 >= self->type->table_size) {
+var19 = 0;
+} else {
+var19 = self->type->type_table[cltype20] == idtype21;
+}
+if (unlikely(!var19)) {
+var_class_name23 = self == NULL ? "null" : self->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetElement#0]", var_class_name23);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 175);
+show_backtrace(1);
+}
+/* Covariant cast for argument 1 (element) <var_e:Object> isa POSetElement#0 */
+/* <var_e:Object> isa POSetElement#0 */
+type_struct27 = var13->type->resolution_table->types[COLOR_poset__POSetElement_FT0];
+cltype25 = type_struct27->color;
+idtype26 = type_struct27->id;
+if(cltype25 >= var_e->type->table_size) {
+var24 = 0;
+} else {
+var24 = var_e->type->type_table[cltype25] == idtype26;
+}
+if (unlikely(!var24)) {
+var_class_name28 = var_e == NULL ? "null" : var_e->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name28);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 175);
+show_backtrace(1);
+}
+var13->attrs[COLOR_poset__POSetElement___poset].val = self; /* _poset on <var13:POSetElement[Object]> */
+var13->attrs[COLOR_poset__POSetElement___element].val = var_e; /* _element on <var13:POSetElement[Object]> */
+var13->attrs[COLOR_poset__POSetElement___count].l = var17; /* _count on <var13:POSetElement[Object]> */
+RET_LABEL18:(void)0;
+}
+}
+var_poe = var13;
+{
+{ /* Inline poset#POSetElement#tos (var_poe) on <var_poe:POSetElement[Object]> */
+var31 = var_poe->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_poe:POSetElement[Object]> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var29, var_e); /* Direct call hash_collection#HashSet#add on <var29:HashSet[Object]>*/
+}
+{
+{ /* Inline poset#POSetElement#froms (var_poe) on <var_poe:POSetElement[Object]> */
+var34 = var_poe->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <var_poe:POSetElement[Object]> */
+if (unlikely(var34 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
+show_backtrace(1);
+}
+var32 = var34;
+RET_LABEL33:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var32, var_e); /* Direct call hash_collection#HashSet#add on <var32:HashSet[Object]>*/
+}
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var37 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var37 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var35 = var37;
+RET_LABEL36:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var35, var_e, var_poe); /* Direct call hash_collection#HashMap#[]= on <var35:HashMap[Object, POSetElement[Object]]>*/
+}
 var = var_poe;
 goto RET_LABEL;
 RET_LABEL:;
@@ -205,10 +381,13 @@ const struct type* type_struct;
 const char* var_class_name;
 val* var_e /* var e: Object */;
 val* var2 /* : HashMap[Object, POSetElement[Object]] */;
-val* var3 /* : Collection[Object] */;
-short int var4 /* : Bool */;
-val* var5 /* : HashMap[Object, POSetElement[Object]] */;
-val* var6 /* : nullable Object */;
+val* var4 /* : HashMap[Object, POSetElement[Object]] */;
+val* var5 /* : RemovableCollection[Object] */;
+val* var7 /* : RemovableCollection[Object] */;
+short int var8 /* : Bool */;
+val* var9 /* : HashMap[Object, POSetElement[Object]] */;
+val* var11 /* : HashMap[Object, POSetElement[Object]] */;
+val* var12 /* : nullable Object */;
 /* Covariant cast for argument 0 (e) <p0:Object> isa POSet#0 */
 /* <p0:Object> isa POSet#0 */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
@@ -219,24 +398,61 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 50);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 50);
 show_backtrace(1);
 }
 var_e = p0;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__MapRead__keys]))(var2) /* keys on <var2:HashMap[Object, POSetElement[Object]]>*/;
-var4 = ((short int (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Collection__has]))(var3, var_e) /* has on <var3:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-if (!var4) {
-fprintf(stderr, "Runtime error: %s", "Assert failed");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 63);
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var4 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
 show_backtrace(1);
 }
-var5 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var6 = ((val* (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var5, var_e) /* [] on <var5:HashMap[Object, POSetElement[Object]]>*/;
-var = var6;
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+{ /* Inline hash_collection#HashMap#keys (var2) on <var2:HashMap[Object, POSetElement[Object]]> */
+var7 = var2->attrs[COLOR_hash_collection__HashMap___keys].val; /* _keys on <var2:HashMap[Object, POSetElement[Object]]> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _keys");
+PRINT_ERROR(" (%s:%d)\n", "lib/standard/collection/hash_collection.nit", 245);
+show_backtrace(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+var8 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_e) /* has on <var5:RemovableCollection[Object]>*/;
+}
+if (unlikely(!var8)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 63);
+show_backtrace(1);
+}
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var11 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+var12 = hash_collection__HashMap___91d_93d(var9, var_e);
+}
+var = var12;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -269,55 +485,75 @@ val* var_fe /* var fe: POSetElement[Object] */;
 val* var7 /* : POSetElement[Object] */;
 val* var_te /* var te: POSetElement[Object] */;
 val* var8 /* : HashSet[Object] */;
-short int var9 /* : Bool */;
 val* var10 /* : HashSet[Object] */;
-val* var11 /* : Iterator[nullable Object] */;
-short int var12 /* : Bool */;
-val* var13 /* : nullable Object */;
+short int var11 /* : Bool */;
+val* var12 /* : HashSet[Object] */;
+val* var14 /* : HashSet[Object] */;
+val* var15 /* : Iterator[Object] */;
+short int var16 /* : Bool */;
+val* var17 /* : nullable Object */;
 val* var_ff /* var ff: Object */;
-val* var14 /* : HashMap[Object, POSetElement[Object]] */;
-val* var15 /* : nullable Object */;
-val* var_ffe /* var ffe: POSetElement[Object] */;
-val* var16 /* : HashSet[Object] */;
-val* var17 /* : Iterator[nullable Object] */;
-short int var18 /* : Bool */;
-val* var19 /* : nullable Object */;
-val* var_tt /* var tt: Object */;
+val* var18 /* : HashMap[Object, POSetElement[Object]] */;
 val* var20 /* : HashMap[Object, POSetElement[Object]] */;
 val* var21 /* : nullable Object */;
-val* var_tte /* var tte: POSetElement[Object] */;
+val* var_ffe /* var ffe: POSetElement[Object] */;
 val* var22 /* : HashSet[Object] */;
-val* var23 /* : HashSet[Object] */;
-val* var25 /* : HashSet[Object] */;
+val* var24 /* : HashSet[Object] */;
+val* var25 /* : Iterator[Object] */;
 short int var26 /* : Bool */;
-val* var27 /* : HashSet[Object] */;
-val* var28 /* : Array[nullable Object] */;
-val* var29 /* : Iterator[nullable Object] */;
-short int var30 /* : Bool */;
+val* var27 /* : nullable Object */;
+val* var_tt /* var tt: Object */;
+val* var28 /* : HashMap[Object, POSetElement[Object]] */;
+val* var30 /* : HashMap[Object, POSetElement[Object]] */;
 val* var31 /* : nullable Object */;
-val* var_x /* var x: Object */;
-val* var32 /* : HashMap[Object, POSetElement[Object]] */;
-val* var33 /* : nullable Object */;
-val* var_xe /* var xe: POSetElement[Object] */;
+val* var_tte /* var tte: POSetElement[Object] */;
+val* var32 /* : HashSet[Object] */;
 val* var34 /* : HashSet[Object] */;
-short int var35 /* : Bool */;
-val* var36 /* : HashSet[Object] */;
+val* var35 /* : HashSet[Object] */;
 val* var37 /* : HashSet[Object] */;
 val* var39 /* : HashSet[Object] */;
-val* var40 /* : Array[nullable Object] */;
-val* var41 /* : Iterator[nullable Object] */;
+val* var41 /* : HashSet[Object] */;
 short int var42 /* : Bool */;
-val* var43 /* : nullable Object */;
-val* var_x44 /* var x: Object */;
-val* var45 /* : HashMap[Object, POSetElement[Object]] */;
-val* var46 /* : nullable Object */;
-val* var_xe47 /* var xe: POSetElement[Object] */;
-val* var48 /* : HashSet[Object] */;
-short int var49 /* : Bool */;
-val* var50 /* : HashSet[Object] */;
-val* var51 /* : HashSet[Object] */;
-val* var53 /* : HashSet[Object] */;
+val* var43 /* : HashSet[Object] */;
+val* var45 /* : HashSet[Object] */;
+val* var46 /* : Array[nullable Object] */;
+val* var47 /* : ArrayIterator[nullable Object] */;
+short int var48 /* : Bool */;
+val* var49 /* : nullable Object */;
+val* var_x /* var x: Object */;
+val* var50 /* : HashMap[Object, POSetElement[Object]] */;
+val* var52 /* : HashMap[Object, POSetElement[Object]] */;
+val* var53 /* : nullable Object */;
+val* var_xe /* var xe: POSetElement[Object] */;
 val* var54 /* : HashSet[Object] */;
+val* var56 /* : HashSet[Object] */;
+short int var57 /* : Bool */;
+val* var58 /* : HashSet[Object] */;
+val* var60 /* : HashSet[Object] */;
+val* var61 /* : HashSet[Object] */;
+val* var63 /* : HashSet[Object] */;
+val* var65 /* : HashSet[Object] */;
+val* var67 /* : HashSet[Object] */;
+val* var68 /* : Array[nullable Object] */;
+val* var69 /* : ArrayIterator[nullable Object] */;
+short int var70 /* : Bool */;
+val* var71 /* : nullable Object */;
+val* var_x72 /* var x: Object */;
+val* var73 /* : HashMap[Object, POSetElement[Object]] */;
+val* var75 /* : HashMap[Object, POSetElement[Object]] */;
+val* var76 /* : nullable Object */;
+val* var_xe77 /* var xe: POSetElement[Object] */;
+val* var78 /* : HashSet[Object] */;
+val* var80 /* : HashSet[Object] */;
+short int var81 /* : Bool */;
+val* var82 /* : HashSet[Object] */;
+val* var84 /* : HashSet[Object] */;
+val* var85 /* : HashSet[Object] */;
+val* var87 /* : HashSet[Object] */;
+val* var89 /* : HashSet[Object] */;
+val* var91 /* : HashSet[Object] */;
+val* var92 /* : HashSet[Object] */;
+val* var94 /* : HashSet[Object] */;
 /* Covariant cast for argument 0 (f) <p0:Object> isa POSet#0 */
 /* <p0:Object> isa POSet#0 */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
@@ -328,10 +564,10 @@ var = 0;
 } else {
 var = p0->type->type_table[cltype] == idtype;
 }
-if (!var) {
+if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 67);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 67);
 show_backtrace(1);
 }
 /* Covariant cast for argument 1 (t) <p1:Object> isa POSet#0 */
@@ -344,124 +580,416 @@ var1 = 0;
 } else {
 var1 = p1->type->type_table[cltype2] == idtype3;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name5);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 67);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name5);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 67);
 show_backtrace(1);
 }
 var_f = p0;
 var_t = p1;
-var6 = ((val* (*)(val*, val*))(self->class->vft[COLOR_poset__POSet__add_node]))(self, var_f) /* add_node on <self:POSet[Object]>*/;
+{
+var6 = poset__POSet__add_node(self, var_f);
+}
 var_fe = var6;
-var7 = ((val* (*)(val*, val*))(self->class->vft[COLOR_poset__POSet__add_node]))(self, var_t) /* add_node on <self:POSet[Object]>*/;
+{
+var7 = poset__POSet__add_node(self, var_t);
+}
 var_te = var7;
-var8 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__tos]))(var_fe) /* tos on <var_fe:POSetElement[Object]>*/;
-var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_t) /* has on <var8:HashSet[Object]>*/;
-if (var9){
+{
+{ /* Inline poset#POSetElement#tos (var_fe) on <var_fe:POSetElement[Object]> */
+var10 = var_fe->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_fe:POSetElement[Object]> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+var11 = hash_collection__HashSet__has(var8, var_t);
+}
+if (var11){
 goto RET_LABEL;
 } else {
 }
-var10 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__froms]))(var_fe) /* froms on <var_fe:POSetElement[Object]>*/;
-var11 = ((val* (*)(val*))(var10->class->vft[COLOR_abstract_collection__Collection__iterator]))(var10) /* iterator on <var10:HashSet[Object]>*/;
+{
+{ /* Inline poset#POSetElement#froms (var_fe) on <var_fe:POSetElement[Object]> */
+var14 = var_fe->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <var_fe:POSetElement[Object]> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
+show_backtrace(1);
+}
+var12 = var14;
+RET_LABEL13:(void)0;
+}
+}
+{
+var15 = hash_collection__HashSet__iterator(var12);
+}
 for(;;) {
-var12 = ((short int (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var11) /* is_ok on <var11:Iterator[nullable Object]>*/;
-if(!var12) break;
-var13 = ((val* (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__item]))(var11) /* item on <var11:Iterator[nullable Object]>*/;
-var_ff = var13;
-var14 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var15 = ((val* (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var14, var_ff) /* [] on <var14:HashMap[Object, POSetElement[Object]]>*/;
-var_ffe = var15;
-var16 = ((val* (*)(val*))(var_te->class->vft[COLOR_poset__POSetElement__tos]))(var_te) /* tos on <var_te:POSetElement[Object]>*/;
-var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_collection__Collection__iterator]))(var16) /* iterator on <var16:HashSet[Object]>*/;
+{
+var16 = ((short int (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var15) /* is_ok on <var15:Iterator[Object]>*/;
+}
+if(!var16) break;
+{
+var17 = ((val* (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__item]))(var15) /* item on <var15:Iterator[Object]>*/;
+}
+var_ff = var17;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var20 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+var21 = hash_collection__HashMap___91d_93d(var18, var_ff);
+}
+var_ffe = var21;
+{
+{ /* Inline poset#POSetElement#tos (var_te) on <var_te:POSetElement[Object]> */
+var24 = var_te->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_te:POSetElement[Object]> */
+if (unlikely(var24 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var22 = var24;
+RET_LABEL23:(void)0;
+}
+}
+{
+var25 = hash_collection__HashSet__iterator(var22);
+}
 for(;;) {
-var18 = ((short int (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var17) /* is_ok on <var17:Iterator[nullable Object]>*/;
-if(!var18) break;
-var19 = ((val* (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__item]))(var17) /* item on <var17:Iterator[nullable Object]>*/;
-var_tt = var19;
-var20 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var21 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var20, var_tt) /* [] on <var20:HashMap[Object, POSetElement[Object]]>*/;
-var_tte = var21;
-var22 = ((val* (*)(val*))(var_tte->class->vft[COLOR_poset__POSetElement__froms]))(var_tte) /* froms on <var_tte:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var22->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var22, var_ff) /* add on <var22:HashSet[Object]>*/;
-var23 = ((val* (*)(val*))(var_ffe->class->vft[COLOR_poset__POSetElement__tos]))(var_ffe) /* tos on <var_ffe:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var23->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var23, var_tt) /* add on <var23:HashSet[Object]>*/;
+{
+var26 = ((short int (*)(val*))(var25->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var25) /* is_ok on <var25:Iterator[Object]>*/;
+}
+if(!var26) break;
+{
+var27 = ((val* (*)(val*))(var25->class->vft[COLOR_abstract_collection__Iterator__item]))(var25) /* item on <var25:Iterator[Object]>*/;
+}
+var_tt = var27;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var30 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var30 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var28 = var30;
+RET_LABEL29:(void)0;
+}
+}
+{
+var31 = hash_collection__HashMap___91d_93d(var28, var_tt);
+}
+var_tte = var31;
+{
+{ /* Inline poset#POSetElement#froms (var_tte) on <var_tte:POSetElement[Object]> */
+var34 = var_tte->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <var_tte:POSetElement[Object]> */
+if (unlikely(var34 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
+show_backtrace(1);
+}
+var32 = var34;
+RET_LABEL33:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var32, var_ff); /* Direct call hash_collection#HashSet#add on <var32:HashSet[Object]>*/
+}
+{
+{ /* Inline poset#POSetElement#tos (var_ffe) on <var_ffe:POSetElement[Object]> */
+var37 = var_ffe->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_ffe:POSetElement[Object]> */
+if (unlikely(var37 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var35 = var37;
+RET_LABEL36:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var35, var_tt); /* Direct call hash_collection#HashSet#add on <var35:HashSet[Object]>*/
+}
 CONTINUE_label: (void)0;
-((void (*)(val*))(var17->class->vft[COLOR_abstract_collection__Iterator__next]))(var17) /* next on <var17:Iterator[nullable Object]>*/;
+{
+((void (*)(val*))(var25->class->vft[COLOR_abstract_collection__Iterator__next]))(var25) /* next on <var25:Iterator[Object]>*/;
+}
 }
 BREAK_label: (void)0;
-CONTINUE_label24: (void)0;
-((void (*)(val*))(var11->class->vft[COLOR_abstract_collection__Iterator__next]))(var11) /* next on <var11:Iterator[nullable Object]>*/;
+CONTINUE_label38: (void)0;
+{
+((void (*)(val*))(var15->class->vft[COLOR_abstract_collection__Iterator__next]))(var15) /* next on <var15:Iterator[Object]>*/;
+}
+}
+BREAK_label38: (void)0;
+{
+{ /* Inline poset#POSetElement#tos (var_te) on <var_te:POSetElement[Object]> */
+var41 = var_te->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_te:POSetElement[Object]> */
+if (unlikely(var41 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
 }
-BREAK_label24: (void)0;
-var25 = ((val* (*)(val*))(var_te->class->vft[COLOR_poset__POSetElement__tos]))(var_te) /* tos on <var_te:POSetElement[Object]>*/;
-var26 = ((short int (*)(val*, val*))(var25->class->vft[COLOR_abstract_collection__Collection__has]))(var25, var_f) /* has on <var25:HashSet[Object]>*/;
-if (var26){
+var39 = var41;
+RET_LABEL40:(void)0;
+}
+}
+{
+var42 = hash_collection__HashSet__has(var39, var_f);
+}
+if (var42){
 goto RET_LABEL;
 } else {
 }
-var27 = ((val* (*)(val*))(var_te->class->vft[COLOR_poset__POSetElement__dfroms]))(var_te) /* dfroms on <var_te:POSetElement[Object]>*/;
-var28 = ((val* (*)(val*))(var27->class->vft[COLOR_array__Collection__to_a]))(var27) /* to_a on <var27:HashSet[Object]>*/;
-var29 = ((val* (*)(val*))(var28->class->vft[COLOR_abstract_collection__Collection__iterator]))(var28) /* iterator on <var28:Array[nullable Object](Array[Object])>*/;
+{
+{ /* Inline poset#POSetElement#dfroms (var_te) on <var_te:POSetElement[Object]> */
+var45 = var_te->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <var_te:POSetElement[Object]> */
+if (unlikely(var45 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
+show_backtrace(1);
+}
+var43 = var45;
+RET_LABEL44:(void)0;
+}
+}
+{
+var46 = array__Collection__to_a(var43);
+}
+{
+var47 = array__AbstractArrayRead__iterator(var46);
+}
 for(;;) {
-var30 = ((short int (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var29) /* is_ok on <var29:Iterator[nullable Object]>*/;
-if(!var30) break;
-var31 = ((val* (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__item]))(var29) /* item on <var29:Iterator[nullable Object]>*/;
-var_x = var31;
-var32 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var33 = ((val* (*)(val*, val*))(var32->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var32, var_x) /* [] on <var32:HashMap[Object, POSetElement[Object]]>*/;
-var_xe = var33;
-var34 = ((val* (*)(val*))(var_xe->class->vft[COLOR_poset__POSetElement__tos]))(var_xe) /* tos on <var_xe:POSetElement[Object]>*/;
-var35 = ((short int (*)(val*, val*))(var34->class->vft[COLOR_abstract_collection__Collection__has]))(var34, var_f) /* has on <var34:HashSet[Object]>*/;
-if (var35){
-var36 = ((val* (*)(val*))(var_te->class->vft[COLOR_poset__POSetElement__dfroms]))(var_te) /* dfroms on <var_te:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var36->class->vft[COLOR_abstract_collection__RemovableCollection__remove]))(var36, var_x) /* remove on <var36:HashSet[Object]>*/;
-var37 = ((val* (*)(val*))(var_xe->class->vft[COLOR_poset__POSetElement__dtos]))(var_xe) /* dtos on <var_xe:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var37->class->vft[COLOR_abstract_collection__RemovableCollection__remove]))(var37, var_t) /* remove on <var37:HashSet[Object]>*/;
+{
+var48 = array__ArrayIterator__is_ok(var47);
+}
+if(!var48) break;
+{
+var49 = array__ArrayIterator__item(var47);
+}
+var_x = var49;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var52 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var52 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var50 = var52;
+RET_LABEL51:(void)0;
+}
+}
+{
+var53 = hash_collection__HashMap___91d_93d(var50, var_x);
+}
+var_xe = var53;
+{
+{ /* Inline poset#POSetElement#tos (var_xe) on <var_xe:POSetElement[Object]> */
+var56 = var_xe->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_xe:POSetElement[Object]> */
+if (unlikely(var56 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var54 = var56;
+RET_LABEL55:(void)0;
+}
+}
+{
+var57 = hash_collection__HashSet__has(var54, var_f);
+}
+if (var57){
+{
+{ /* Inline poset#POSetElement#dfroms (var_te) on <var_te:POSetElement[Object]> */
+var60 = var_te->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <var_te:POSetElement[Object]> */
+if (unlikely(var60 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
+show_backtrace(1);
+}
+var58 = var60;
+RET_LABEL59:(void)0;
+}
+}
+{
+hash_collection__HashSet__remove(var58, var_x); /* Direct call hash_collection#HashSet#remove on <var58:HashSet[Object]>*/
+}
+{
+{ /* Inline poset#POSetElement#dtos (var_xe) on <var_xe:POSetElement[Object]> */
+var63 = var_xe->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <var_xe:POSetElement[Object]> */
+if (unlikely(var63 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
+show_backtrace(1);
+}
+var61 = var63;
+RET_LABEL62:(void)0;
+}
+}
+{
+hash_collection__HashSet__remove(var61, var_t); /* Direct call hash_collection#HashSet#remove on <var61:HashSet[Object]>*/
+}
 } else {
 }
-CONTINUE_label38: (void)0;
-((void (*)(val*))(var29->class->vft[COLOR_abstract_collection__Iterator__next]))(var29) /* next on <var29:Iterator[nullable Object]>*/;
+CONTINUE_label64: (void)0;
+{
+array__ArrayIterator__next(var47); /* Direct call array#ArrayIterator#next on <var47:ArrayIterator[nullable Object]>*/
+}
+}
+BREAK_label64: (void)0;
+{
+{ /* Inline poset#POSetElement#dtos (var_fe) on <var_fe:POSetElement[Object]> */
+var67 = var_fe->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <var_fe:POSetElement[Object]> */
+if (unlikely(var67 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
+show_backtrace(1);
+}
+var65 = var67;
+RET_LABEL66:(void)0;
+}
+}
+{
+var68 = array__Collection__to_a(var65);
+}
+{
+var69 = array__AbstractArrayRead__iterator(var68);
 }
-BREAK_label38: (void)0;
-var39 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__dtos]))(var_fe) /* dtos on <var_fe:POSetElement[Object]>*/;
-var40 = ((val* (*)(val*))(var39->class->vft[COLOR_array__Collection__to_a]))(var39) /* to_a on <var39:HashSet[Object]>*/;
-var41 = ((val* (*)(val*))(var40->class->vft[COLOR_abstract_collection__Collection__iterator]))(var40) /* iterator on <var40:Array[nullable Object](Array[Object])>*/;
 for(;;) {
-var42 = ((short int (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var41) /* is_ok on <var41:Iterator[nullable Object]>*/;
-if(!var42) break;
-var43 = ((val* (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__item]))(var41) /* item on <var41:Iterator[nullable Object]>*/;
-var_x44 = var43;
-var45 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var46 = ((val* (*)(val*, val*))(var45->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var45, var_x44) /* [] on <var45:HashMap[Object, POSetElement[Object]]>*/;
-var_xe47 = var46;
-var48 = ((val* (*)(val*))(var_xe47->class->vft[COLOR_poset__POSetElement__froms]))(var_xe47) /* froms on <var_xe47:POSetElement[Object]>*/;
-var49 = ((short int (*)(val*, val*))(var48->class->vft[COLOR_abstract_collection__Collection__has]))(var48, var_t) /* has on <var48:HashSet[Object]>*/;
-if (var49){
-var50 = ((val* (*)(val*))(var_xe47->class->vft[COLOR_poset__POSetElement__dfroms]))(var_xe47) /* dfroms on <var_xe47:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var50->class->vft[COLOR_abstract_collection__RemovableCollection__remove]))(var50, var_f) /* remove on <var50:HashSet[Object]>*/;
-var51 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__dtos]))(var_fe) /* dtos on <var_fe:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var51->class->vft[COLOR_abstract_collection__RemovableCollection__remove]))(var51, var_x44) /* remove on <var51:HashSet[Object]>*/;
+{
+var70 = array__ArrayIterator__is_ok(var69);
+}
+if(!var70) break;
+{
+var71 = array__ArrayIterator__item(var69);
+}
+var_x72 = var71;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var75 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var75 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var73 = var75;
+RET_LABEL74:(void)0;
+}
+}
+{
+var76 = hash_collection__HashMap___91d_93d(var73, var_x72);
+}
+var_xe77 = var76;
+{
+{ /* Inline poset#POSetElement#froms (var_xe77) on <var_xe77:POSetElement[Object]> */
+var80 = var_xe77->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <var_xe77:POSetElement[Object]> */
+if (unlikely(var80 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
+show_backtrace(1);
+}
+var78 = var80;
+RET_LABEL79:(void)0;
+}
+}
+{
+var81 = hash_collection__HashSet__has(var78, var_t);
+}
+if (var81){
+{
+{ /* Inline poset#POSetElement#dfroms (var_xe77) on <var_xe77:POSetElement[Object]> */
+var84 = var_xe77->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <var_xe77:POSetElement[Object]> */
+if (unlikely(var84 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
+show_backtrace(1);
+}
+var82 = var84;
+RET_LABEL83:(void)0;
+}
+}
+{
+hash_collection__HashSet__remove(var82, var_f); /* Direct call hash_collection#HashSet#remove on <var82:HashSet[Object]>*/
+}
+{
+{ /* Inline poset#POSetElement#dtos (var_fe) on <var_fe:POSetElement[Object]> */
+var87 = var_fe->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <var_fe:POSetElement[Object]> */
+if (unlikely(var87 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
+show_backtrace(1);
+}
+var85 = var87;
+RET_LABEL86:(void)0;
+}
+}
+{
+hash_collection__HashSet__remove(var85, var_x72); /* Direct call hash_collection#HashSet#remove on <var85:HashSet[Object]>*/
+}
 } else {
 }
-CONTINUE_label52: (void)0;
-((void (*)(val*))(var41->class->vft[COLOR_abstract_collection__Iterator__next]))(var41) /* next on <var41:Iterator[nullable Object]>*/;
+CONTINUE_label88: (void)0;
+{
+array__ArrayIterator__next(var69); /* Direct call array#ArrayIterator#next on <var69:ArrayIterator[nullable Object]>*/
+}
+}
+BREAK_label88: (void)0;
+{
+{ /* Inline poset#POSetElement#dtos (var_fe) on <var_fe:POSetElement[Object]> */
+var91 = var_fe->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <var_fe:POSetElement[Object]> */
+if (unlikely(var91 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
+show_backtrace(1);
+}
+var89 = var91;
+RET_LABEL90:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var89, var_t); /* Direct call hash_collection#HashSet#add on <var89:HashSet[Object]>*/
+}
+{
+{ /* Inline poset#POSetElement#dfroms (var_te) on <var_te:POSetElement[Object]> */
+var94 = var_te->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <var_te:POSetElement[Object]> */
+if (unlikely(var94 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
+show_backtrace(1);
+}
+var92 = var94;
+RET_LABEL93:(void)0;
+}
+}
+{
+hash_collection__HashSet__add(var92, var_f); /* Direct call hash_collection#HashSet#add on <var92:HashSet[Object]>*/
 }
-BREAK_label52: (void)0;
-var53 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__dtos]))(var_fe) /* dtos on <var_fe:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var53->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var53, var_t) /* add on <var53:HashSet[Object]>*/;
-var54 = ((val* (*)(val*))(var_te->class->vft[COLOR_poset__POSetElement__dfroms]))(var_te) /* dfroms on <var_te:POSetElement[Object]>*/;
-((void (*)(val*, val*))(var54->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var54, var_f) /* add on <var54:HashSet[Object]>*/;
 RET_LABEL:;
 }
 /* method poset#POSet#add_edge for (self: Object, Object, Object) */
 void VIRTUAL_poset__POSet__add_edge(val* self, val* p0, val* p1) {
-poset__POSet__add_edge(self, p0, p1);
+poset__POSet__add_edge(self, p0, p1); /* Direct call poset#POSet#add_edge on <self:Object(POSet[Object])>*/
 RET_LABEL:;
 }
-/* method poset#POSet#has_edge for (self: POSet[Object], Object, Object): Bool */
-short int poset__POSet__has_edge(val* self, val* p0, val* p1) {
-short int var /* : Bool */;
+/* method poset#POSet#compare for (self: POSet[Object], Object, Object): Int */
+long poset__POSet__compare(val* self, val* p0, val* p1) {
+long var /* : Int */;
 short int var1 /* : Bool */;
 int cltype;
 int idtype;
@@ -472,19 +1000,41 @@ int cltype3;
 int idtype4;
 const struct type* type_struct5;
 const char* var_class_name6;
-val* var_f /* var f: Object */;
-val* var_t /* var t: Object */;
+val* var_a /* var a: Object */;
+val* var_b /* var b: Object */;
 val* var7 /* : HashMap[Object, POSetElement[Object]] */;
-val* var8 /* : Collection[Object] */;
-short int var9 /* : Bool */;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-val* var12 /* : HashMap[Object, POSetElement[Object]] */;
-val* var13 /* : nullable Object */;
-val* var_fe /* var fe: POSetElement[Object] */;
-val* var14 /* : HashSet[Object] */;
-short int var15 /* : Bool */;
-/* Covariant cast for argument 0 (f) <p0:Object> isa POSet#0 */
+val* var9 /* : HashMap[Object, POSetElement[Object]] */;
+val* var10 /* : nullable Object */;
+val* var_ae /* var ae: POSetElement[Object] */;
+val* var11 /* : HashMap[Object, POSetElement[Object]] */;
+val* var13 /* : HashMap[Object, POSetElement[Object]] */;
+val* var14 /* : nullable Object */;
+val* var_be /* var be: POSetElement[Object] */;
+val* var15 /* : HashSet[Object] */;
+val* var17 /* : HashSet[Object] */;
+long var18 /* : Int */;
+val* var19 /* : HashSet[Object] */;
+val* var21 /* : HashSet[Object] */;
+long var22 /* : Int */;
+long var23 /* : Int */;
+long var_res /* var res: Int */;
+long var24 /* : Int */;
+short int var25 /* : Bool */;
+short int var26 /* : Bool */;
+short int var28 /* : Bool */;
+short int var29 /* : Bool */;
+val* var30 /* : HashMap[Object, POSetElement[Object]] */;
+val* var32 /* : HashMap[Object, POSetElement[Object]] */;
+val* var33 /* : nullable Object */;
+long var34 /* : Int */;
+long var36 /* : Int */;
+val* var37 /* : HashMap[Object, POSetElement[Object]] */;
+val* var39 /* : HashMap[Object, POSetElement[Object]] */;
+val* var40 /* : nullable Object */;
+long var41 /* : Int */;
+long var43 /* : Int */;
+long var44 /* : Int */;
+/* Covariant cast for argument 0 (a) <p0:Object> isa POSet#0 */
 /* <p0:Object> isa POSet#0 */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
 cltype = type_struct->color;
@@ -494,13 +1044,13 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 109);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 151);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (t) <p1:Object> isa POSet#0 */
+/* Covariant cast for argument 1 (b) <p1:Object> isa POSet#0 */
 /* <p1:Object> isa POSet#0 */
 type_struct5 = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
 cltype3 = type_struct5->color;
@@ -510,460 +1060,171 @@ var2 = 0;
 } else {
 var2 = p1->type->type_table[cltype3] == idtype4;
 }
-if (!var2) {
+if (unlikely(!var2)) {
 var_class_name6 = p1 == NULL ? "null" : p1->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name6);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 109);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 151);
 show_backtrace(1);
 }
-var_f = p0;
-var_t = p1;
-var7 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapRead__keys]))(var7) /* keys on <var7:HashMap[Object, POSetElement[Object]]>*/;
-var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_f) /* has on <var8:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-var10 = !var9;
-if (var10){
-var11 = 0;
-var = var11;
-goto RET_LABEL;
-} else {
+var_a = p0;
+var_b = p1;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var9 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
 }
-var12 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var13 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var12, var_f) /* [] on <var12:HashMap[Object, POSetElement[Object]]>*/;
-var_fe = var13;
-var14 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__tos]))(var_fe) /* tos on <var_fe:POSetElement[Object]>*/;
-var15 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__Collection__has]))(var14, var_t) /* has on <var14:HashSet[Object]>*/;
-var = var15;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var7 = var9;
+RET_LABEL8:(void)0;
 }
-/* method poset#POSet#has_edge for (self: Object, Object, Object): Bool */
-short int VIRTUAL_poset__POSet__has_edge(val* self, val* p0, val* p1) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = poset__POSet__has_edge(self, p0, p1);
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method poset#POSet#has_direct_edge for (self: POSet[Object], Object, Object): Bool */
-short int poset__POSet__has_direct_edge(val* self, val* p0, val* p1) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-short int var2 /* : Bool */;
-int cltype3;
-int idtype4;
-const struct type* type_struct5;
-const char* var_class_name6;
-val* var_f /* var f: Object */;
-val* var_t /* var t: Object */;
-val* var7 /* : HashMap[Object, POSetElement[Object]] */;
-val* var8 /* : Collection[Object] */;
-short int var9 /* : Bool */;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-val* var12 /* : HashMap[Object, POSetElement[Object]] */;
-val* var13 /* : nullable Object */;
-val* var_fe /* var fe: POSetElement[Object] */;
-val* var14 /* : HashSet[Object] */;
-short int var15 /* : Bool */;
-/* Covariant cast for argument 0 (f) <p0:Object> isa POSet#0 */
-/* <p0:Object> isa POSet#0 */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var1 = 0;
-} else {
-var1 = p0->type->type_table[cltype] == idtype;
+{
+var10 = hash_collection__HashMap___91d_93d(var7, var_a);
 }
-if (!var1) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 118);
+var_ae = var10;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var13 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
 show_backtrace(1);
 }
-/* Covariant cast for argument 1 (t) <p1:Object> isa POSet#0 */
-/* <p1:Object> isa POSet#0 */
-type_struct5 = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
-cltype3 = type_struct5->color;
-idtype4 = type_struct5->id;
-if(cltype3 >= p1->type->table_size) {
-var2 = 0;
-} else {
-var2 = p1->type->type_table[cltype3] == idtype4;
+var11 = var13;
+RET_LABEL12:(void)0;
 }
-if (!var2) {
-var_class_name6 = p1 == NULL ? "null" : p1->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name6);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 118);
+}
+{
+var14 = hash_collection__HashMap___91d_93d(var11, var_b);
+}
+var_be = var14;
+{
+{ /* Inline poset#POSetElement#tos (var_ae) on <var_ae:POSetElement[Object]> */
+var17 = var_ae->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_ae:POSetElement[Object]> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
 show_backtrace(1);
 }
-var_f = p0;
-var_t = p1;
-var7 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var8 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__MapRead__keys]))(var7) /* keys on <var7:HashMap[Object, POSetElement[Object]]>*/;
-var9 = ((short int (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__Collection__has]))(var8, var_f) /* has on <var8:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-var10 = !var9;
-if (var10){
-var11 = 0;
-var = var11;
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+{
+var18 = hash_collection__HashSet__length(var15);
+}
+{
+{ /* Inline poset#POSetElement#tos (var_be) on <var_be:POSetElement[Object]> */
+var21 = var_be->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <var_be:POSetElement[Object]> */
+if (unlikely(var21 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var19 = var21;
+RET_LABEL20:(void)0;
+}
+}
+{
+var22 = hash_collection__HashSet__length(var19);
+}
+{
+var23 = kernel__Int___60d_61d_62d(var18, var22);
+}
+var_res = var23;
+var24 = 0;
+{
+{ /* Inline kernel#Int#!= (var_res,var24) on <var_res:Int> */
+var28 = var_res == var24;
+var29 = !var28;
+var26 = var29;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
+}
+var25 = var26;
+}
+if (var25){
+var = var_res;
 goto RET_LABEL;
 } else {
 }
-var12 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var13 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var12, var_f) /* [] on <var12:HashMap[Object, POSetElement[Object]]>*/;
-var_fe = var13;
-var14 = ((val* (*)(val*))(var_fe->class->vft[COLOR_poset__POSetElement__dtos]))(var_fe) /* dtos on <var_fe:POSetElement[Object]>*/;
-var15 = ((short int (*)(val*, val*))(var14->class->vft[COLOR_abstract_collection__Collection__has]))(var14, var_t) /* has on <var14:HashSet[Object]>*/;
-var = var15;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var32 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var32 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
 }
-/* method poset#POSet#has_direct_edge for (self: Object, Object, Object): Bool */
-short int VIRTUAL_poset__POSet__has_direct_edge(val* self, val* p0, val* p1) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = poset__POSet__has_direct_edge(self, p0, p1);
-var = var1;
-RET_LABEL:;
-return var;
+var30 = var32;
+RET_LABEL31:(void)0;
 }
-/* method poset#POSet#show_dot for (self: POSet[Object]) */
-void poset__POSet__show_dot(val* self) {
-val* var /* : OProcess */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : String */;
-static val* varonce5;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : String */;
-val* var10 /* : Array[String] */;
-long var11 /* : Int */;
-val* var12 /* : NativeArray[String] */;
-val* var_f /* var f: OProcess */;
-static val* varonce13;
-val* var14 /* : String */;
-char* var15 /* : NativeString */;
-long var16 /* : Int */;
-val* var17 /* : String */;
-val* var18 /* : HashMap[Object, POSetElement[Object]] */;
-val* var19 /* : Collection[Object] */;
-val* var20 /* : Iterator[nullable Object] */;
-short int var21 /* : Bool */;
-val* var22 /* : nullable Object */;
-val* var_x /* var x: Object */;
-static val* varonce23;
-val* var24 /* : String */;
-char* var25 /* : NativeString */;
-long var26 /* : Int */;
-val* var27 /* : String */;
-static val* varonce28;
-val* var29 /* : String */;
-char* var30 /* : NativeString */;
-long var31 /* : Int */;
-val* var32 /* : String */;
-val* var33 /* : Array[Object] */;
-long var34 /* : Int */;
-val* var35 /* : NativeArray[Object] */;
-val* var36 /* : String */;
-val* var37 /* : HashMap[Object, POSetElement[Object]] */;
-val* var38 /* : nullable Object */;
-val* var_xe /* var xe: POSetElement[Object] */;
-val* var39 /* : HashSet[Object] */;
-val* var40 /* : Iterator[nullable Object] */;
-short int var41 /* : Bool */;
-val* var42 /* : nullable Object */;
-val* var_y /* var y: Object */;
-short int var43 /* : Bool */;
-static val* varonce44;
-val* var45 /* : String */;
-char* var46 /* : NativeString */;
-long var47 /* : Int */;
-val* var48 /* : String */;
-static val* varonce49;
-val* var50 /* : String */;
-char* var51 /* : NativeString */;
-long var52 /* : Int */;
-val* var53 /* : String */;
-static val* varonce54;
-val* var55 /* : String */;
-char* var56 /* : NativeString */;
-long var57 /* : Int */;
-val* var58 /* : String */;
-val* var59 /* : Array[Object] */;
-long var60 /* : Int */;
-val* var61 /* : NativeArray[Object] */;
-val* var62 /* : String */;
-static val* varonce63;
-val* var64 /* : String */;
-char* var65 /* : NativeString */;
-long var66 /* : Int */;
-val* var67 /* : String */;
-static val* varonce68;
-val* var69 /* : String */;
-char* var70 /* : NativeString */;
-long var71 /* : Int */;
-val* var72 /* : String */;
-static val* varonce73;
-val* var74 /* : String */;
-char* var75 /* : NativeString */;
-long var76 /* : Int */;
-val* var77 /* : String */;
-val* var78 /* : Array[Object] */;
-long var79 /* : Int */;
-val* var80 /* : NativeArray[Object] */;
-val* var81 /* : String */;
-static val* varonce83;
-val* var84 /* : String */;
-char* var85 /* : NativeString */;
-long var86 /* : Int */;
-val* var87 /* : String */;
-var = NEW_exec__OProcess(&type_exec__OProcess);
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "dot";
-var3 = 3;
-var4 = string__NativeString__to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
-}
-if (varonce5) {
-var6 = varonce5;
-} else {
-var7 = "-Txlib";
-var8 = 6;
-var9 = string__NativeString__to_s_with_length(var7, var8);
-var6 = var9;
-varonce5 = var6;
-}
-var10 = NEW_array__Array(&type_array__Arraystring__String);
-{ /* var10 = array_instance Array[String] */
-var11 = 1;
-var12 = NEW_array__NativeArray(var11, &type_array__NativeArraystring__String);
-((struct instance_array__NativeArray*)var12)->values[0] = (val*) var6;
-((void (*)(val*, val*, long))(var10->class->vft[COLOR_array__Array__with_native]))(var10, var12, var11) /* with_native on <var10:Array[String]>*/;
-}
-((void (*)(val*, val*, val*))(var->class->vft[COLOR_exec__OProcess__init]))(var, var1, var10) /* init on <var:OProcess>*/;
-var_f = var;
-if (varonce13) {
-var14 = varonce13;
-} else {
-var15 = "digraph {\n";
-var16 = 10;
-var17 = string__NativeString__to_s_with_length(var15, var16);
-var14 = var17;
-varonce13 = var14;
-}
-((void (*)(val*, val*))(var_f->class->vft[COLOR_stream__OStream__write]))(var_f, var14) /* write on <var_f:OProcess>*/;
-var18 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var19 = ((val* (*)(val*))(var18->class->vft[COLOR_abstract_collection__MapRead__keys]))(var18) /* keys on <var18:HashMap[Object, POSetElement[Object]]>*/;
-var20 = ((val* (*)(val*))(var19->class->vft[COLOR_abstract_collection__Collection__iterator]))(var19) /* iterator on <var19:Collection[Object](HashMapKeys[Object, POSetElement[Object]])>*/;
-for(;;) {
-var21 = ((short int (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var20) /* is_ok on <var20:Iterator[nullable Object]>*/;
-if(!var21) break;
-var22 = ((val* (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__item]))(var20) /* item on <var20:Iterator[nullable Object]>*/;
-var_x = var22;
-if (varonce23) {
-var24 = varonce23;
-} else {
-var25 = "\"";
-var26 = 1;
-var27 = string__NativeString__to_s_with_length(var25, var26);
-var24 = var27;
-varonce23 = var24;
-}
-if (varonce28) {
-var29 = varonce28;
-} else {
-var30 = "\";\n";
-var31 = 3;
-var32 = string__NativeString__to_s_with_length(var30, var31);
-var29 = var32;
-varonce28 = var29;
-}
-var33 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var33 = array_instance Array[Object] */
-var34 = 3;
-var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var35)->values[0] = (val*) var24;
-((struct instance_array__NativeArray*)var35)->values[1] = (val*) var_x;
-((struct instance_array__NativeArray*)var35)->values[2] = (val*) var29;
-((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
-}
-var36 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
-((void (*)(val*, val*))(var_f->class->vft[COLOR_stream__OStream__write]))(var_f, var36) /* write on <var_f:OProcess>*/;
-var37 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var38 = ((val* (*)(val*, val*))(var37->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var37, var_x) /* [] on <var37:HashMap[Object, POSetElement[Object]]>*/;
-var_xe = var38;
-var39 = ((val* (*)(val*))(var_xe->class->vft[COLOR_poset__POSetElement__dtos]))(var_xe) /* dtos on <var_xe:POSetElement[Object]>*/;
-var40 = ((val* (*)(val*))(var39->class->vft[COLOR_abstract_collection__Collection__iterator]))(var39) /* iterator on <var39:HashSet[Object]>*/;
-for(;;) {
-var41 = ((short int (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var40) /* is_ok on <var40:Iterator[nullable Object]>*/;
-if(!var41) break;
-var42 = ((val* (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__item]))(var40) /* item on <var40:Iterator[nullable Object]>*/;
-var_y = var42;
-var43 = ((short int (*)(val*, val*, val*))(self->class->vft[COLOR_poset__POSet__has_edge]))(self, var_y, var_x) /* has_edge on <self:POSet[Object]>*/;
-if (var43){
-if (varonce44) {
-var45 = varonce44;
-} else {
-var46 = "\"";
-var47 = 1;
-var48 = string__NativeString__to_s_with_length(var46, var47);
-var45 = var48;
-varonce44 = var45;
-}
-if (varonce49) {
-var50 = varonce49;
-} else {
-var51 = "\" -> \"";
-var52 = 6;
-var53 = string__NativeString__to_s_with_length(var51, var52);
-var50 = var53;
-varonce49 = var50;
-}
-if (varonce54) {
-var55 = varonce54;
-} else {
-var56 = "\"[dir=both];\n";
-var57 = 13;
-var58 = string__NativeString__to_s_with_length(var56, var57);
-var55 = var58;
-varonce54 = var55;
-}
-var59 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var59 = array_instance Array[Object] */
-var60 = 5;
-var61 = NEW_array__NativeArray(var60, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var61)->values[0] = (val*) var45;
-((struct instance_array__NativeArray*)var61)->values[1] = (val*) var_x;
-((struct instance_array__NativeArray*)var61)->values[2] = (val*) var50;
-((struct instance_array__NativeArray*)var61)->values[3] = (val*) var_y;
-((struct instance_array__NativeArray*)var61)->values[4] = (val*) var55;
-((void (*)(val*, val*, long))(var59->class->vft[COLOR_array__Array__with_native]))(var59, var61, var60) /* with_native on <var59:Array[Object]>*/;
-}
-var62 = ((val* (*)(val*))(var59->class->vft[COLOR_string__Object__to_s]))(var59) /* to_s on <var59:Array[Object]>*/;
-((void (*)(val*, val*))(var_f->class->vft[COLOR_stream__OStream__write]))(var_f, var62) /* write on <var_f:OProcess>*/;
-} else {
-if (varonce63) {
-var64 = varonce63;
-} else {
-var65 = "\"";
-var66 = 1;
-var67 = string__NativeString__to_s_with_length(var65, var66);
-var64 = var67;
-varonce63 = var64;
-}
-if (varonce68) {
-var69 = varonce68;
-} else {
-var70 = "\" -> \"";
-var71 = 6;
-var72 = string__NativeString__to_s_with_length(var70, var71);
-var69 = var72;
-varonce68 = var69;
-}
-if (varonce73) {
-var74 = varonce73;
-} else {
-var75 = "\";\n";
-var76 = 3;
-var77 = string__NativeString__to_s_with_length(var75, var76);
-var74 = var77;
-varonce73 = var74;
-}
-var78 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var78 = array_instance Array[Object] */
-var79 = 5;
-var80 = NEW_array__NativeArray(var79, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var80)->values[0] = (val*) var64;
-((struct instance_array__NativeArray*)var80)->values[1] = (val*) var_x;
-((struct instance_array__NativeArray*)var80)->values[2] = (val*) var69;
-((struct instance_array__NativeArray*)var80)->values[3] = (val*) var_y;
-((struct instance_array__NativeArray*)var80)->values[4] = (val*) var74;
-((void (*)(val*, val*, long))(var78->class->vft[COLOR_array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
-}
-var81 = ((val* (*)(val*))(var78->class->vft[COLOR_string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
-((void (*)(val*, val*))(var_f->class->vft[COLOR_stream__OStream__write]))(var_f, var81) /* write on <var_f:OProcess>*/;
 }
-CONTINUE_label: (void)0;
-((void (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__next]))(var40) /* next on <var40:Iterator[nullable Object]>*/;
+{
+var33 = hash_collection__HashMap___91d_93d(var30, var_a);
 }
-BREAK_label: (void)0;
-CONTINUE_label82: (void)0;
-((void (*)(val*))(var20->class->vft[COLOR_abstract_collection__Iterator__next]))(var20) /* next on <var20:Iterator[nullable Object]>*/;
+{
+{ /* Inline poset#POSetElement#count (var33) on <var33:nullable Object(POSetElement[Object])> */
+var36 = var33->attrs[COLOR_poset__POSetElement___count].l; /* _count on <var33:nullable Object(POSetElement[Object])> */
+var34 = var36;
+RET_LABEL35:(void)0;
 }
-BREAK_label82: (void)0;
-if (varonce83) {
-var84 = varonce83;
-} else {
-var85 = "}\n";
-var86 = 2;
-var87 = string__NativeString__to_s_with_length(var85, var86);
-var84 = var87;
-varonce83 = var84;
 }
-((void (*)(val*, val*))(var_f->class->vft[COLOR_stream__OStream__write]))(var_f, var84) /* write on <var_f:OProcess>*/;
-RET_LABEL:;
+{
+{ /* Inline poset#POSet#elements (self) on <self:POSet[Object]> */
+var39 = self->attrs[COLOR_poset__POSet___elements].val; /* _elements on <self:POSet[Object]> */
+if (unlikely(var39 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _elements");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 31);
+show_backtrace(1);
+}
+var37 = var39;
+RET_LABEL38:(void)0;
+}
+}
+{
+var40 = hash_collection__HashMap___91d_93d(var37, var_b);
+}
+{
+{ /* Inline poset#POSetElement#count (var40) on <var40:nullable Object(POSetElement[Object])> */
+var43 = var40->attrs[COLOR_poset__POSetElement___count].l; /* _count on <var40:nullable Object(POSetElement[Object])> */
+var41 = var43;
+RET_LABEL42:(void)0;
 }
-/* method poset#POSet#show_dot for (self: Object) */
-void VIRTUAL_poset__POSet__show_dot(val* self) {
-poset__POSet__show_dot(self);
+}
+{
+var44 = kernel__Int___60d_61d_62d(var34, var41);
+}
+var = var44;
+goto RET_LABEL;
 RET_LABEL:;
+return var;
 }
-/* method poset#POSet#compare for (self: POSet[Object], Object, Object): Int */
-long poset__POSet__compare(val* self, val* p0, val* p1) {
+/* method poset#POSet#compare for (self: Object, nullable Object, nullable Object): Int */
+long VIRTUAL_poset__POSet__compare(val* self, val* p0, val* p1) {
 long var /* : Int */;
+long var1 /* : Int */;
+var1 = poset__POSet__compare(self, p0, p1);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method poset#POSet#linearize for (self: POSet[Object], Collection[Object]): Array[Object] */
+val* poset__POSet__linearize(val* self, val* p0) {
+val* var /* : Array[Object] */;
 short int var1 /* : Bool */;
 int cltype;
 int idtype;
 const struct type* type_struct;
 const char* var_class_name;
-short int var2 /* : Bool */;
-int cltype3;
-int idtype4;
-const struct type* type_struct5;
-const char* var_class_name6;
-val* var_a /* var a: Object */;
-val* var_b /* var b: Object */;
-val* var7 /* : HashMap[Object, POSetElement[Object]] */;
-val* var8 /* : nullable Object */;
-val* var_ae /* var ae: POSetElement[Object] */;
-val* var9 /* : HashMap[Object, POSetElement[Object]] */;
-val* var10 /* : nullable Object */;
-val* var_be /* var be: POSetElement[Object] */;
-val* var11 /* : HashSet[Object] */;
-long var12 /* : Int */;
-val* var13 /* : HashSet[Object] */;
-long var14 /* : Int */;
-long var15 /* : Int */;
-long var_res /* var res: Int */;
-long var16 /* : Int */;
-short int var17 /* : Bool */;
-short int var19 /* : Bool */;
-short int var20 /* : Bool */;
-val* var21 /* : HashMap[Object, POSetElement[Object]] */;
-val* var22 /* : nullable Object */;
-long var23 /* : Int */;
-val* var24 /* : HashMap[Object, POSetElement[Object]] */;
-val* var25 /* : nullable Object */;
-long var26 /* : Int */;
-long var27 /* : Int */;
-/* Covariant cast for argument 0 (a) <p0:Object> isa POSet#0 */
-/* <p0:Object> isa POSet#0 */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
+val* var_elements /* var elements: Collection[Object] */;
+val* var2 /* : Array[nullable Object] */;
+val* var_lin /* var lin: Array[Object] */;
+/* Covariant cast for argument 0 (elements) <p0:Collection[Object]> isa Collection[POSet#0] */
+/* <p0:Collection[Object]> isa Collection[POSet#0] */
+type_struct = self->type->resolution_table->types[COLOR_abstract_collection__Collectionposet__POSet_FT0];
 cltype = type_struct->color;
 idtype = type_struct->id;
 if(cltype >= p0->type->table_size) {
@@ -971,72 +1232,30 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 151);
-show_backtrace(1);
-}
-/* Covariant cast for argument 1 (b) <p1:Object> isa POSet#0 */
-/* <p1:Object> isa POSet#0 */
-type_struct5 = self->type->resolution_table->types[COLOR_poset__POSet_FT0];
-cltype3 = type_struct5->color;
-idtype4 = type_struct5->id;
-if(cltype3 >= p1->type->table_size) {
-var2 = 0;
-} else {
-var2 = p1->type->type_table[cltype3] == idtype4;
-}
-if (!var2) {
-var_class_name6 = p1 == NULL ? "null" : p1->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet#0", var_class_name6);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 151);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "Collection[POSet#0]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 167);
 show_backtrace(1);
 }
-var_a = p0;
-var_b = p1;
-var7 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var8 = ((val* (*)(val*, val*))(var7->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var7, var_a) /* [] on <var7:HashMap[Object, POSetElement[Object]]>*/;
-var_ae = var8;
-var9 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var10 = ((val* (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var9, var_b) /* [] on <var9:HashMap[Object, POSetElement[Object]]>*/;
-var_be = var10;
-var11 = ((val* (*)(val*))(var_ae->class->vft[COLOR_poset__POSetElement__tos]))(var_ae) /* tos on <var_ae:POSetElement[Object]>*/;
-var12 = ((long (*)(val*))(var11->class->vft[COLOR_abstract_collection__Collection__length]))(var11) /* length on <var11:HashSet[Object]>*/;
-var13 = ((val* (*)(val*))(var_be->class->vft[COLOR_poset__POSetElement__tos]))(var_be) /* tos on <var_be:POSetElement[Object]>*/;
-var14 = ((long (*)(val*))(var13->class->vft[COLOR_abstract_collection__Collection__length]))(var13) /* length on <var13:HashSet[Object]>*/;
-var15 = kernel__Int___60d_61d_62d(var12, var14);
-var_res = var15;
-var16 = 0;
-{ /* Inline kernel#Int#!= (var_res,var16) */
-var19 = var_res == var16;
-var20 = !var19;
-var17 = var20;
-goto RET_LABEL18;
-RET_LABEL18:(void)0;
+var_elements = p0;
+{
+var2 = array__Collection__to_a(var_elements);
 }
-if (var17){
-var = var_res;
-goto RET_LABEL;
-} else {
+var_lin = var2;
+{
+sorter__Comparator__sort(self, var_lin); /* Direct call sorter#Comparator#sort on <self:POSet[Object]>*/
 }
-var21 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var22 = ((val* (*)(val*, val*))(var21->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var21, var_a) /* [] on <var21:HashMap[Object, POSetElement[Object]]>*/;
-var23 = ((long (*)(val*))(var22->class->vft[COLOR_poset__POSetElement__count]))(var22) /* count on <var22:nullable Object(POSetElement[Object])>*/;
-var24 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSet__elements]))(self) /* elements on <self:POSet[Object]>*/;
-var25 = ((val* (*)(val*, val*))(var24->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var24, var_b) /* [] on <var24:HashMap[Object, POSetElement[Object]]>*/;
-var26 = ((long (*)(val*))(var25->class->vft[COLOR_poset__POSetElement__count]))(var25) /* count on <var25:nullable Object(POSetElement[Object])>*/;
-var27 = kernel__Int___60d_61d_62d(var23, var26);
-var = var27;
+var = var_lin;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method poset#POSet#compare for (self: Object, nullable Object, nullable Object): Int */
-long VIRTUAL_poset__POSet__compare(val* self, val* p0, val* p1) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = poset__POSet__compare(self, p0, p1);
+/* method poset#POSet#linearize for (self: Object, Collection[Object]): Array[Object] */
+val* VIRTUAL_poset__POSet__linearize(val* self, val* p0) {
+val* var /* : Array[Object] */;
+val* var1 /* : Array[Object] */;
+var1 = poset__POSet__linearize(self, p0);
 var = var1;
 RET_LABEL:;
 return var;
@@ -1047,17 +1266,19 @@ RET_LABEL:;
 }
 /* method poset#POSet#init for (self: Object) */
 void VIRTUAL_poset__POSet__init(val* self) {
-poset__POSet__init(self);
+{ /* Inline poset#POSet#init (self) on <self:Object(POSet[Object])> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method poset#POSetElement#poset for (self: POSetElement[Object]): POSet[Object] */
 val* poset__POSetElement__poset(val* self) {
 val* var /* : POSet[Object] */;
 val* var1 /* : POSet[Object] */;
-var1 = self->attrs[COLOR_poset__POSetElement___64dposet].val; /* @poset on <self:POSetElement[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @poset");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 181);
+var1 = self->attrs[COLOR_poset__POSetElement___poset].val; /* _poset on <self:POSetElement[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 188);
 show_backtrace(1);
 }
 var = var1;
@@ -1068,50 +1289,29 @@ return var;
 val* VIRTUAL_poset__POSetElement__poset(val* self) {
 val* var /* : POSet[Object] */;
 val* var1 /* : POSet[Object] */;
-var1 = poset__POSetElement__poset(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSetElement#poset= for (self: POSetElement[Object], POSet[Object]) */
-void poset__POSetElement__poset_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetElement#0] */
-/* <p0:POSet[Object]> isa POSet[POSetElement#0] */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSetposet__POSetElement_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetElement#0]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 181);
+val* var3 /* : POSet[Object] */;
+{ /* Inline poset#POSetElement#poset (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___poset].val; /* _poset on <self:Object(POSetElement[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _poset");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 188);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64dposet].val = p0; /* @poset on <self:POSetElement[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSetElement#poset= for (self: Object, POSet[Object]) */
-void VIRTUAL_poset__POSetElement__poset_61d(val* self, val* p0) {
-poset__POSetElement__poset_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSetElement#element for (self: POSetElement[Object]): Object */
 val* poset__POSetElement__element(val* self) {
 val* var /* : Object */;
 val* var1 /* : Object */;
-var1 = self->attrs[COLOR_poset__POSetElement___64delement].val; /* @element on <self:POSetElement[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @element");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 184);
+var1 = self->attrs[COLOR_poset__POSetElement___element].val; /* _element on <self:POSetElement[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _element");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 191);
 show_backtrace(1);
 }
 var = var1;
@@ -1122,50 +1322,29 @@ return var;
 val* VIRTUAL_poset__POSetElement__element(val* self) {
 val* var /* : Object */;
 val* var1 /* : Object */;
-var1 = poset__POSetElement__element(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSetElement#element= for (self: POSetElement[Object], Object) */
-void poset__POSetElement__element_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (element) <p0:Object> isa POSetElement#0 */
-/* <p0:Object> isa POSetElement#0 */
-type_struct = self->type->resolution_table->types[COLOR_poset__POSetElement_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 184);
+val* var3 /* : Object */;
+{ /* Inline poset#POSetElement#element (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___element].val; /* _element on <self:Object(POSetElement[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _element");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 191);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64delement].val = p0; /* @element on <self:POSetElement[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSetElement#element= for (self: Object, Object) */
-void VIRTUAL_poset__POSetElement__element_61d(val* self, val* p0) {
-poset__POSetElement__element_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSetElement#tos for (self: POSetElement[Object]): HashSet[Object] */
 val* poset__POSetElement__tos(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = self->attrs[COLOR_poset__POSetElement___64dtos].val; /* @tos on <self:POSetElement[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @tos");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 187);
+var1 = self->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <self:POSetElement[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
 show_backtrace(1);
 }
 var = var1;
@@ -1176,50 +1355,29 @@ return var;
 val* VIRTUAL_poset__POSetElement__tos(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = poset__POSetElement__tos(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSetElement#tos= for (self: POSetElement[Object], HashSet[Object]) */
-void poset__POSetElement__tos_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (tos) <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-/* <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashSetposet__POSetElement_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "HashSet[POSetElement#0]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 187);
+val* var3 /* : HashSet[Object] */;
+{ /* Inline poset#POSetElement#tos (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <self:Object(POSetElement[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64dtos].val = p0; /* @tos on <self:POSetElement[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSetElement#tos= for (self: Object, HashSet[Object]) */
-void VIRTUAL_poset__POSetElement__tos_61d(val* self, val* p0) {
-poset__POSetElement__tos_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSetElement#froms for (self: POSetElement[Object]): HashSet[Object] */
 val* poset__POSetElement__froms(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = self->attrs[COLOR_poset__POSetElement___64dfroms].val; /* @froms on <self:POSetElement[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @froms");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 188);
+var1 = self->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <self:POSetElement[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
 show_backtrace(1);
 }
 var = var1;
@@ -1230,50 +1388,29 @@ return var;
 val* VIRTUAL_poset__POSetElement__froms(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = poset__POSetElement__froms(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSetElement#froms= for (self: POSetElement[Object], HashSet[Object]) */
-void poset__POSetElement__froms_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (froms) <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-/* <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashSetposet__POSetElement_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "HashSet[POSetElement#0]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 188);
+val* var3 /* : HashSet[Object] */;
+{ /* Inline poset#POSetElement#froms (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <self:Object(POSetElement[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64dfroms].val = p0; /* @froms on <self:POSetElement[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSetElement#froms= for (self: Object, HashSet[Object]) */
-void VIRTUAL_poset__POSetElement__froms_61d(val* self, val* p0) {
-poset__POSetElement__froms_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSetElement#dtos for (self: POSetElement[Object]): HashSet[Object] */
 val* poset__POSetElement__dtos(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = self->attrs[COLOR_poset__POSetElement___64ddtos].val; /* @dtos on <self:POSetElement[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @dtos");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 189);
+var1 = self->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <self:POSetElement[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
 show_backtrace(1);
 }
 var = var1;
@@ -1284,50 +1421,29 @@ return var;
 val* VIRTUAL_poset__POSetElement__dtos(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = poset__POSetElement__dtos(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSetElement#dtos= for (self: POSetElement[Object], HashSet[Object]) */
-void poset__POSetElement__dtos_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (dtos) <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-/* <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashSetposet__POSetElement_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "HashSet[POSetElement#0]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 189);
+val* var3 /* : HashSet[Object] */;
+{ /* Inline poset#POSetElement#dtos (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <self:Object(POSetElement[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64ddtos].val = p0; /* @dtos on <self:POSetElement[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSetElement#dtos= for (self: Object, HashSet[Object]) */
-void VIRTUAL_poset__POSetElement__dtos_61d(val* self, val* p0) {
-poset__POSetElement__dtos_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSetElement#dfroms for (self: POSetElement[Object]): HashSet[Object] */
 val* poset__POSetElement__dfroms(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = self->attrs[COLOR_poset__POSetElement___64ddfroms].val; /* @dfroms on <self:POSetElement[Object]> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @dfroms");
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 190);
+var1 = self->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <self:POSetElement[Object]> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
 show_backtrace(1);
 }
 var = var1;
@@ -1338,47 +1454,26 @@ return var;
 val* VIRTUAL_poset__POSetElement__dfroms(val* self) {
 val* var /* : HashSet[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = poset__POSetElement__dfroms(self);
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method poset#POSetElement#dfroms= for (self: POSetElement[Object], HashSet[Object]) */
-void poset__POSetElement__dfroms_61d(val* self, val* p0) {
-short int var /* : Bool */;
-int cltype;
-int idtype;
-const struct type* type_struct;
-const char* var_class_name;
-/* Covariant cast for argument 0 (dfroms) <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-/* <p0:HashSet[Object]> isa HashSet[POSetElement#0] */
-type_struct = self->type->resolution_table->types[COLOR_hash_collection__HashSetposet__POSetElement_FT0];
-cltype = type_struct->color;
-idtype = type_struct->id;
-if(cltype >= p0->type->table_size) {
-var = 0;
-} else {
-var = p0->type->type_table[cltype] == idtype;
-}
-if (!var) {
-var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "HashSet[POSetElement#0]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 190);
+val* var3 /* : HashSet[Object] */;
+{ /* Inline poset#POSetElement#dfroms (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <self:Object(POSetElement[Object])> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64ddfroms].val = p0; /* @dfroms on <self:POSetElement[Object]> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method poset#POSetElement#dfroms= for (self: Object, HashSet[Object]) */
-void VIRTUAL_poset__POSetElement__dfroms_61d(val* self, val* p0) {
-poset__POSetElement__dfroms_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method poset#POSetElement#count for (self: POSetElement[Object]): Int */
 long poset__POSetElement__count(val* self) {
 long var /* : Int */;
 long var1 /* : Int */;
-var1 = self->attrs[COLOR_poset__POSetElement___64dcount].l; /* @count on <self:POSetElement[Object]> */
+var1 = self->attrs[COLOR_poset__POSetElement___count].l; /* _count on <self:POSetElement[Object]> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -1387,26 +1482,33 @@ return var;
 long VIRTUAL_poset__POSetElement__count(val* self) {
 long var /* : Int */;
 long var1 /* : Int */;
-var1 = poset__POSetElement__count(self);
+long var3 /* : Int */;
+{ /* Inline poset#POSetElement#count (self) on <self:Object(POSetElement[Object])> */
+var3 = self->attrs[COLOR_poset__POSetElement___count].l; /* _count on <self:Object(POSetElement[Object])> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method poset#POSetElement#count= for (self: POSetElement[Object], Int) */
-void poset__POSetElement__count_61d(val* self, long p0) {
-self->attrs[COLOR_poset__POSetElement___64dcount].l = p0; /* @count on <self:POSetElement[Object]> */
-RET_LABEL:;
-}
-/* method poset#POSetElement#count= for (self: Object, Int) */
-void VIRTUAL_poset__POSetElement__count_61d(val* self, long p0) {
-poset__POSetElement__count_61d(self, p0);
-RET_LABEL:;
-}
 /* method poset#POSetElement#greaters for (self: POSetElement[Object]): Collection[Object] */
 val* poset__POSetElement__greaters(val* self) {
 val* var /* : Collection[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__tos]))(self) /* tos on <self:POSetElement[Object]>*/;
+val* var3 /* : HashSet[Object] */;
+{
+{ /* Inline poset#POSetElement#tos (self) on <self:POSetElement[Object]> */
+var3 = self->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <self:POSetElement[Object]> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1425,7 +1527,19 @@ return var;
 val* poset__POSetElement__direct_greaters(val* self) {
 val* var /* : Collection[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__dtos]))(self) /* dtos on <self:POSetElement[Object]>*/;
+val* var3 /* : HashSet[Object] */;
+{
+{ /* Inline poset#POSetElement#dtos (self) on <self:POSetElement[Object]> */
+var3 = self->attrs[COLOR_poset__POSetElement___dtos].val; /* _dtos on <self:POSetElement[Object]> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dtos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 196);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1444,7 +1558,19 @@ return var;
 val* poset__POSetElement__smallers(val* self) {
 val* var /* : Collection[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__froms]))(self) /* froms on <self:POSetElement[Object]>*/;
+val* var3 /* : HashSet[Object] */;
+{
+{ /* Inline poset#POSetElement#froms (self) on <self:POSetElement[Object]> */
+var3 = self->attrs[COLOR_poset__POSetElement___froms].val; /* _froms on <self:POSetElement[Object]> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _froms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 195);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1463,7 +1589,19 @@ return var;
 val* poset__POSetElement__direct_smallers(val* self) {
 val* var /* : Collection[Object] */;
 val* var1 /* : HashSet[Object] */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__dfroms]))(self) /* dfroms on <self:POSetElement[Object]>*/;
+val* var3 /* : HashSet[Object] */;
+{
+{ /* Inline poset#POSetElement#dfroms (self) on <self:POSetElement[Object]> */
+var3 = self->attrs[COLOR_poset__POSetElement___dfroms].val; /* _dfroms on <self:POSetElement[Object]> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _dfroms");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 197);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1488,7 +1626,8 @@ const struct type* type_struct;
 const char* var_class_name;
 val* var_t /* var t: Object */;
 val* var2 /* : HashSet[Object] */;
-short int var3 /* : Bool */;
+val* var4 /* : HashSet[Object] */;
+short int var5 /* : Bool */;
 /* Covariant cast for argument 0 (t) <p0:Object> isa POSetElement#0 */
 /* <p0:Object> isa POSetElement#0 */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetElement_FT0];
@@ -1499,16 +1638,29 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 222);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 229);
 show_backtrace(1);
 }
 var_t = p0;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__tos]))(self) /* tos on <self:POSetElement[Object]>*/;
-var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__Collection__has]))(var2, var_t) /* has on <var2:HashSet[Object]>*/;
-var = var3;
+{
+{ /* Inline poset#POSetElement#tos (self) on <self:POSetElement[Object]> */
+var4 = self->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <self:POSetElement[Object]> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+var5 = hash_collection__HashSet__has(var2, var_t);
+}
+var = var5;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1533,10 +1685,13 @@ const char* var_class_name;
 val* var_t /* var t: Object */;
 short int var2 /* : Bool */;
 val* var3 /* : Object */;
-short int var4 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var5 /* : HashSet[Object] */;
+val* var5 /* : Object */;
 short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var8 /* : HashSet[Object] */;
+val* var10 /* : HashSet[Object] */;
+short int var11 /* : Bool */;
 /* Covariant cast for argument 0 (t) <p0:Object> isa POSetElement#0 */
 /* <p0:Object> isa POSetElement#0 */
 type_struct = self->type->resolution_table->types[COLOR_poset__POSetElement_FT0];
@@ -1547,158 +1702,60 @@ var1 = 0;
 } else {
 var1 = p0->type->type_table[cltype] == idtype;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 228);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 235);
 show_backtrace(1);
 }
 var_t = p0;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__element]))(self) /* element on <self:POSetElement[Object]>*/;
-var4 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___33d_61d]))(var_t, var3) /* != on <var_t:Object>*/;
-var_ = var4;
-if (var4){
-var5 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__tos]))(self) /* tos on <self:POSetElement[Object]>*/;
-var6 = ((short int (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__Collection__has]))(var5, var_t) /* has on <var5:HashSet[Object]>*/;
-var2 = var6;
-} else {
-var2 = var_;
-}
-var = var2;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline poset#POSetElement#element (self) on <self:POSetElement[Object]> */
+var5 = self->attrs[COLOR_poset__POSetElement___element].val; /* _element on <self:POSetElement[Object]> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _element");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 191);
+show_backtrace(1);
 }
-/* method poset#POSetElement#< for (self: Object, Object): Bool */
-short int VIRTUAL_poset__POSetElement___60d(val* self, val* p0) {
-short int var /* : Bool */;
-short int var1 /* : Bool */;
-var1 = poset__POSetElement___60d(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
+var3 = var5;
+RET_LABEL4:(void)0;
 }
-/* method poset#POSetElement#depth for (self: POSetElement[Object]): Int */
-long poset__POSetElement__depth(val* self) {
-long var /* : Int */;
-val* var1 /* : Collection[Object] */;
-short int var2 /* : Bool */;
-long var3 /* : Int */;
-long var4 /* : Int */;
-long var5 /* : Int */;
-long var7 /* : Int */;
-long var_min /* var min: Int */;
-val* var8 /* : Collection[Object] */;
-val* var9 /* : Iterator[nullable Object] */;
-short int var10 /* : Bool */;
-val* var11 /* : nullable Object */;
-val* var_p /* var p: Object */;
-val* var12 /* : POSet[Object] */;
-val* var13 /* : POSetElement[Object] */;
-long var14 /* : Int */;
-long var15 /* : Int */;
-long var16 /* : Int */;
-long var18 /* : Int */;
-long var_d /* var d: Int */;
-short int var19 /* : Bool */;
-long var20 /* : Int */;
-long var21 /* : Int */;
-long var23 /* : Int */;
-short int var24 /* : Bool */;
-short int var26 /* : Bool */;
-short int var_ /* var : Bool */;
-short int var27 /* : Bool */;
-short int var29 /* : Bool */;
-int cltype;
-int idtype;
-const char* var_class_name;
-short int var30 /* : Bool */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__direct_greaters]))(self) /* direct_greaters on <self:POSetElement[Object]>*/;
-var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var1) /* is_empty on <var1:Collection[Object]>*/;
-if (var2){
-var3 = 0;
-var = var3;
-goto RET_LABEL;
-} else {
 }
-var4 = 1;
-{ /* Inline kernel#Int#unary - (var4) */
-var7 = -var4;
-var5 = var7;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
+{
+var7 = ((short int (*)(val*, val*))(var_t->class->vft[COLOR_kernel__Object___33d_61d]))(var_t, var3) /* != on <var_t:Object>*/;
+var6 = var7;
 }
-var_min = var5;
-var8 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__direct_greaters]))(self) /* direct_greaters on <self:POSetElement[Object]>*/;
-var9 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Collection__iterator]))(var8) /* iterator on <var8:Collection[Object]>*/;
-for(;;) {
-var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
-if(!var10) break;
-var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
-var_p = var11;
-var12 = ((val* (*)(val*))(self->class->vft[COLOR_poset__POSetElement__poset]))(self) /* poset on <self:POSetElement[Object]>*/;
-var13 = ((val* (*)(val*, val*))(var12->class->vft[COLOR_poset__POSet___91d_93d]))(var12, var_p) /* [] on <var12:POSet[Object]>*/;
-var14 = ((long (*)(val*))(var13->class->vft[COLOR_poset__POSetElement__depth]))(var13) /* depth on <var13:POSetElement[Object]>*/;
-var15 = 1;
-{ /* Inline kernel#Int#+ (var14,var15) */
-var18 = var14 + var15;
-var16 = var18;
-goto RET_LABEL17;
-RET_LABEL17:(void)0;
-}
-var_d = var16;
-var20 = 1;
-{ /* Inline kernel#Int#unary - (var20) */
-var23 = -var20;
-var21 = var23;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
-}
-{ /* Inline kernel#Int#== (var_min,var21) */
-var26 = var_min == var21;
-var24 = var26;
-goto RET_LABEL25;
-RET_LABEL25:(void)0;
-}
-var_ = var24;
-if (var24){
-var19 = var_;
-} else {
-{ /* Inline kernel#Int#< (var_d,var_min) */
-/* Covariant cast for argument 0 (i) <var_min:Int> isa OTHER */
-/* <var_min:Int> isa OTHER */
-var29 = 1; /* easy <var_min:Int> isa OTHER*/
-if (!var29) {
-var_class_name = type_kernel__Int.name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/standard/kernel.nit", 265);
+var_ = var6;
+if (var6){
+{
+{ /* Inline poset#POSetElement#tos (self) on <self:POSetElement[Object]> */
+var10 = self->attrs[COLOR_poset__POSetElement___tos].val; /* _tos on <self:POSetElement[Object]> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _tos");
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 194);
 show_backtrace(1);
 }
-var30 = var_d < var_min;
-var27 = var30;
-goto RET_LABEL28;
-RET_LABEL28:(void)0;
+var8 = var10;
+RET_LABEL9:(void)0;
 }
-var19 = var27;
 }
-if (var19){
-var_min = var_d;
-} else {
+{
+var11 = hash_collection__HashSet__has(var8, var_t);
 }
-CONTINUE_label: (void)0;
-((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
+var2 = var11;
+} else {
+var2 = var_;
 }
-BREAK_label: (void)0;
-var = var_min;
+var = var2;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method poset#POSetElement#depth for (self: Object): Int */
-long VIRTUAL_poset__POSetElement__depth(val* self) {
-long var /* : Int */;
-long var1 /* : Int */;
-var1 = poset__POSetElement__depth(self);
+/* method poset#POSetElement#< for (self: Object, Object): Bool */
+short int VIRTUAL_poset__POSetElement___60d(val* self, val* p0) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = poset__POSetElement___60d(self, p0);
 var = var1;
 RET_LABEL:;
 return var;
@@ -1725,10 +1782,10 @@ var = 0;
 } else {
 var = p0->type->type_table[cltype] == idtype;
 }
-if (!var) {
+if (unlikely(!var)) {
 var_class_name = p0 == NULL ? "null" : p0->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetElement#0]", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 168);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetElement#0]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 175);
 show_backtrace(1);
 }
 /* Covariant cast for argument 1 (element) <p1:Object> isa POSetElement#0 */
@@ -1741,19 +1798,66 @@ var1 = 0;
 } else {
 var1 = p1->type->type_table[cltype2] == idtype3;
 }
-if (!var1) {
+if (unlikely(!var1)) {
 var_class_name5 = p1 == NULL ? "null" : p1->type->name;
-fprintf(stderr, "Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name5);
-fprintf(stderr, " (%s:%d)\n", "lib/poset.nit", 168);
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name5);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 175);
 show_backtrace(1);
 }
-self->attrs[COLOR_poset__POSetElement___64dposet].val = p0; /* @poset on <self:POSetElement[Object]> */
-self->attrs[COLOR_poset__POSetElement___64delement].val = p1; /* @element on <self:POSetElement[Object]> */
-self->attrs[COLOR_poset__POSetElement___64dcount].l = p2; /* @count on <self:POSetElement[Object]> */
+self->attrs[COLOR_poset__POSetElement___poset].val = p0; /* _poset on <self:POSetElement[Object]> */
+self->attrs[COLOR_poset__POSetElement___element].val = p1; /* _element on <self:POSetElement[Object]> */
+self->attrs[COLOR_poset__POSetElement___count].l = p2; /* _count on <self:POSetElement[Object]> */
 RET_LABEL:;
 }
 /* method poset#POSetElement#init for (self: Object, POSet[Object], Object, Int) */
 void VIRTUAL_poset__POSetElement__init(val* self, val* p0, val* p1, long p2) {
-poset__POSetElement__init(self, p0, p1, p2);
+short int var /* : Bool */;
+int cltype;
+int idtype;
+const struct type* type_struct;
+const char* var_class_name;
+short int var2 /* : Bool */;
+int cltype3;
+int idtype4;
+const struct type* type_struct5;
+const char* var_class_name6;
+{ /* Inline poset#POSetElement#init (self,p0,p1,p2) on <self:Object(POSetElement[Object])> */
+/* Covariant cast for argument 0 (poset) <p0:POSet[Object]> isa POSet[POSetElement#0] */
+/* <p0:POSet[Object]> isa POSet[POSetElement#0] */
+type_struct = self->type->resolution_table->types[COLOR_poset__POSetposet__POSetElement_FT0];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= p0->type->table_size) {
+var = 0;
+} else {
+var = p0->type->type_table[cltype] == idtype;
+}
+if (unlikely(!var)) {
+var_class_name = p0 == NULL ? "null" : p0->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSet[POSetElement#0]", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 175);
+show_backtrace(1);
+}
+/* Covariant cast for argument 1 (element) <p1:Object> isa POSetElement#0 */
+/* <p1:Object> isa POSetElement#0 */
+type_struct5 = self->type->resolution_table->types[COLOR_poset__POSetElement_FT0];
+cltype3 = type_struct5->color;
+idtype4 = type_struct5->id;
+if(cltype3 >= p1->type->table_size) {
+var2 = 0;
+} else {
+var2 = p1->type->type_table[cltype3] == idtype4;
+}
+if (unlikely(!var2)) {
+var_class_name6 = p1 == NULL ? "null" : p1->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "POSetElement#0", var_class_name6);
+PRINT_ERROR(" (%s:%d)\n", "lib/poset.nit", 175);
+show_backtrace(1);
+}
+self->attrs[COLOR_poset__POSetElement___poset].val = p0; /* _poset on <self:Object(POSetElement[Object])> */
+self->attrs[COLOR_poset__POSetElement___element].val = p1; /* _element on <self:Object(POSetElement[Object])> */
+self->attrs[COLOR_poset__POSetElement___count].l = p2; /* _count on <self:Object(POSetElement[Object])> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }