regern c_src
[nit.git] / c_src / nit__modelbuilder_base.sep.1.c
index 1ea80dd..25b6b29 100644 (file)
@@ -14,7 +14,7 @@ RET_LABEL2:(void)0;
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Cast failed");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 36);
-show_backtrace(1);
+fatal_exit(1);
 }
 var = var1;
 goto RET_LABEL;
@@ -43,7 +43,7 @@ var1 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___model].val; /* _
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 44);
-show_backtrace(1);
+fatal_exit(1);
 }
 var = var1;
 RET_LABEL:;
@@ -62,7 +62,7 @@ var1 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+fatal_exit(1);
 }
 var = var1;
 RET_LABEL:;
@@ -79,21 +79,20 @@ val* var /* : ToolContext */;
 val* var2 /* : ToolContext */;
 val* var3 /* : nullable ModelBuilder */;
 val* var5 /* : nullable ModelBuilder */;
-val* var6 /* : null */;
+short int var6 /* : Bool */;
 short int var7 /* : Bool */;
-short int var8 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var10 /* : Bool */;
-short int var12 /* : Bool */;
-val* var13 /* : ToolContext */;
-val* var15 /* : ToolContext */;
+short int var9 /* : Bool */;
+short int var11 /* : Bool */;
+val* var12 /* : ToolContext */;
+val* var14 /* : ToolContext */;
 {
 { /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
 var2 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
 if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+fatal_exit(1);
 }
 var = var2;
 RET_LABEL1:(void)0;
@@ -106,50 +105,49 @@ var3 = var5;
 RET_LABEL4:(void)0;
 }
 }
-var6 = NULL;
 if (var3 == NULL) {
-var7 = 1; /* is null */
+var6 = 1; /* is null */
 } else {
-var7 = 0; /* arg is null but recv is not */
+var6 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var3,var6) on <var3:nullable ModelBuilder> */
-var_other = var6;
+{ /* Inline kernel#Object#== (var3,((val*)NULL)) on <var3:nullable ModelBuilder> */
+var_other = ((val*)NULL);
 {
 { /* Inline kernel#Object#is_same_instance (var3,var_other) on <var3:nullable ModelBuilder(ModelBuilder)> */
-var12 = var3 == var_other;
-var10 = var12;
-goto RET_LABEL11;
-RET_LABEL11:(void)0;
+var11 = var3 == var_other;
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
 }
 }
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var7 = var8;
+var6 = var7;
 }
-if (unlikely(!var7)) {
+if (unlikely(!var6)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 54);
-show_backtrace(1);
+fatal_exit(1);
 }
 {
 { /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
-var15 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
-if (unlikely(var15 == NULL)) {
+var14 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var14 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+fatal_exit(1);
 }
-var13 = var15;
-RET_LABEL14:(void)0;
+var12 = var14;
+RET_LABEL13:(void)0;
 }
 }
 {
-{ /* Inline modelbuilder_base#ToolContext#modelbuilder_real= (var13,self) on <var13:ToolContext> */
-var13->attrs[COLOR_nit__modelbuilder_base__ToolContext___modelbuilder_real].val = self; /* _modelbuilder_real on <var13:ToolContext> */
-RET_LABEL16:(void)0;
+{ /* Inline modelbuilder_base#ToolContext#modelbuilder_real= (var12,self) on <var12:ToolContext> */
+var12->attrs[COLOR_nit__modelbuilder_base__ToolContext___modelbuilder_real].val = self; /* _modelbuilder_real on <var12:ToolContext> */
+RET_LABEL15:(void)0;
 }
 }
 RET_LABEL:;
@@ -164,58 +162,53 @@ val* var1 /* : Model */;
 val* var3 /* : Model */;
 val* var4 /* : nullable Array[MClass] */;
 val* var_classes /* var classes: nullable Array[MClass] */;
-val* var5 /* : null */;
+short int var5 /* : Bool */;
 short int var6 /* : Bool */;
-short int var7 /* : Bool */;
-val* var8 /* : null */;
-val* var9 /* : null */;
 val* var_res /* var res: nullable MClass */;
 val* var_ /* var : Array[MClass] */;
-val* var10 /* : ArrayIterator[nullable Object] */;
-val* var_11 /* var : ArrayIterator[MClass] */;
-short int var12 /* : Bool */;
-val* var13 /* : nullable Object */;
+val* var7 /* : ArrayIterator[nullable Object] */;
+val* var_8 /* var : ArrayIterator[MClass] */;
+short int var9 /* : Bool */;
+val* var10 /* : nullable Object */;
 val* var_mclass /* var mclass: MClass */;
-val* var14 /* : POSetElement[MModule] */;
-val* var16 /* : POSetElement[MModule] */;
-val* var17 /* : MModule */;
+val* var11 /* : POSetElement[MModule] */;
+val* var13 /* : POSetElement[MModule] */;
+val* var14 /* : MModule */;
+val* var16 /* : MModule */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
 val* var19 /* : MModule */;
-short int var20 /* : Bool */;
-short int var21 /* : Bool */;
-val* var22 /* : MModule */;
-val* var24 /* : MModule */;
-val* var25 /* : MVisibility */;
-val* var27 /* : MVisibility */;
+val* var21 /* : MModule */;
+val* var22 /* : MVisibility */;
+val* var24 /* : MVisibility */;
+short int var25 /* : Bool */;
+short int var26 /* : Bool */;
+short int var27 /* : Bool */;
 short int var28 /* : Bool */;
-short int var29 /* : Bool */;
-val* var30 /* : null */;
-short int var31 /* : Bool */;
-short int var32 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var34 /* : Bool */;
-short int var36 /* : Bool */;
+short int var30 /* : Bool */;
+short int var32 /* : Bool */;
+val* var33 /* : NativeArray[String] */;
 static val* varonce;
-val* var37 /* : String */;
-char* var38 /* : NativeString */;
-long var39 /* : Int */;
-val* var40 /* : FlatString */;
-static val* varonce41;
-val* var42 /* : String */;
-char* var43 /* : NativeString */;
-long var44 /* : Int */;
+static val* varonce34;
+val* var35 /* : String */;
+char* var36 /* : NativeString */;
+val* var37 /* : FlatString */;
+static val* varonce38;
+val* var39 /* : String */;
+char* var40 /* : NativeString */;
+val* var41 /* : FlatString */;
+static val* varonce42;
+val* var43 /* : String */;
+char* var44 /* : NativeString */;
 val* var45 /* : FlatString */;
-val* var46 /* : String */;
-static val* varonce47;
-val* var48 /* : String */;
-char* var49 /* : NativeString */;
-long var50 /* : Int */;
-val* var51 /* : FlatString */;
+static val* varonce46;
+val* var47 /* : String */;
+char* var48 /* : NativeString */;
+val* var49 /* : FlatString */;
+val* var50 /* : String */;
+val* var51 /* : String */;
 val* var52 /* : String */;
-val* var53 /* : Array[Object] */;
-long var54 /* : Int */;
-val* var55 /* : NativeArray[Object] */;
-val* var56 /* : String */;
-val* var57 /* : null */;
 var_anode = p0;
 var_mmodule = p1;
 var_name = p2;
@@ -225,7 +218,7 @@ var3 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___model].val; /* _
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 44);
-show_backtrace(1);
+fatal_exit(1);
 }
 var1 = var3;
 RET_LABEL2:(void)0;
@@ -235,204 +228,295 @@ RET_LABEL2:(void)0;
 var4 = nit__model___Model___get_mclasses_by_name(var1, var_name);
 }
 var_classes = var4;
-var5 = NULL;
 if (var_classes == NULL) {
-var6 = 1; /* is null */
+var5 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var5 = 0; /* arg is null but recv is not */
 }
 if (0) {
-var7 = standard___standard__Array___standard__kernel__Object___61d_61d(var_classes, var5);
-var6 = var7;
+var6 = standard___standard__Array___standard__kernel__Object___61d_61d(var_classes, ((val*)NULL));
+var5 = var6;
 }
-if (var6){
-var8 = NULL;
-var = var8;
+if (var5){
+var = ((val*)NULL);
 goto RET_LABEL;
 } else {
 }
-var9 = NULL;
-var_res = var9;
+var_res = ((val*)NULL);
 var_ = var_classes;
 {
-var10 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
+var7 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
 }
-var_11 = var10;
+var_8 = var7;
 for(;;) {
 {
-var12 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_11);
+var9 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_8);
 }
-if (var12){
+if (var9){
 {
-var13 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_11);
+var10 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_8);
 }
-var_mclass = var13;
+var_mclass = var10;
 {
 { /* Inline mmodule#MModule#in_importation (var_mmodule) on <var_mmodule:MModule> */
-var16 = var_mmodule->attrs[COLOR_nit__mmodule__MModule___in_importation].val; /* _in_importation on <var_mmodule:MModule> */
-if (unlikely(var16 == NULL)) {
+var13 = var_mmodule->attrs[COLOR_nit__mmodule__MModule___in_importation].val; /* _in_importation on <var_mmodule:MModule> */
+if (unlikely(var13 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__mmodule, 96);
-show_backtrace(1);
+fatal_exit(1);
 }
-var14 = var16;
-RET_LABEL15:(void)0;
+var11 = var13;
+RET_LABEL12:(void)0;
 }
 }
 {
 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
-var19 = var_mclass->attrs[COLOR_nit__model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
-if (unlikely(var19 == NULL)) {
+var16 = var_mclass->attrs[COLOR_nit__model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
+if (unlikely(var16 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 343);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 357);
+fatal_exit(1);
 }
-var17 = var19;
-RET_LABEL18:(void)0;
+var14 = var16;
+RET_LABEL15:(void)0;
 }
 }
 {
-var20 = poset___poset__POSetElement____60d_61d(var14, var17);
+var17 = poset___poset__POSetElement____60d_61d(var11, var14);
 }
-var21 = !var20;
-if (var21){
+var18 = !var17;
+if (var18){
 goto BREAK_label;
 } else {
 }
 {
 { /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
-var24 = var_mclass->attrs[COLOR_nit__model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
-if (unlikely(var24 == NULL)) {
+var21 = var_mclass->attrs[COLOR_nit__model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
+if (unlikely(var21 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 343);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 357);
+fatal_exit(1);
 }
-var22 = var24;
-RET_LABEL23:(void)0;
+var19 = var21;
+RET_LABEL20:(void)0;
 }
 }
 {
 { /* Inline model#MClass#visibility (var_mclass) on <var_mclass:MClass> */
-var27 = var_mclass->attrs[COLOR_nit__model__MClass___visibility].val; /* _visibility on <var_mclass:MClass> */
-if (unlikely(var27 == NULL)) {
+var24 = var_mclass->attrs[COLOR_nit__model__MClass___visibility].val; /* _visibility on <var_mclass:MClass> */
+if (unlikely(var24 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _visibility");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 403);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 440);
+fatal_exit(1);
 }
-var25 = var27;
-RET_LABEL26:(void)0;
+var22 = var24;
+RET_LABEL23:(void)0;
 }
 }
 {
-var28 = nit___nit__MModule___is_visible(var_mmodule, var22, var25);
+var25 = nit___nit__MModule___is_visible(var_mmodule, var19, var22);
 }
-var29 = !var28;
-if (var29){
+var26 = !var25;
+if (var26){
 goto BREAK_label;
 } else {
 }
-var30 = NULL;
 if (var_res == NULL) {
-var31 = 1; /* is null */
+var27 = 1; /* is null */
 } else {
-var31 = 0; /* arg is null but recv is not */
+var27 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_res,var30) on <var_res:nullable MClass> */
-var_other = var30;
+{ /* Inline kernel#Object#== (var_res,((val*)NULL)) on <var_res:nullable MClass> */
+var_other = ((val*)NULL);
 {
 { /* Inline kernel#Object#is_same_instance (var_res,var_other) on <var_res:nullable MClass(MClass)> */
-var36 = var_res == var_other;
-var34 = var36;
-goto RET_LABEL35;
-RET_LABEL35:(void)0;
+var32 = var_res == var_other;
+var30 = var32;
+goto RET_LABEL31;
+RET_LABEL31:(void)0;
 }
 }
-var32 = var34;
-goto RET_LABEL33;
-RET_LABEL33:(void)0;
+var28 = var30;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
 }
-var31 = var32;
+var27 = var28;
 }
-if (var31){
+if (var27){
 var_res = var_mclass;
 } else {
-if (varonce) {
-var37 = varonce;
+if (unlikely(varonce==NULL)) {
+var33 = NEW_standard__NativeArray(7l, &type_standard__NativeArray__standard__String);
+if (likely(varonce34!=NULL)) {
+var35 = varonce34;
 } else {
-var38 = "Ambigous class name \'";
-var39 = 21;
-var40 = standard___standard__NativeString___to_s_with_length(var38, var39);
-var37 = var40;
-varonce = var37;
+var36 = "Error: ambiguous class name `";
+var37 = standard___standard__NativeString___to_s_with_length(var36, 29l);
+var35 = var37;
+varonce34 = var35;
 }
-if (varonce41) {
-var42 = varonce41;
+((struct instance_standard__NativeArray*)var33)->values[0]=var35;
+if (likely(varonce38!=NULL)) {
+var39 = varonce38;
 } else {
-var43 = "\'; conflict between ";
-var44 = 20;
-var45 = standard___standard__NativeString___to_s_with_length(var43, var44);
-var42 = var45;
-varonce41 = var42;
+var40 = "`; conflict between `";
+var41 = standard___standard__NativeString___to_s_with_length(var40, 21l);
+var39 = var41;
+varonce38 = var39;
 }
-{
-var46 = nit___nit__MClass___nit__model_base__MEntity__full_name(var_mclass);
+((struct instance_standard__NativeArray*)var33)->values[2]=var39;
+if (likely(varonce42!=NULL)) {
+var43 = varonce42;
+} else {
+var44 = "` and `";
+var45 = standard___standard__NativeString___to_s_with_length(var44, 7l);
+var43 = var45;
+varonce42 = var43;
 }
-if (varonce47) {
-var48 = varonce47;
+((struct instance_standard__NativeArray*)var33)->values[4]=var43;
+if (likely(varonce46!=NULL)) {
+var47 = varonce46;
 } else {
-var49 = " and ";
-var50 = 5;
-var51 = standard___standard__NativeString___to_s_with_length(var49, var50);
-var48 = var51;
-varonce47 = var48;
+var48 = "`.";
+var49 = standard___standard__NativeString___to_s_with_length(var48, 2l);
+var47 = var49;
+varonce46 = var47;
 }
-{
-var52 = nit___nit__MClass___nit__model_base__MEntity__full_name(var_res);
+((struct instance_standard__NativeArray*)var33)->values[6]=var47;
+} else {
+var33 = varonce;
+varonce = NULL;
 }
-var53 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var53 = array_instance Array[Object] */
-var54 = 6;
-var55 = NEW_standard__NativeArray(var54, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var55)->values[0] = (val*) var37;
-((struct instance_standard__NativeArray*)var55)->values[1] = (val*) var_name;
-((struct instance_standard__NativeArray*)var55)->values[2] = (val*) var42;
-((struct instance_standard__NativeArray*)var55)->values[3] = (val*) var46;
-((struct instance_standard__NativeArray*)var55)->values[4] = (val*) var48;
-((struct instance_standard__NativeArray*)var55)->values[5] = (val*) var52;
+((struct instance_standard__NativeArray*)var33)->values[1]=var_name;
 {
-((void (*)(val* self, val* p0, long p1))(var53->class->vft[COLOR_standard__array__Array__with_native]))(var53, var55, var54) /* with_native on <var53:Array[Object]>*/;
+var50 = nit___nit__MClass___nit__model_base__MEntity__full_name(var_mclass);
 }
+((struct instance_standard__NativeArray*)var33)->values[3]=var50;
+{
+var51 = nit___nit__MClass___nit__model_base__MEntity__full_name(var_res);
 }
+((struct instance_standard__NativeArray*)var33)->values[5]=var51;
 {
-var56 = ((val* (*)(val* self))(var53->class->vft[COLOR_standard__string__Object__to_s]))(var53) /* to_s on <var53:Array[Object]>*/;
+var52 = ((val*(*)(val* self))(var33->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var33); /* native_to_s on <var33:NativeArray[String]>*/
 }
+varonce = var33;
 {
-nit___nit__ModelBuilder___error(self, var_anode, var56); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+nit___nit__ModelBuilder___error(self, var_anode, var52); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
 }
-var57 = NULL;
-var = var57;
+var = ((val*)NULL);
 goto RET_LABEL;
 }
 BREAK_label: (void)0;
 {
-standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_11); /* Direct call array#ArrayIterator#next on <var_11:ArrayIterator[MClass]>*/
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_8); /* Direct call array#ArrayIterator#next on <var_8:ArrayIterator[MClass]>*/
 }
 } else {
-goto BREAK_label58;
+goto BREAK_label53;
 }
 }
-BREAK_label58: (void)0;
+BREAK_label53: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:ArrayIterator[MClass]> */
-RET_LABEL59:(void)0;
-}
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_8); /* Direct call array#ArrayIterator#finish on <var_8:ArrayIterator[MClass]>*/
 }
 var = var_res;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
+/* method modelbuilder_base#ModelBuilder#get_mclass_by_name for (self: ModelBuilder, ANode, MModule, String): nullable MClass */
+val* nit___nit__ModelBuilder___get_mclass_by_name(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable MClass */;
+val* var_node /* var node: ANode */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var_name /* var name: String */;
+val* var1 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var2 /* : Bool */;
+short int var3 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var5 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce9;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+val* var12 /* : FlatString */;
+static val* varonce13;
+val* var14 /* : String */;
+char* var15 /* : NativeString */;
+val* var16 /* : FlatString */;
+val* var17 /* : String */;
+var_node = p0;
+var_mmodule = p1;
+var_name = p2;
+{
+var1 = nit___nit__ModelBuilder___try_get_mclass_by_name(self, var_node, var_mmodule, var_name);
+}
+var_mclass = var1;
+if (var_mclass == NULL) {
+var2 = 1; /* is null */
+} else {
+var2 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var7 = var_mclass == var_other;
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+}
+var3 = var5;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+var2 = var3;
+}
+if (var2){
+if (unlikely(varonce==NULL)) {
+var8 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce9!=NULL)) {
+var10 = varonce9;
+} else {
+var11 = "Type Error: missing primitive class `";
+var12 = standard___standard__NativeString___to_s_with_length(var11, 37l);
+var10 = var12;
+varonce9 = var10;
+}
+((struct instance_standard__NativeArray*)var8)->values[0]=var10;
+if (likely(varonce13!=NULL)) {
+var14 = varonce13;
+} else {
+var15 = "\'.";
+var16 = standard___standard__NativeString___to_s_with_length(var15, 2l);
+var14 = var16;
+varonce13 = var14;
+}
+((struct instance_standard__NativeArray*)var8)->values[2]=var14;
+} else {
+var8 = varonce;
+varonce = NULL;
+}
+((struct instance_standard__NativeArray*)var8)->values[1]=var_name;
+{
+var17 = ((val*(*)(val* self))(var8->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var8); /* native_to_s on <var8:NativeArray[String]>*/
+}
+varonce = var8;
+{
+nit___nit__ModelBuilder___error(self, var_node, var17); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+}
+var = var_mclass;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
 /* method modelbuilder_base#ModelBuilder#try_get_mproperty_by_name2 for (self: ModelBuilder, ANode, MModule, MType, String): nullable MProperty */
 val* nit___nit__ModelBuilder___try_get_mproperty_by_name2(val* self, val* p0, val* p1, val* p2, val* p3) {
 val* var /* : nullable MProperty */;
@@ -444,198 +528,185 @@ val* var1 /* : Model */;
 val* var3 /* : Model */;
 val* var4 /* : nullable Array[MProperty] */;
 val* var_props /* var props: nullable Array[MProperty] */;
-val* var5 /* : null */;
+short int var5 /* : Bool */;
 short int var6 /* : Bool */;
-short int var7 /* : Bool */;
-val* var8 /* : null */;
+val* var7 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
 val* var9 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
-val* var11 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
-val* var12 /* : nullable Object */;
+val* var10 /* : nullable Object */;
 val* var_cache /* var cache: nullable MProperty */;
-val* var13 /* : null */;
+short int var11 /* : Bool */;
+short int var12 /* : Bool */;
+val* var_other /* var other: nullable Object */;
 short int var14 /* : Bool */;
 short int var15 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var17 /* : Bool */;
-short int var18 /* : Bool */;
-val* var19 /* : null */;
 val* var_res /* var res: nullable MProperty */;
-val* var20 /* : null */;
 val* var_ress /* var ress: nullable Array[MProperty] */;
 val* var_ /* var : Array[MProperty] */;
-val* var21 /* : ArrayIterator[nullable Object] */;
-val* var_22 /* var : ArrayIterator[MProperty] */;
-short int var23 /* : Bool */;
-val* var24 /* : nullable Object */;
+val* var16 /* : ArrayIterator[nullable Object] */;
+val* var_17 /* var : ArrayIterator[MProperty] */;
+short int var18 /* : Bool */;
+val* var19 /* : nullable Object */;
 val* var_mprop /* var mprop: MProperty */;
-short int var25 /* : Bool */;
-short int var26 /* : Bool */;
-val* var27 /* : MClassDef */;
-val* var29 /* : MClassDef */;
-val* var30 /* : MModule */;
-val* var32 /* : MModule */;
-val* var33 /* : MVisibility */;
-val* var35 /* : MVisibility */;
-short int var36 /* : Bool */;
-short int var37 /* : Bool */;
-short int var38 /* : Bool */;
-short int var39 /* : Bool */;
-short int var40 /* : Bool */;
+short int var20 /* : Bool */;
+short int var21 /* : Bool */;
+val* var22 /* : MClassDef */;
+val* var24 /* : MClassDef */;
+val* var25 /* : MModule */;
+val* var27 /* : MModule */;
+val* var28 /* : MVisibility */;
+val* var30 /* : MVisibility */;
+short int var31 /* : Bool */;
+short int var32 /* : Bool */;
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
 int cltype;
 int idtype;
-short int var_41 /* var : Bool */;
+short int var_36 /* var : Bool */;
+short int var37 /* : Bool */;
+short int var39 /* : Bool */;
+short int var_40 /* var : Bool */;
+short int var41 /* : Bool */;
 short int var42 /* : Bool */;
-short int var44 /* : Bool */;
-short int var_45 /* var : Bool */;
-short int var46 /* : Bool */;
-short int var47 /* : Bool */;
-int cltype48;
-int idtype49;
-short int var50 /* : Bool */;
-short int var_51 /* var : Bool */;
-val* var52 /* : MClassDef */;
-val* var54 /* : MClassDef */;
+int cltype43;
+int idtype44;
+short int var45 /* : Bool */;
+short int var_46 /* var : Bool */;
+val* var47 /* : MClassDef */;
+val* var49 /* : MClassDef */;
+val* var50 /* : MClass */;
+val* var52 /* : MClass */;
+val* var53 /* : MClass */;
 val* var55 /* : MClass */;
-val* var57 /* : MClass */;
-val* var58 /* : MClass */;
-val* var60 /* : MClass */;
+short int var56 /* : Bool */;
+short int var58 /* : Bool */;
+short int var59 /* : Bool */;
+short int var60 /* : Bool */;
 short int var61 /* : Bool */;
-short int var63 /* : Bool */;
+val* var_other63 /* var other: nullable Object */;
 short int var64 /* : Bool */;
-val* var65 /* : null */;
 short int var66 /* : Bool */;
 short int var67 /* : Bool */;
-val* var_other69 /* var other: nullable Object */;
+short int var68 /* : Bool */;
+short int var69 /* : Bool */;
 short int var70 /* : Bool */;
-short int var72 /* : Bool */;
-short int var73 /* : Bool */;
+int cltype71;
+int idtype72;
+short int var_73 /* var : Bool */;
 short int var74 /* : Bool */;
-short int var75 /* : Bool */;
-short int var76 /* : Bool */;
-int cltype77;
-int idtype78;
-short int var_79 /* var : Bool */;
+int cltype75;
+int idtype76;
+short int var_77 /* var : Bool */;
+short int var78 /* : Bool */;
 short int var80 /* : Bool */;
-int cltype81;
-int idtype82;
-short int var_83 /* var : Bool */;
+short int var_81 /* var : Bool */;
+short int var82 /* : Bool */;
 short int var84 /* : Bool */;
-short int var86 /* : Bool */;
-short int var_87 /* var : Bool */;
-short int var88 /* : Bool */;
-short int var90 /* : Bool */;
+val* var85 /* : MClassDef */;
+val* var87 /* : MClassDef */;
+val* var88 /* : MClassType */;
+val* var90 /* : MClassType */;
+val* var_restype /* var restype: MClassType */;
 val* var91 /* : MClassDef */;
 val* var93 /* : MClassDef */;
 val* var94 /* : MClassType */;
 val* var96 /* : MClassType */;
-val* var_restype /* var restype: MClassType */;
-val* var97 /* : MClassDef */;
-val* var99 /* : MClassDef */;
-val* var100 /* : MClassType */;
-val* var102 /* : MClassType */;
 val* var_mproptype /* var mproptype: MClassType */;
-val* var103 /* : null */;
+short int var97 /* : Bool */;
+short int var98 /* : Bool */;
+short int var99 /* : Bool */;
+val* var100 /* : Array[MProperty] */;
+short int var102 /* : Bool */;
+short int var103 /* : Bool */;
 short int var104 /* : Bool */;
-val* var105 /* : null */;
-short int var106 /* : Bool */;
+short int var105 /* : Bool */;
 short int var107 /* : Bool */;
-val* var108 /* : Array[MProperty] */;
-short int var111 /* : Bool */;
-short int var112 /* : Bool */;
-val* var113 /* : null */;
+short int var108 /* : Bool */;
+short int var_109 /* var : Bool */;
+short int var110 /* : Bool */;
+int cltype111;
+int idtype112;
+short int var_113 /* var : Bool */;
 short int var114 /* : Bool */;
-short int var115 /* : Bool */;
-short int var117 /* : Bool */;
-short int var118 /* : Bool */;
-short int var_119 /* var : Bool */;
-short int var120 /* : Bool */;
-int cltype121;
-int idtype122;
-short int var_123 /* var : Bool */;
-short int var124 /* : Bool */;
-short int var126 /* : Bool */;
-val* var127 /* : MClassDef */;
-val* var129 /* : MClassDef */;
-val* var130 /* : MClassType */;
-val* var132 /* : MClassType */;
-val* var_restype133 /* var restype: MClassType */;
-val* var134 /* : Array[MProperty] */;
+short int var116 /* : Bool */;
+val* var117 /* : MClassDef */;
+val* var119 /* : MClassDef */;
+val* var120 /* : MClassType */;
+val* var122 /* : MClassType */;
+val* var_restype123 /* var restype: MClassType */;
+val* var124 /* : Array[MProperty] */;
 val* var_ress2 /* var ress2: Array[MProperty] */;
-val* var_135 /* var : Array[MProperty] */;
-val* var136 /* : ArrayIterator[nullable Object] */;
-val* var_137 /* var : ArrayIterator[MProperty] */;
+val* var_125 /* var : Array[MProperty] */;
+val* var126 /* : ArrayIterator[nullable Object] */;
+val* var_127 /* var : ArrayIterator[MProperty] */;
+short int var128 /* : Bool */;
+val* var129 /* : nullable Object */;
+val* var_mprop130 /* var mprop: MProperty */;
+val* var131 /* : MClassDef */;
+val* var133 /* : MClassDef */;
+val* var134 /* : MClassType */;
+val* var136 /* : MClassType */;
+val* var_mproptype137 /* var mproptype: MClassType */;
 short int var138 /* : Bool */;
-val* var139 /* : nullable Object */;
-val* var_mprop140 /* var mprop: MProperty */;
-val* var141 /* : MClassDef */;
-val* var143 /* : MClassDef */;
-val* var144 /* : MClassType */;
-val* var146 /* : MClassType */;
-val* var_mproptype147 /* var mproptype: MClassType */;
-val* var148 /* : null */;
+short int var139 /* : Bool */;
+short int var140 /* : Bool */;
+short int var141 /* : Bool */;
+int cltype142;
+int idtype143;
+short int var144 /* : Bool */;
+short int var_145 /* var : Bool */;
+short int var146 /* : Bool */;
+short int var148 /* : Bool */;
 short int var149 /* : Bool */;
-short int var150 /* : Bool */;
 short int var151 /* : Bool */;
 short int var152 /* : Bool */;
-int cltype153;
-int idtype154;
+short int var153 /* : Bool */;
 short int var155 /* : Bool */;
-short int var_156 /* var : Bool */;
-short int var157 /* : Bool */;
-short int var159 /* : Bool */;
+short int var156 /* : Bool */;
+long var157 /* : Int */;
+long var159 /* : Int */;
 short int var160 /* : Bool */;
-short int var163 /* : Bool */;
-val* var164 /* : null */;
-val* var165 /* : null */;
-short int var166 /* : Bool */;
-short int var167 /* : Bool */;
-short int var169 /* : Bool */;
-short int var170 /* : Bool */;
-long var171 /* : Int */;
-long var173 /* : Int */;
-long var174 /* : Int */;
-short int var175 /* : Bool */;
-short int var177 /* : Bool */;
-int cltype178;
-int idtype179;
+short int var162 /* : Bool */;
+int cltype163;
+int idtype164;
 const char* var_class_name;
-short int var180 /* : Bool */;
-val* var181 /* : Array[String] */;
+short int var165 /* : Bool */;
+val* var166 /* : Array[String] */;
 val* var_s /* var s: Array[String] */;
-val* var_182 /* var : Array[MProperty] */;
-val* var183 /* : ArrayIterator[nullable Object] */;
-val* var_184 /* var : ArrayIterator[MProperty] */;
-short int var185 /* : Bool */;
-val* var186 /* : nullable Object */;
-val* var_mprop187 /* var mprop: MProperty */;
-val* var188 /* : String */;
+val* var_167 /* var : Array[MProperty] */;
+val* var168 /* : ArrayIterator[nullable Object] */;
+val* var_169 /* var : ArrayIterator[MProperty] */;
+short int var170 /* : Bool */;
+val* var171 /* : nullable Object */;
+val* var_mprop172 /* var mprop: MProperty */;
+val* var173 /* : String */;
+val* var175 /* : NativeArray[String] */;
 static val* varonce;
-val* var191 /* : String */;
-char* var192 /* : NativeString */;
-long var193 /* : Int */;
-val* var194 /* : FlatString */;
-static val* varonce195;
-val* var196 /* : String */;
-char* var197 /* : NativeString */;
-long var198 /* : Int */;
-val* var199 /* : FlatString */;
-static val* varonce200;
-val* var201 /* : String */;
-char* var202 /* : NativeString */;
-long var203 /* : Int */;
-val* var204 /* : FlatString */;
-static val* varonce205;
-val* var206 /* : String */;
-char* var207 /* : NativeString */;
-long var208 /* : Int */;
-val* var209 /* : FlatString */;
-val* var210 /* : String */;
-val* var211 /* : Array[Object] */;
-long var212 /* : Int */;
-val* var213 /* : NativeArray[Object] */;
-val* var214 /* : String */;
-val* var215 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
-val* var217 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+static val* varonce176;
+val* var177 /* : String */;
+char* var178 /* : NativeString */;
+val* var179 /* : FlatString */;
+static val* varonce180;
+val* var181 /* : String */;
+char* var182 /* : NativeString */;
+val* var183 /* : FlatString */;
+static val* varonce184;
+val* var185 /* : String */;
+char* var186 /* : NativeString */;
+val* var187 /* : FlatString */;
+static val* varonce188;
+val* var189 /* : String */;
+char* var190 /* : NativeString */;
+val* var191 /* : FlatString */;
+val* var192 /* : String */;
+static val* varonce193;
+val* var194 /* : String */;
+char* var195 /* : NativeString */;
+val* var196 /* : FlatString */;
+val* var197 /* : String */;
+val* var198 /* : String */;
+val* var199 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+val* var201 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
 var_anode = p0;
 var_mmodule = p1;
 var_mtype = p2;
@@ -646,7 +717,7 @@ var3 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___model].val; /* _
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 44);
-show_backtrace(1);
+fatal_exit(1);
 }
 var1 = var3;
 RET_LABEL2:(void)0;
@@ -656,129 +727,124 @@ RET_LABEL2:(void)0;
 var4 = nit__model___Model___get_mproperties_by_name(var1, var_name);
 }
 var_props = var4;
-var5 = NULL;
 if (var_props == NULL) {
-var6 = 1; /* is null */
+var5 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var5 = 0; /* arg is null but recv is not */
 }
 if (0) {
-var7 = standard___standard__Array___standard__kernel__Object___61d_61d(var_props, var5);
-var6 = var7;
+var6 = standard___standard__Array___standard__kernel__Object___61d_61d(var_props, ((val*)NULL));
+var5 = var6;
 }
-if (var6){
-var8 = NULL;
-var = var8;
+if (var5){
+var = ((val*)NULL);
 goto RET_LABEL;
 } else {
 }
 {
 { /* Inline modelbuilder_base#ModelBuilder#try_get_mproperty_by_name2_cache (self) on <self:ModelBuilder> */
-var11 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
-if (unlikely(var11 == NULL)) {
+var9 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
+if (unlikely(var9 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _try_get_mproperty_by_name2_cache");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 168);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 178);
+fatal_exit(1);
 }
-var9 = var11;
-RET_LABEL10:(void)0;
+var7 = var9;
+RET_LABEL8:(void)0;
 }
 }
 {
-var12 = more_collections___more_collections__HashMap3____91d_93d(var9, var_mmodule, var_mtype, var_name);
+var10 = more_collections___more_collections__HashMap3____91d_93d(var7, var_mmodule, var_mtype, var_name);
 }
-var_cache = var12;
-var13 = NULL;
+var_cache = var10;
 if (var_cache == NULL) {
-var14 = 0; /* is null */
+var11 = 0; /* is null */
 } else {
-var14 = 1; /* arg is null and recv is not */
+var11 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_cache,var13) on <var_cache:nullable MProperty> */
-var_other = var13;
+{ /* Inline kernel#Object#!= (var_cache,((val*)NULL)) on <var_cache:nullable MProperty> */
+var_other = ((val*)NULL);
 {
-var17 = ((short int (*)(val* self, val* p0))(var_cache->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_cache, var_other) /* == on <var_cache:nullable MProperty(MProperty)>*/;
+var14 = ((short int(*)(val* self, val* p0))(var_cache->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_cache, var_other); /* == on <var_cache:nullable MProperty(MProperty)>*/
 }
-var18 = !var17;
-var15 = var18;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
+var15 = !var14;
+var12 = var15;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
 }
-var14 = var15;
+var11 = var12;
 }
-if (var14){
+if (var11){
 var = var_cache;
 goto RET_LABEL;
 } else {
 }
-var19 = NULL;
-var_res = var19;
-var20 = NULL;
-var_ress = var20;
+var_res = ((val*)NULL);
+var_ress = ((val*)NULL);
 var_ = var_props;
 {
-var21 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
+var16 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
 }
-var_22 = var21;
+var_17 = var16;
 for(;;) {
 {
-var23 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_22);
+var18 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_17);
 }
-if (var23){
+if (var18){
 {
-var24 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_22);
+var19 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_17);
 }
-var_mprop = var24;
+var_mprop = var19;
 {
-var25 = nit___nit__MType___has_mproperty(var_mtype, var_mmodule, var_mprop);
+var20 = nit___nit__MType___has_mproperty(var_mtype, var_mmodule, var_mprop);
 }
-var26 = !var25;
-if (var26){
+var21 = !var20;
+if (var21){
 goto BREAK_label;
 } else {
 }
 {
 { /* Inline model#MProperty#intro_mclassdef (var_mprop) on <var_mprop:MProperty> */
-var29 = var_mprop->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty> */
-if (unlikely(var29 == NULL)) {
+var24 = var_mprop->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty> */
+if (unlikely(var24 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1928);
+fatal_exit(1);
 }
-var27 = var29;
-RET_LABEL28:(void)0;
+var22 = var24;
+RET_LABEL23:(void)0;
 }
 }
 {
-{ /* Inline model#MClassDef#mmodule (var27) on <var27:MClassDef> */
-var32 = var27->attrs[COLOR_nit__model__MClassDef___mmodule].val; /* _mmodule on <var27:MClassDef> */
-if (unlikely(var32 == NULL)) {
+{ /* Inline model#MClassDef#mmodule (var22) on <var22:MClassDef> */
+var27 = var22->attrs[COLOR_nit__model__MClassDef___mmodule].val; /* _mmodule on <var22:MClassDef> */
+if (unlikely(var27 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 489);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 550);
+fatal_exit(1);
 }
-var30 = var32;
-RET_LABEL31:(void)0;
+var25 = var27;
+RET_LABEL26:(void)0;
 }
 }
 {
 { /* Inline model#MProperty#visibility (var_mprop) on <var_mprop:MProperty> */
-var35 = var_mprop->attrs[COLOR_nit__model__MProperty___visibility].val; /* _visibility on <var_mprop:MProperty> */
-if (unlikely(var35 == NULL)) {
+var30 = var_mprop->attrs[COLOR_nit__model__MProperty___visibility].val; /* _visibility on <var_mprop:MProperty> */
+if (unlikely(var30 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _visibility");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1757);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1949);
+fatal_exit(1);
 }
-var33 = var35;
-RET_LABEL34:(void)0;
+var28 = var30;
+RET_LABEL29:(void)0;
 }
 }
 {
-var36 = nit___nit__MModule___is_visible(var_mmodule, var30, var33);
+var31 = nit___nit__MModule___is_visible(var_mmodule, var25, var28);
 }
-var37 = !var36;
-if (var37){
+var32 = !var31;
+if (var32){
 goto BREAK_label;
 } else {
 }
@@ -786,250 +852,247 @@ goto BREAK_label;
 cltype = type_nit__MMethod.color;
 idtype = type_nit__MMethod.id;
 if(cltype >= var_mprop->type->table_size) {
-var40 = 0;
+var35 = 0;
 } else {
-var40 = var_mprop->type->type_table[cltype] == idtype;
+var35 = var_mprop->type->type_table[cltype] == idtype;
 }
-var_41 = var40;
-if (var40){
+var_36 = var35;
+if (var35){
 {
 { /* Inline model#MMethod#is_new (var_mprop) on <var_mprop:MProperty(MMethod)> */
-var44 = var_mprop->attrs[COLOR_nit__model__MMethod___is_new].s; /* _is_new on <var_mprop:MProperty(MMethod)> */
-var42 = var44;
-RET_LABEL43:(void)0;
+var39 = var_mprop->attrs[COLOR_nit__model__MMethod___is_new].s; /* _is_new on <var_mprop:MProperty(MMethod)> */
+var37 = var39;
+RET_LABEL38:(void)0;
 }
 }
-var39 = var42;
+var34 = var37;
 } else {
-var39 = var_41;
+var34 = var_36;
 }
-var_45 = var39;
-if (var39){
+var_40 = var34;
+if (var34){
 /* <var_mtype:MType> isa MClassType */
-cltype48 = type_nit__MClassType.color;
-idtype49 = type_nit__MClassType.id;
-if(cltype48 >= var_mtype->type->table_size) {
-var47 = 0;
+cltype43 = type_nit__MClassType.color;
+idtype44 = type_nit__MClassType.id;
+if(cltype43 >= var_mtype->type->table_size) {
+var42 = 0;
 } else {
-var47 = var_mtype->type->type_table[cltype48] == idtype49;
+var42 = var_mtype->type->type_table[cltype43] == idtype44;
 }
-var50 = !var47;
-var_51 = var50;
-if (var50){
-var46 = var_51;
+var45 = !var42;
+var_46 = var45;
+if (var45){
+var41 = var_46;
 } else {
 {
 { /* Inline model#MProperty#intro_mclassdef (var_mprop) on <var_mprop:MProperty(MMethod)> */
-var54 = var_mprop->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty(MMethod)> */
-if (unlikely(var54 == NULL)) {
+var49 = var_mprop->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty(MMethod)> */
+if (unlikely(var49 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1928);
+fatal_exit(1);
 }
-var52 = var54;
-RET_LABEL53:(void)0;
+var47 = var49;
+RET_LABEL48:(void)0;
 }
 }
 {
-{ /* Inline model#MClassDef#mclass (var52) on <var52:MClassDef> */
-var57 = var52->attrs[COLOR_nit__model__MClassDef___mclass].val; /* _mclass on <var52:MClassDef> */
-if (unlikely(var57 == NULL)) {
+{ /* Inline model#MClassDef#mclass (var47) on <var47:MClassDef> */
+var52 = var47->attrs[COLOR_nit__model__MClassDef___mclass].val; /* _mclass on <var47:MClassDef> */
+if (unlikely(var52 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 492);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 553);
+fatal_exit(1);
 }
-var55 = var57;
-RET_LABEL56:(void)0;
+var50 = var52;
+RET_LABEL51:(void)0;
 }
 }
 {
 { /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
-var60 = var_mtype->attrs[COLOR_nit__model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
-if (unlikely(var60 == NULL)) {
+var55 = var_mtype->attrs[COLOR_nit__model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
+if (unlikely(var55 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1058);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1138);
+fatal_exit(1);
 }
-var58 = var60;
-RET_LABEL59:(void)0;
+var53 = var55;
+RET_LABEL54:(void)0;
 }
 }
 {
-{ /* Inline kernel#Object#!= (var55,var58) on <var55:MClass> */
-var_other = var58;
+{ /* Inline kernel#Object#!= (var50,var53) on <var50:MClass> */
+var_other = var53;
 {
-var63 = ((short int (*)(val* self, val* p0))(var55->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var55, var_other) /* == on <var55:MClass>*/;
+var58 = ((short int(*)(val* self, val* p0))(var50->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var50, var_other); /* == on <var50:MClass>*/
 }
-var64 = !var63;
-var61 = var64;
-goto RET_LABEL62;
-RET_LABEL62:(void)0;
+var59 = !var58;
+var56 = var59;
+goto RET_LABEL57;
+RET_LABEL57:(void)0;
 }
 }
-var46 = var61;
+var41 = var56;
 }
-var38 = var46;
+var33 = var41;
 } else {
-var38 = var_45;
+var33 = var_40;
 }
-if (var38){
+if (var33){
 goto BREAK_label;
 } else {
 }
-var65 = NULL;
 if (var_res == NULL) {
-var66 = 1; /* is null */
+var60 = 1; /* is null */
 } else {
-var66 = 0; /* arg is null but recv is not */
+var60 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_res,var65) on <var_res:nullable MProperty> */
-var_other69 = var65;
+{ /* Inline kernel#Object#== (var_res,((val*)NULL)) on <var_res:nullable MProperty> */
+var_other63 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_res,var_other69) on <var_res:nullable MProperty(MProperty)> */
-var72 = var_res == var_other69;
-var70 = var72;
-goto RET_LABEL71;
-RET_LABEL71:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_res,var_other63) on <var_res:nullable MProperty(MProperty)> */
+var66 = var_res == var_other63;
+var64 = var66;
+goto RET_LABEL65;
+RET_LABEL65:(void)0;
 }
 }
-var67 = var70;
-goto RET_LABEL68;
-RET_LABEL68:(void)0;
+var61 = var64;
+goto RET_LABEL62;
+RET_LABEL62:(void)0;
 }
-var66 = var67;
+var60 = var61;
 }
-if (var66){
+if (var60){
 var_res = var_mprop;
 goto BREAK_label;
 } else {
 }
 /* <var_res:nullable MProperty(MProperty)> isa MMethod */
-cltype77 = type_nit__MMethod.color;
-idtype78 = type_nit__MMethod.id;
-if(cltype77 >= var_res->type->table_size) {
-var76 = 0;
+cltype71 = type_nit__MMethod.color;
+idtype72 = type_nit__MMethod.id;
+if(cltype71 >= var_res->type->table_size) {
+var70 = 0;
 } else {
-var76 = var_res->type->type_table[cltype77] == idtype78;
+var70 = var_res->type->type_table[cltype71] == idtype72;
 }
-var_79 = var76;
-if (var76){
+var_73 = var70;
+if (var70){
 /* <var_mprop:MProperty> isa MMethod */
-cltype81 = type_nit__MMethod.color;
-idtype82 = type_nit__MMethod.id;
-if(cltype81 >= var_mprop->type->table_size) {
-var80 = 0;
+cltype75 = type_nit__MMethod.color;
+idtype76 = type_nit__MMethod.id;
+if(cltype75 >= var_mprop->type->table_size) {
+var74 = 0;
 } else {
-var80 = var_mprop->type->type_table[cltype81] == idtype82;
+var74 = var_mprop->type->type_table[cltype75] == idtype76;
 }
-var75 = var80;
+var69 = var74;
 } else {
-var75 = var_79;
+var69 = var_73;
 }
-var_83 = var75;
-if (var75){
+var_77 = var69;
+if (var69){
 {
 { /* Inline model#MMethod#is_init (var_res) on <var_res:nullable MProperty(MMethod)> */
-var86 = var_res->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_res:nullable MProperty(MMethod)> */
-var84 = var86;
-RET_LABEL85:(void)0;
+var80 = var_res->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_res:nullable MProperty(MMethod)> */
+var78 = var80;
+RET_LABEL79:(void)0;
 }
 }
-var74 = var84;
+var68 = var78;
 } else {
-var74 = var_83;
+var68 = var_77;
 }
-var_87 = var74;
-if (var74){
+var_81 = var68;
+if (var68){
 {
 { /* Inline model#MMethod#is_init (var_mprop) on <var_mprop:MProperty(MMethod)> */
-var90 = var_mprop->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_mprop:MProperty(MMethod)> */
-var88 = var90;
-RET_LABEL89:(void)0;
+var84 = var_mprop->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_mprop:MProperty(MMethod)> */
+var82 = var84;
+RET_LABEL83:(void)0;
 }
 }
-var73 = var88;
+var67 = var82;
 } else {
-var73 = var_87;
+var67 = var_81;
 }
-if (var73){
+if (var67){
 {
 { /* Inline model#MProperty#intro_mclassdef (var_res) on <var_res:nullable MProperty(MMethod)> */
-var93 = var_res->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_res:nullable MProperty(MMethod)> */
-if (unlikely(var93 == NULL)) {
+var87 = var_res->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_res:nullable MProperty(MMethod)> */
+if (unlikely(var87 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1928);
+fatal_exit(1);
 }
-var91 = var93;
-RET_LABEL92:(void)0;
+var85 = var87;
+RET_LABEL86:(void)0;
 }
 }
 {
-{ /* Inline model#MClassDef#bound_mtype (var91) on <var91:MClassDef> */
-var96 = var91->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var91:MClassDef> */
-if (unlikely(var96 == NULL)) {
+{ /* Inline model#MClassDef#bound_mtype (var85) on <var85:MClassDef> */
+var90 = var85->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var85:MClassDef> */
+if (unlikely(var90 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 495);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-var94 = var96;
-RET_LABEL95:(void)0;
+var88 = var90;
+RET_LABEL89:(void)0;
 }
 }
-var_restype = var94;
+var_restype = var88;
 {
 { /* Inline model#MProperty#intro_mclassdef (var_mprop) on <var_mprop:MProperty(MMethod)> */
-var99 = var_mprop->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty(MMethod)> */
-if (unlikely(var99 == NULL)) {
+var93 = var_mprop->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty(MMethod)> */
+if (unlikely(var93 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1928);
+fatal_exit(1);
 }
-var97 = var99;
-RET_LABEL98:(void)0;
+var91 = var93;
+RET_LABEL92:(void)0;
 }
 }
 {
-{ /* Inline model#MClassDef#bound_mtype (var97) on <var97:MClassDef> */
-var102 = var97->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var97:MClassDef> */
-if (unlikely(var102 == NULL)) {
+{ /* Inline model#MClassDef#bound_mtype (var91) on <var91:MClassDef> */
+var96 = var91->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var91:MClassDef> */
+if (unlikely(var96 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 495);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-var100 = var102;
-RET_LABEL101:(void)0;
+var94 = var96;
+RET_LABEL95:(void)0;
 }
 }
-var_mproptype = var100;
-var103 = NULL;
+var_mproptype = var94;
 {
-var104 = nit___nit__MType___is_subtype(var_mproptype, var_mmodule, var103, var_restype);
+var97 = nit___nit__MType___is_subtype(var_mproptype, var_mmodule, ((val*)NULL), var_restype);
 }
-if (var104){
+if (var97){
 var_res = var_mprop;
 goto BREAK_label;
 } else {
 }
 } else {
 }
-var105 = NULL;
 if (var_ress == NULL) {
-var106 = 1; /* is null */
+var98 = 1; /* is null */
 } else {
-var106 = 0; /* arg is null but recv is not */
+var98 = 0; /* arg is null but recv is not */
 }
 if (0) {
-var107 = standard___standard__Array___standard__kernel__Object___61d_61d(var_ress, var105);
-var106 = var107;
+var99 = standard___standard__Array___standard__kernel__Object___61d_61d(var_ress, ((val*)NULL));
+var98 = var99;
 }
-if (var106){
-var108 = NEW_standard__Array(&type_standard__Array__nit__MProperty);
+if (var98){
+var100 = NEW_standard__Array(&type_standard__Array__nit__MProperty);
 {
-standard___standard__Array___standard__kernel__Object__init(var108); /* Direct call array#Array#init on <var108:Array[MProperty]>*/
+standard___standard__Array___standard__kernel__Object__init(var100); /* Direct call array#Array#init on <var100:Array[MProperty]>*/
 }
-var_ress = var108;
+var_ress = var100;
 {
 standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_ress, var_res); /* Direct call array#Array#add on <var_ress:nullable Array[MProperty](Array[MProperty])>*/
 }
@@ -1040,197 +1103,190 @@ standard___standard__Array___standard__abstract_collection__SimpleCollection__ad
 }
 BREAK_label: (void)0;
 {
-standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_22); /* Direct call array#ArrayIterator#next on <var_22:ArrayIterator[MProperty]>*/
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_17); /* Direct call array#ArrayIterator#next on <var_17:ArrayIterator[MProperty]>*/
 }
 } else {
-goto BREAK_label109;
+goto BREAK_label101;
 }
 }
-BREAK_label109: (void)0;
+BREAK_label101: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_22) on <var_22:ArrayIterator[MProperty]> */
-RET_LABEL110:(void)0;
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_17); /* Direct call array#ArrayIterator#finish on <var_17:ArrayIterator[MProperty]>*/
 }
-}
-var113 = NULL;
 if (var_ress == NULL) {
-var114 = 0; /* is null */
+var104 = 0; /* is null */
 } else {
-var114 = 1; /* arg is null and recv is not */
+var104 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_ress,var113) on <var_ress:nullable Array[MProperty]> */
-var_other = var113;
+{ /* Inline kernel#Object#!= (var_ress,((val*)NULL)) on <var_ress:nullable Array[MProperty]> */
+var_other = ((val*)NULL);
 {
-var117 = ((short int (*)(val* self, val* p0))(var_ress->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ress, var_other) /* == on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
+var107 = ((short int(*)(val* self, val* p0))(var_ress->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ress, var_other); /* == on <var_ress:nullable Array[MProperty](Array[MProperty])>*/
 }
-var118 = !var117;
-var115 = var118;
-goto RET_LABEL116;
-RET_LABEL116:(void)0;
+var108 = !var107;
+var105 = var108;
+goto RET_LABEL106;
+RET_LABEL106:(void)0;
 }
-var114 = var115;
+var104 = var105;
 }
-var_119 = var114;
-if (var114){
+var_109 = var104;
+if (var104){
 /* <var_res:nullable MProperty> isa MMethod */
-cltype121 = type_nit__MMethod.color;
-idtype122 = type_nit__MMethod.id;
+cltype111 = type_nit__MMethod.color;
+idtype112 = type_nit__MMethod.id;
 if(var_res == NULL) {
-var120 = 0;
+var110 = 0;
 } else {
-if(cltype121 >= var_res->type->table_size) {
-var120 = 0;
+if(cltype111 >= var_res->type->table_size) {
+var110 = 0;
 } else {
-var120 = var_res->type->type_table[cltype121] == idtype122;
+var110 = var_res->type->type_table[cltype111] == idtype112;
 }
 }
-var112 = var120;
+var103 = var110;
 } else {
-var112 = var_119;
+var103 = var_109;
 }
-var_123 = var112;
-if (var112){
+var_113 = var103;
+if (var103){
 {
 { /* Inline model#MMethod#is_init (var_res) on <var_res:nullable MProperty(MMethod)> */
-var126 = var_res->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_res:nullable MProperty(MMethod)> */
-var124 = var126;
-RET_LABEL125:(void)0;
+var116 = var_res->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_res:nullable MProperty(MMethod)> */
+var114 = var116;
+RET_LABEL115:(void)0;
 }
 }
-var111 = var124;
+var102 = var114;
 } else {
-var111 = var_123;
+var102 = var_113;
 }
-if (var111){
+if (var102){
 {
 { /* Inline model#MProperty#intro_mclassdef (var_res) on <var_res:nullable MProperty(MMethod)> */
-var129 = var_res->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_res:nullable MProperty(MMethod)> */
-if (unlikely(var129 == NULL)) {
+var119 = var_res->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_res:nullable MProperty(MMethod)> */
+if (unlikely(var119 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1928);
+fatal_exit(1);
 }
-var127 = var129;
-RET_LABEL128:(void)0;
+var117 = var119;
+RET_LABEL118:(void)0;
 }
 }
 {
-{ /* Inline model#MClassDef#bound_mtype (var127) on <var127:MClassDef> */
-var132 = var127->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var127:MClassDef> */
-if (unlikely(var132 == NULL)) {
+{ /* Inline model#MClassDef#bound_mtype (var117) on <var117:MClassDef> */
+var122 = var117->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var117:MClassDef> */
+if (unlikely(var122 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 495);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-var130 = var132;
-RET_LABEL131:(void)0;
+var120 = var122;
+RET_LABEL121:(void)0;
 }
 }
-var_restype133 = var130;
-var134 = NEW_standard__Array(&type_standard__Array__nit__MProperty);
+var_restype123 = var120;
+var124 = NEW_standard__Array(&type_standard__Array__nit__MProperty);
 {
-standard___standard__Array___standard__kernel__Object__init(var134); /* Direct call array#Array#init on <var134:Array[MProperty]>*/
+standard___standard__Array___standard__kernel__Object__init(var124); /* Direct call array#Array#init on <var124:Array[MProperty]>*/
 }
-var_ress2 = var134;
-var_135 = var_ress;
+var_ress2 = var124;
+var_125 = var_ress;
 {
-var136 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_135);
+var126 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_125);
 }
-var_137 = var136;
+var_127 = var126;
 for(;;) {
 {
-var138 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_137);
+var128 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_127);
 }
-if (var138){
+if (var128){
 {
-var139 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_137);
+var129 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_127);
 }
-var_mprop140 = var139;
+var_mprop130 = var129;
 {
-{ /* Inline model#MProperty#intro_mclassdef (var_mprop140) on <var_mprop140:MProperty> */
-var143 = var_mprop140->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop140:MProperty> */
-if (unlikely(var143 == NULL)) {
+{ /* Inline model#MProperty#intro_mclassdef (var_mprop130) on <var_mprop130:MProperty> */
+var133 = var_mprop130->attrs[COLOR_nit__model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop130:MProperty> */
+if (unlikely(var133 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1736);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1928);
+fatal_exit(1);
 }
-var141 = var143;
-RET_LABEL142:(void)0;
+var131 = var133;
+RET_LABEL132:(void)0;
 }
 }
 {
-{ /* Inline model#MClassDef#bound_mtype (var141) on <var141:MClassDef> */
-var146 = var141->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var141:MClassDef> */
-if (unlikely(var146 == NULL)) {
+{ /* Inline model#MClassDef#bound_mtype (var131) on <var131:MClassDef> */
+var136 = var131->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var131:MClassDef> */
+if (unlikely(var136 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 495);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-var144 = var146;
-RET_LABEL145:(void)0;
+var134 = var136;
+RET_LABEL135:(void)0;
 }
 }
-var_mproptype147 = var144;
-var148 = NULL;
+var_mproptype137 = var134;
 {
-var149 = nit___nit__MType___is_subtype(var_restype133, var_mmodule, var148, var_mproptype147);
+var138 = nit___nit__MType___is_subtype(var_restype123, var_mmodule, ((val*)NULL), var_mproptype137);
 }
-var150 = !var149;
-if (var150){
+var139 = !var138;
+if (var139){
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_ress2, var_mprop140); /* Direct call array#Array#add on <var_ress2:Array[MProperty]>*/
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_ress2, var_mprop130); /* Direct call array#Array#add on <var_ress2:Array[MProperty]>*/
 }
 } else {
-/* <var_mprop140:MProperty> isa MMethod */
-cltype153 = type_nit__MMethod.color;
-idtype154 = type_nit__MMethod.id;
-if(cltype153 >= var_mprop140->type->table_size) {
-var152 = 0;
+/* <var_mprop130:MProperty> isa MMethod */
+cltype142 = type_nit__MMethod.color;
+idtype143 = type_nit__MMethod.id;
+if(cltype142 >= var_mprop130->type->table_size) {
+var141 = 0;
 } else {
-var152 = var_mprop140->type->type_table[cltype153] == idtype154;
+var141 = var_mprop130->type->type_table[cltype142] == idtype143;
 }
-var155 = !var152;
-var_156 = var155;
-if (var155){
-var151 = var_156;
+var144 = !var141;
+var_145 = var144;
+if (var144){
+var140 = var_145;
 } else {
 {
-{ /* Inline model#MMethod#is_init (var_mprop140) on <var_mprop140:MProperty(MMethod)> */
-var159 = var_mprop140->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_mprop140:MProperty(MMethod)> */
-var157 = var159;
-RET_LABEL158:(void)0;
+{ /* Inline model#MMethod#is_init (var_mprop130) on <var_mprop130:MProperty(MMethod)> */
+var148 = var_mprop130->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_mprop130:MProperty(MMethod)> */
+var146 = var148;
+RET_LABEL147:(void)0;
 }
 }
-var160 = !var157;
-var151 = var160;
+var149 = !var146;
+var140 = var149;
 }
-if (var151){
+if (var140){
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_ress2, var_mprop140); /* Direct call array#Array#add on <var_ress2:Array[MProperty]>*/
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_ress2, var_mprop130); /* Direct call array#Array#add on <var_ress2:Array[MProperty]>*/
 }
 } else {
 }
 }
 {
-standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_137); /* Direct call array#ArrayIterator#next on <var_137:ArrayIterator[MProperty]>*/
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_127); /* Direct call array#ArrayIterator#next on <var_127:ArrayIterator[MProperty]>*/
 }
 } else {
-goto BREAK_label161;
+goto BREAK_label150;
 }
 }
-BREAK_label161: (void)0;
+BREAK_label150: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_137) on <var_137:ArrayIterator[MProperty]> */
-RET_LABEL162:(void)0;
-}
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_127); /* Direct call array#ArrayIterator#finish on <var_127:ArrayIterator[MProperty]>*/
 }
 {
-var163 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__is_empty(var_ress2);
+var151 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__is_empty(var_ress2);
 }
-if (var163){
-var164 = NULL;
-var_ress = var164;
+if (var151){
+var_ress = ((val*)NULL);
 } else {
 var_ress = var_ress2;
 {
@@ -1239,169 +1295,172 @@ standard___standard__Array___standard__abstract_collection__SimpleCollection__ad
 }
 } else {
 }
-var165 = NULL;
 if (var_ress == NULL) {
-var166 = 0; /* is null */
+var152 = 0; /* is null */
 } else {
-var166 = 1; /* arg is null and recv is not */
+var152 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_ress,var165) on <var_ress:nullable Array[MProperty]> */
-var_other = var165;
+{ /* Inline kernel#Object#!= (var_ress,((val*)NULL)) on <var_ress:nullable Array[MProperty]> */
+var_other = ((val*)NULL);
 {
-var169 = ((short int (*)(val* self, val* p0))(var_ress->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ress, var_other) /* == on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
+var155 = ((short int(*)(val* self, val* p0))(var_ress->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ress, var_other); /* == on <var_ress:nullable Array[MProperty](Array[MProperty])>*/
 }
-var170 = !var169;
-var167 = var170;
-goto RET_LABEL168;
-RET_LABEL168:(void)0;
+var156 = !var155;
+var153 = var156;
+goto RET_LABEL154;
+RET_LABEL154:(void)0;
 }
-var166 = var167;
+var152 = var153;
 }
-if (var166){
+if (var152){
 {
 { /* Inline array#AbstractArrayRead#length (var_ress) on <var_ress:nullable Array[MProperty](Array[MProperty])> */
-var173 = var_ress->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_ress:nullable Array[MProperty](Array[MProperty])> */
-var171 = var173;
-RET_LABEL172:(void)0;
+var159 = var_ress->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_ress:nullable Array[MProperty](Array[MProperty])> */
+var157 = var159;
+RET_LABEL158:(void)0;
 }
 }
-var174 = 1;
 {
-{ /* Inline kernel#Int#> (var171,var174) on <var171:Int> */
-/* Covariant cast for argument 0 (i) <var174:Int> isa OTHER */
-/* <var174:Int> isa OTHER */
-var177 = 1; /* easy <var174:Int> isa OTHER*/
-if (unlikely(!var177)) {
+{ /* Inline kernel#Int#> (var157,1l) on <var157:Int> */
+/* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
+/* <1l:Int> isa OTHER */
+var162 = 1; /* easy <1l:Int> isa OTHER*/
+if (unlikely(!var162)) {
 var_class_name = type_standard__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 412);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 536);
+fatal_exit(1);
 }
-var180 = var171 > var174;
-var175 = var180;
-goto RET_LABEL176;
-RET_LABEL176:(void)0;
+var165 = var157 > 1l;
+var160 = var165;
+goto RET_LABEL161;
+RET_LABEL161:(void)0;
 }
 }
-if (unlikely(!var175)) {
+if (unlikely(!var160)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 158);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 168);
+fatal_exit(1);
 }
-var181 = NEW_standard__Array(&type_standard__Array__standard__String);
+var166 = NEW_standard__Array(&type_standard__Array__standard__String);
 {
-standard___standard__Array___standard__kernel__Object__init(var181); /* Direct call array#Array#init on <var181:Array[String]>*/
+standard___standard__Array___standard__kernel__Object__init(var166); /* Direct call array#Array#init on <var166:Array[String]>*/
 }
-var_s = var181;
-var_182 = var_ress;
+var_s = var166;
+var_167 = var_ress;
 {
-var183 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_182);
+var168 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_167);
 }
-var_184 = var183;
+var_169 = var168;
 for(;;) {
 {
-var185 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_184);
+var170 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_169);
 }
-if (var185){
+if (var170){
 {
-var186 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_184);
+var171 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_169);
 }
-var_mprop187 = var186;
+var_mprop172 = var171;
 {
-var188 = nit___nit__MProperty___nit__model_base__MEntity__full_name(var_mprop187);
+var173 = nit___nit__MProperty___nit__model_base__MEntity__full_name(var_mprop172);
 }
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_s, var188); /* Direct call array#Array#add on <var_s:Array[String]>*/
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_s, var173); /* Direct call array#Array#add on <var_s:Array[String]>*/
 }
 {
-standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_184); /* Direct call array#ArrayIterator#next on <var_184:ArrayIterator[MProperty]>*/
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_169); /* Direct call array#ArrayIterator#next on <var_169:ArrayIterator[MProperty]>*/
 }
 } else {
-goto BREAK_label189;
+goto BREAK_label174;
 }
 }
-BREAK_label189: (void)0;
+BREAK_label174: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_184) on <var_184:ArrayIterator[MProperty]> */
-RET_LABEL190:(void)0;
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_169); /* Direct call array#ArrayIterator#finish on <var_169:ArrayIterator[MProperty]>*/
 }
+if (unlikely(varonce==NULL)) {
+var175 = NEW_standard__NativeArray(7l, &type_standard__NativeArray__standard__String);
+if (likely(varonce176!=NULL)) {
+var177 = varonce176;
+} else {
+var178 = "Error: ambiguous property name `";
+var179 = standard___standard__NativeString___to_s_with_length(var178, 32l);
+var177 = var179;
+varonce176 = var177;
 }
-if (varonce) {
-var191 = varonce;
+((struct instance_standard__NativeArray*)var175)->values[0]=var177;
+if (likely(varonce180!=NULL)) {
+var181 = varonce180;
 } else {
-var192 = "Ambigous property name \'";
-var193 = 24;
-var194 = standard___standard__NativeString___to_s_with_length(var192, var193);
-var191 = var194;
-varonce = var191;
+var182 = "` for `";
+var183 = standard___standard__NativeString___to_s_with_length(var182, 7l);
+var181 = var183;
+varonce180 = var181;
 }
-if (varonce195) {
-var196 = varonce195;
+((struct instance_standard__NativeArray*)var175)->values[2]=var181;
+if (likely(varonce184!=NULL)) {
+var185 = varonce184;
 } else {
-var197 = "\' for ";
-var198 = 6;
-var199 = standard___standard__NativeString___to_s_with_length(var197, var198);
-var196 = var199;
-varonce195 = var196;
+var186 = "`; conflict between ";
+var187 = standard___standard__NativeString___to_s_with_length(var186, 20l);
+var185 = var187;
+varonce184 = var185;
 }
-if (varonce200) {
-var201 = varonce200;
+((struct instance_standard__NativeArray*)var175)->values[4]=var185;
+if (likely(varonce188!=NULL)) {
+var189 = varonce188;
 } else {
-var202 = "; conflict between ";
-var203 = 19;
-var204 = standard___standard__NativeString___to_s_with_length(var202, var203);
-var201 = var204;
-varonce200 = var201;
+var190 = ".";
+var191 = standard___standard__NativeString___to_s_with_length(var190, 1l);
+var189 = var191;
+varonce188 = var189;
 }
-if (varonce205) {
-var206 = varonce205;
+((struct instance_standard__NativeArray*)var175)->values[6]=var189;
 } else {
-var207 = " and ";
-var208 = 5;
-var209 = standard___standard__NativeString___to_s_with_length(var207, var208);
-var206 = var209;
-varonce205 = var206;
+var175 = varonce;
+varonce = NULL;
 }
+((struct instance_standard__NativeArray*)var175)->values[1]=var_name;
 {
-var210 = standard__string___Collection___join(var_s, var206);
+var192 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_standard__string__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MType>*/
 }
-var211 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var211 = array_instance Array[Object] */
-var212 = 6;
-var213 = NEW_standard__NativeArray(var212, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var213)->values[0] = (val*) var191;
-((struct instance_standard__NativeArray*)var213)->values[1] = (val*) var_name;
-((struct instance_standard__NativeArray*)var213)->values[2] = (val*) var196;
-((struct instance_standard__NativeArray*)var213)->values[3] = (val*) var_mtype;
-((struct instance_standard__NativeArray*)var213)->values[4] = (val*) var201;
-((struct instance_standard__NativeArray*)var213)->values[5] = (val*) var210;
-{
-((void (*)(val* self, val* p0, long p1))(var211->class->vft[COLOR_standard__array__Array__with_native]))(var211, var213, var212) /* with_native on <var211:Array[Object]>*/;
+((struct instance_standard__NativeArray*)var175)->values[3]=var192;
+if (likely(varonce193!=NULL)) {
+var194 = varonce193;
+} else {
+var195 = " and ";
+var196 = standard___standard__NativeString___to_s_with_length(var195, 5l);
+var194 = var196;
+varonce193 = var194;
 }
+{
+var197 = standard__string___Collection___join(var_s, var194);
 }
+((struct instance_standard__NativeArray*)var175)->values[5]=var197;
 {
-var214 = ((val* (*)(val* self))(var211->class->vft[COLOR_standard__string__Object__to_s]))(var211) /* to_s on <var211:Array[Object]>*/;
+var198 = ((val*(*)(val* self))(var175->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var175); /* native_to_s on <var175:NativeArray[String]>*/
 }
+varonce = var175;
 {
-nit___nit__ModelBuilder___error(self, var_anode, var214); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+nit___nit__ModelBuilder___error(self, var_anode, var198); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
 }
 } else {
 }
 {
 { /* Inline modelbuilder_base#ModelBuilder#try_get_mproperty_by_name2_cache (self) on <self:ModelBuilder> */
-var217 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
-if (unlikely(var217 == NULL)) {
+var201 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
+if (unlikely(var201 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _try_get_mproperty_by_name2_cache");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 168);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 178);
+fatal_exit(1);
 }
-var215 = var217;
-RET_LABEL216:(void)0;
+var199 = var201;
+RET_LABEL200:(void)0;
 }
 }
 {
-more_collections___more_collections__HashMap3____91d_93d_61d(var215, var_mmodule, var_mtype, var_name, var_res); /* Direct call more_collections#HashMap3#[]= on <var215:HashMap3[MModule, MType, String, nullable MProperty]>*/
+more_collections___more_collections__HashMap3____91d_93d_61d(var199, var_mmodule, var_mtype, var_name, var_res); /* Direct call more_collections#HashMap3#[]= on <var199:HashMap3[MModule, MType, String, nullable MProperty]>*/
 }
 var = var_res;
 goto RET_LABEL;
@@ -1415,8 +1474,8 @@ val* var1 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
 var1 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
 if (unlikely(var1 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _try_get_mproperty_by_name2_cache");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 168);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 178);
+fatal_exit(1);
 }
 var = var1;
 RET_LABEL:;
@@ -1441,8 +1500,8 @@ var_name = p2;
 var3 = var_mclassdef->attrs[COLOR_nit__model__MClassDef___mmodule].val; /* _mmodule on <var_mclassdef:MClassDef> */
 if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 489);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 550);
+fatal_exit(1);
 }
 var1 = var3;
 RET_LABEL2:(void)0;
@@ -1453,8 +1512,8 @@ RET_LABEL2:(void)0;
 var6 = var_mclassdef->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var_mclassdef:MClassDef> */
 if (unlikely(var6 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 495);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
 var4 = var6;
 RET_LABEL5:(void)0;
@@ -1472,373 +1531,1921 @@ return var;
 void nit___nit__ModelBuilder___error(val* self, val* p0, val* p1) {
 val* var_n /* var n: nullable ANode */;
 val* var_text /* var text: String */;
-val* var /* : null */;
 val* var_l /* var l: nullable Object */;
-val* var1 /* : null */;
-short int var2 /* : Bool */;
-short int var3 /* : Bool */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-val* var7 /* : Location */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var5 /* : Location */;
+val* var6 /* : ToolContext */;
 val* var8 /* : ToolContext */;
-val* var10 /* : ToolContext */;
+val* var9 /* : Message */;
 var_n = p0;
 var_text = p1;
-var = NULL;
-var_l = var;
-var1 = NULL;
+var_l = ((val*)NULL);
 if (var_n == NULL) {
-var2 = 0; /* is null */
+var = 0; /* is null */
 } else {
-var2 = 1; /* arg is null and recv is not */
+var = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_n,var1) on <var_n:nullable ANode> */
-var_other = var1;
+{ /* Inline kernel#Object#!= (var_n,((val*)NULL)) on <var_n:nullable ANode> */
+var_other = ((val*)NULL);
 {
-var5 = ((short int (*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other) /* == on <var_n:nullable ANode(ANode)>*/;
+var3 = ((short int(*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other); /* == on <var_n:nullable ANode(ANode)>*/
 }
-var6 = !var5;
-var3 = var6;
-goto RET_LABEL4;
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+var5 = ((val*(*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n); /* hot_location on <var_n:nullable ANode(ANode)>*/
+}
+var_l = var5;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var8 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
+fatal_exit(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+var9 = nit___nit__ToolContext___error(var6, var_l, var_text);
+}
+RET_LABEL:;
+}
+/* method modelbuilder_base#ModelBuilder#warning for (self: ModelBuilder, nullable ANode, String, String) */
+void nit___nit__ModelBuilder___warning(val* self, val* p0, val* p1, val* p2) {
+val* var_n /* var n: nullable ANode */;
+val* var_tag /* var tag: String */;
+val* var_text /* var text: String */;
+val* var_l /* var l: nullable Object */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var5 /* : Location */;
+val* var6 /* : ToolContext */;
+val* var8 /* : ToolContext */;
+val* var9 /* : nullable Message */;
+var_n = p0;
+var_tag = p1;
+var_text = p2;
+var_l = ((val*)NULL);
+if (var_n == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n,((val*)NULL)) on <var_n:nullable ANode> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other); /* == on <var_n:nullable ANode(ANode)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+var5 = ((val*(*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n); /* hot_location on <var_n:nullable ANode(ANode)>*/
+}
+var_l = var5;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var8 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
+fatal_exit(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+var9 = nit___nit__ToolContext___warning(var6, var_l, var_tag, var_text);
+}
+RET_LABEL:;
+}
+/* method modelbuilder_base#ModelBuilder#advice for (self: ModelBuilder, nullable ANode, String, String) */
+void nit___nit__ModelBuilder___advice(val* self, val* p0, val* p1, val* p2) {
+val* var_n /* var n: nullable ANode */;
+val* var_tag /* var tag: String */;
+val* var_text /* var text: String */;
+val* var_l /* var l: nullable Object */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var5 /* : Location */;
+val* var6 /* : ToolContext */;
+val* var8 /* : ToolContext */;
+val* var9 /* : nullable Message */;
+var_n = p0;
+var_tag = p1;
+var_text = p2;
+var_l = ((val*)NULL);
+if (var_n == NULL) {
+var = 0; /* is null */
+} else {
+var = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n,((val*)NULL)) on <var_n:nullable ANode> */
+var_other = ((val*)NULL);
+{
+var3 = ((short int(*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other); /* == on <var_n:nullable ANode(ANode)>*/
+}
+var4 = !var3;
+var1 = var4;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+var = var1;
+}
+if (var){
+{
+var5 = ((val*(*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n); /* hot_location on <var_n:nullable ANode(ANode)>*/
+}
+var_l = var5;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var8 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
+fatal_exit(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+var9 = nit___nit__ToolContext___advice(var6, var_l, var_tag, var_text);
+}
+RET_LABEL:;
+}
+/* method modelbuilder_base#ModelBuilder#force_get_primitive_method for (self: ModelBuilder, nullable ANode, String, MClass, MModule): MMethod */
+val* nit___nit__ModelBuilder___force_get_primitive_method(val* self, val* p0, val* p1, val* p2, val* p3) {
+val* var /* : MMethod */;
+val* var_n /* var n: nullable ANode */;
+val* var_name /* var name: String */;
+val* var_recv /* var recv: MClass */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var1 /* : nullable MMethod */;
+val* var_res /* var res: nullable MMethod */;
+short int var2 /* : Bool */;
+short int var3 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var5 /* : Bool */;
+short int var7 /* : Bool */;
+val* var_l /* var l: nullable Object */;
+short int var8 /* : Bool */;
+short int var9 /* : Bool */;
+val* var_other11 /* var other: nullable Object */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
+val* var14 /* : Location */;
+val* var15 /* : ToolContext */;
+val* var17 /* : ToolContext */;
+val* var18 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce19;
+val* var20 /* : String */;
+char* var21 /* : NativeString */;
+val* var22 /* : FlatString */;
+static val* varonce23;
+val* var24 /* : String */;
+char* var25 /* : NativeString */;
+val* var26 /* : FlatString */;
+static val* varonce27;
+val* var28 /* : String */;
+char* var29 /* : NativeString */;
+val* var30 /* : FlatString */;
+val* var31 /* : String */;
+val* var32 /* : String */;
+var_n = p0;
+var_name = p1;
+var_recv = p2;
+var_mmodule = p3;
+{
+var1 = nit__model___MModule___try_get_primitive_method(var_mmodule, var_name, var_recv);
+}
+var_res = var1;
+if (var_res == NULL) {
+var2 = 1; /* is null */
+} else {
+var2 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_res,((val*)NULL)) on <var_res:nullable MMethod> */
+var_other = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_res,var_other) on <var_res:nullable MMethod(MMethod)> */
+var7 = var_res == var_other;
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+}
+var3 = var5;
+goto RET_LABEL4;
 RET_LABEL4:(void)0;
 }
-var2 = var3;
+var2 = var3;
+}
+if (var2){
+var_l = ((val*)NULL);
+if (var_n == NULL) {
+var8 = 0; /* is null */
+} else {
+var8 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n,((val*)NULL)) on <var_n:nullable ANode> */
+var_other11 = ((val*)NULL);
+{
+var12 = ((short int(*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other11); /* == on <var_n:nullable ANode(ANode)>*/
+}
+var13 = !var12;
+var9 = var13;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+var8 = var9;
+}
+if (var8){
+{
+var14 = ((val*(*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n); /* hot_location on <var_n:nullable ANode(ANode)>*/
+}
+var_l = var14;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var17 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
+fatal_exit(1);
+}
+var15 = var17;
+RET_LABEL16:(void)0;
+}
+}
+if (unlikely(varonce==NULL)) {
+var18 = NEW_standard__NativeArray(5l, &type_standard__NativeArray__standard__String);
+if (likely(varonce19!=NULL)) {
+var20 = varonce19;
+} else {
+var21 = "Fatal Error: `";
+var22 = standard___standard__NativeString___to_s_with_length(var21, 14l);
+var20 = var22;
+varonce19 = var20;
+}
+((struct instance_standard__NativeArray*)var18)->values[0]=var20;
+if (likely(varonce23!=NULL)) {
+var24 = varonce23;
+} else {
+var25 = "` must have a property named `";
+var26 = standard___standard__NativeString___to_s_with_length(var25, 30l);
+var24 = var26;
+varonce23 = var24;
+}
+((struct instance_standard__NativeArray*)var18)->values[2]=var24;
+if (likely(varonce27!=NULL)) {
+var28 = varonce27;
+} else {
+var29 = "`.";
+var30 = standard___standard__NativeString___to_s_with_length(var29, 2l);
+var28 = var30;
+varonce27 = var28;
+}
+((struct instance_standard__NativeArray*)var18)->values[4]=var28;
+} else {
+var18 = varonce;
+varonce = NULL;
+}
+{
+var31 = ((val*(*)(val* self))(var_recv->class->vft[COLOR_standard__string__Object__to_s]))(var_recv); /* to_s on <var_recv:MClass>*/
+}
+((struct instance_standard__NativeArray*)var18)->values[1]=var31;
+((struct instance_standard__NativeArray*)var18)->values[3]=var_name;
+{
+var32 = ((val*(*)(val* self))(var18->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var18); /* native_to_s on <var18:NativeArray[String]>*/
+}
+varonce = var18;
+{
+nit___nit__ToolContext___fatal_error(var15, var_l, var32); /* Direct call toolcontext#ToolContext#fatal_error on <var15:ToolContext>*/
+}
+PRINT_ERROR("Runtime error: %s", "Aborted");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 222);
+fatal_exit(1);
+} else {
+}
+var = var_res;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder_base#ModelBuilder#resolve_mtype_unchecked for (self: ModelBuilder, MModule, nullable MClassDef, AType, Bool): nullable MType */
+val* nit___nit__ModelBuilder___resolve_mtype_unchecked(val* self, val* p0, val* p1, val* p2, short int p3) {
+val* var /* : nullable MType */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var_mclassdef /* var mclassdef: nullable MClassDef */;
+val* var_ntype /* var ntype: AType */;
+short int var_with_virtual /* var with_virtual: Bool */;
+val* var1 /* : TClassid */;
+val* var3 /* : TClassid */;
+val* var4 /* : String */;
+val* var_name /* var name: String */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var11 /* : nullable MProperty */;
+short int var12 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+val* var_prop /* var prop: nullable MVirtualTypeProp */;
+short int var13 /* : Bool */;
+short int var14 /* : Bool */;
+short int var16 /* : Bool */;
+short int var17 /* : Bool */;
+val* var18 /* : ANodes[AType] */;
+val* var20 /* : ANodes[AType] */;
+short int var21 /* : Bool */;
+short int var22 /* : Bool */;
+val* var23 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce24;
+val* var25 /* : String */;
+char* var26 /* : NativeString */;
+val* var27 /* : FlatString */;
+static val* varonce28;
+val* var29 /* : String */;
+char* var30 /* : NativeString */;
+val* var31 /* : FlatString */;
+val* var32 /* : String */;
+val* var33 /* : MVirtualType */;
+val* var35 /* : MVirtualType */;
+val* var_res /* var res: MType */;
+val* var36 /* : nullable TKwnullable */;
+val* var38 /* : nullable TKwnullable */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
+short int var42 /* : Bool */;
+short int var43 /* : Bool */;
+val* var44 /* : MType */;
+short int var46 /* : Bool */;
+short int var47 /* : Bool */;
+short int var49 /* : Bool */;
+short int var50 /* : Bool */;
+val* var51 /* : MClass */;
+val* var53 /* : MClass */;
+val* var54 /* : Array[MParameterType] */;
+val* var56 /* : Array[MParameterType] */;
+val* var_57 /* var : Array[MParameterType] */;
+val* var58 /* : ArrayIterator[nullable Object] */;
+val* var_59 /* var : ArrayIterator[MParameterType] */;
+short int var60 /* : Bool */;
+val* var61 /* : nullable Object */;
+val* var_p /* var p: MParameterType */;
+val* var62 /* : String */;
+val* var64 /* : String */;
+short int var65 /* : Bool */;
+short int var67 /* : Bool */;
+short int var68 /* : Bool */;
+val* var69 /* : ANodes[AType] */;
+val* var71 /* : ANodes[AType] */;
+short int var72 /* : Bool */;
+short int var73 /* : Bool */;
+val* var75 /* : NativeArray[String] */;
+static val* varonce74;
+static val* varonce76;
+val* var77 /* : String */;
+char* var78 /* : NativeString */;
+val* var79 /* : FlatString */;
+static val* varonce80;
+val* var81 /* : String */;
+char* var82 /* : NativeString */;
+val* var83 /* : FlatString */;
+val* var84 /* : String */;
+val* var85 /* : nullable TKwnullable */;
+val* var87 /* : nullable TKwnullable */;
+short int var88 /* : Bool */;
+short int var89 /* : Bool */;
+short int var91 /* : Bool */;
+short int var92 /* : Bool */;
+val* var93 /* : MType */;
+val* var96 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var97 /* : Bool */;
+short int var98 /* : Bool */;
+short int var100 /* : Bool */;
+short int var101 /* : Bool */;
+val* var102 /* : ANodes[AType] */;
+val* var104 /* : ANodes[AType] */;
+long var105 /* : Int */;
+long var_arity /* var arity: Int */;
+long var106 /* : Int */;
+long var108 /* : Int */;
+short int var109 /* : Bool */;
+short int var111 /* : Bool */;
+short int var112 /* : Bool */;
+short int var113 /* : Bool */;
+short int var115 /* : Bool */;
+val* var117 /* : NativeArray[String] */;
+static val* varonce116;
+static val* varonce118;
+val* var119 /* : String */;
+char* var120 /* : NativeString */;
+val* var121 /* : FlatString */;
+static val* varonce122;
+val* var123 /* : String */;
+char* var124 /* : NativeString */;
+val* var125 /* : FlatString */;
+val* var126 /* : String */;
+val* var127 /* : String */;
+long var128 /* : Int */;
+long var130 /* : Int */;
+short int var131 /* : Bool */;
+short int var133 /* : Bool */;
+val* var135 /* : NativeArray[String] */;
+static val* varonce134;
+static val* varonce136;
+val* var137 /* : String */;
+char* var138 /* : NativeString */;
+val* var139 /* : FlatString */;
+static val* varonce140;
+val* var141 /* : String */;
+char* var142 /* : NativeString */;
+val* var143 /* : FlatString */;
+val* var144 /* : String */;
+val* var146 /* : NativeArray[String] */;
+static val* varonce145;
+static val* varonce147;
+val* var148 /* : String */;
+char* var149 /* : NativeString */;
+val* var150 /* : FlatString */;
+static val* varonce151;
+val* var152 /* : String */;
+char* var153 /* : NativeString */;
+val* var154 /* : FlatString */;
+static val* varonce155;
+val* var156 /* : String */;
+char* var157 /* : NativeString */;
+val* var158 /* : FlatString */;
+static val* varonce159;
+val* var160 /* : String */;
+char* var161 /* : NativeString */;
+val* var162 /* : FlatString */;
+long var163 /* : Int */;
+long var165 /* : Int */;
+val* var166 /* : String */;
+val* var167 /* : String */;
+val* var168 /* : String */;
+val* var169 /* : String */;
+short int var170 /* : Bool */;
+short int var172 /* : Bool */;
+val* var173 /* : MClassType */;
+val* var175 /* : MClassType */;
+val* var176 /* : nullable TKwnullable */;
+val* var178 /* : nullable TKwnullable */;
+short int var179 /* : Bool */;
+short int var180 /* : Bool */;
+short int var182 /* : Bool */;
+short int var183 /* : Bool */;
+val* var184 /* : MType */;
+val* var186 /* : Array[MType] */;
+val* var_mtypes /* var mtypes: Array[MType] */;
+val* var187 /* : ANodes[AType] */;
+val* var189 /* : ANodes[AType] */;
+val* var_190 /* var : ANodes[AType] */;
+val* var191 /* : Iterator[ANode] */;
+val* var_192 /* var : Iterator[AType] */;
+short int var193 /* : Bool */;
+val* var194 /* : nullable Object */;
+val* var_nt /* var nt: AType */;
+val* var195 /* : nullable MType */;
+val* var_mt /* var mt: nullable MType */;
+short int var196 /* : Bool */;
+short int var197 /* : Bool */;
+val* var_other199 /* var other: nullable Object */;
+short int var200 /* : Bool */;
+short int var202 /* : Bool */;
+val* var204 /* : MClassType */;
+val* var205 /* : nullable TKwnullable */;
+val* var207 /* : nullable TKwnullable */;
+short int var208 /* : Bool */;
+short int var209 /* : Bool */;
+short int var211 /* : Bool */;
+short int var212 /* : Bool */;
+val* var213 /* : MType */;
+val* var216 /* : NativeArray[String] */;
+static val* varonce215;
+static val* varonce217;
+val* var218 /* : String */;
+char* var219 /* : NativeString */;
+val* var220 /* : FlatString */;
+static val* varonce221;
+val* var222 /* : String */;
+char* var223 /* : NativeString */;
+val* var224 /* : FlatString */;
+static val* varonce225;
+val* var226 /* : String */;
+char* var227 /* : NativeString */;
+val* var228 /* : FlatString */;
+val* var229 /* : String */;
+val* var230 /* : String */;
+var_mmodule = p0;
+var_mclassdef = p1;
+var_ntype = p2;
+var_with_virtual = p3;
+{
+{ /* Inline parser_nodes#AType#n_id (var_ntype) on <var_ntype:AType> */
+var3 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_id].val; /* _n_id on <var_ntype:AType> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1723);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__lexer_work___Token___text(var1);
+}
+var_name = var4;
+if (var_mclassdef == NULL) {
+var6 = 0; /* is null */
+} else {
+var6 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mclassdef,((val*)NULL)) on <var_mclassdef:nullable MClassDef> */
+var_other = ((val*)NULL);
+{
+var9 = ((short int(*)(val* self, val* p0))(var_mclassdef->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mclassdef, var_other); /* == on <var_mclassdef:nullable MClassDef(MClassDef)>*/
+}
+var10 = !var9;
+var7 = var10;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+var6 = var7;
+}
+var_ = var6;
+if (var6){
+var5 = var_with_virtual;
+} else {
+var5 = var_;
+}
+if (var5){
+{
+var11 = nit___nit__ModelBuilder___try_get_mproperty_by_name(self, var_ntype, var_mclassdef, var_name);
+}
+/* <var11:nullable MProperty> isa nullable MVirtualTypeProp */
+cltype = type_nullable__nit__MVirtualTypeProp.color;
+idtype = type_nullable__nit__MVirtualTypeProp.id;
+if(var11 == NULL) {
+var12 = 1;
+} else {
+if(cltype >= var11->type->table_size) {
+var12 = 0;
+} else {
+var12 = var11->type->type_table[cltype] == idtype;
+}
+}
+if (unlikely(!var12)) {
+var_class_name = var11 == NULL ? "null" : var11->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable MVirtualTypeProp", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 238);
+fatal_exit(1);
+}
+var_prop = var11;
+if (var_prop == NULL) {
+var13 = 0; /* is null */
+} else {
+var13 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_prop,((val*)NULL)) on <var_prop:nullable MVirtualTypeProp> */
+var_other = ((val*)NULL);
+{
+var16 = ((short int(*)(val* self, val* p0))(var_prop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_prop, var_other); /* == on <var_prop:nullable MVirtualTypeProp(MVirtualTypeProp)>*/
+}
+var17 = !var16;
+var14 = var17;
+goto RET_LABEL15;
+RET_LABEL15:(void)0;
+}
+var13 = var14;
+}
+if (var13){
+{
+{ /* Inline parser_nodes#AType#n_types (var_ntype) on <var_ntype:AType> */
+var20 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_types].val; /* _n_types on <var_ntype:AType> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_types");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1729);
+fatal_exit(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+var21 = nit___nit__ANodes___standard__abstract_collection__Collection__is_empty(var18);
+}
+var22 = !var21;
+if (var22){
+if (unlikely(varonce==NULL)) {
+var23 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce24!=NULL)) {
+var25 = varonce24;
+} else {
+var26 = "Type Error: formal type `";
+var27 = standard___standard__NativeString___to_s_with_length(var26, 25l);
+var25 = var27;
+varonce24 = var25;
+}
+((struct instance_standard__NativeArray*)var23)->values[0]=var25;
+if (likely(varonce28!=NULL)) {
+var29 = varonce28;
+} else {
+var30 = "` cannot have formal parameters.";
+var31 = standard___standard__NativeString___to_s_with_length(var30, 32l);
+var29 = var31;
+varonce28 = var29;
+}
+((struct instance_standard__NativeArray*)var23)->values[2]=var29;
+} else {
+var23 = varonce;
+varonce = NULL;
+}
+((struct instance_standard__NativeArray*)var23)->values[1]=var_name;
+{
+var32 = ((val*(*)(val* self))(var23->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var23); /* native_to_s on <var23:NativeArray[String]>*/
+}
+varonce = var23;
+{
+nit___nit__ModelBuilder___error(self, var_ntype, var32); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+}
+{
+{ /* Inline model#MVirtualTypeProp#mvirtualtype (var_prop) on <var_prop:nullable MVirtualTypeProp(MVirtualTypeProp)> */
+var35 = var_prop->attrs[COLOR_nit__model__MVirtualTypeProp___mvirtualtype].val; /* _mvirtualtype on <var_prop:nullable MVirtualTypeProp(MVirtualTypeProp)> */
+if (unlikely(var35 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mvirtualtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2191);
+fatal_exit(1);
+}
+var33 = var35;
+RET_LABEL34:(void)0;
+}
+}
+var_res = var33;
+{
+{ /* Inline parser_nodes#AType#n_kwnullable (var_ntype) on <var_ntype:AType> */
+var38 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_kwnullable].val; /* _n_kwnullable on <var_ntype:AType> */
+var36 = var38;
+RET_LABEL37:(void)0;
+}
+}
+if (var36 == NULL) {
+var39 = 0; /* is null */
+} else {
+var39 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var36,((val*)NULL)) on <var36:nullable TKwnullable> */
+var_other = ((val*)NULL);
+{
+var42 = ((short int(*)(val* self, val* p0))(var36->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var36, var_other); /* == on <var36:nullable TKwnullable(TKwnullable)>*/
+}
+var43 = !var42;
+var40 = var43;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
+}
+var39 = var40;
+}
+if (var39){
+{
+var44 = nit___nit__MType___as_nullable(var_res);
+}
+var_res = var44;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#AType#mtype= (var_ntype,var_res) on <var_ntype:AType> */
+var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val = var_res; /* _mtype on <var_ntype:AType> */
+RET_LABEL45:(void)0;
+}
+}
+var = var_res;
+goto RET_LABEL;
+} else {
+}
+} else {
+}
+if (var_mclassdef == NULL) {
+var46 = 0; /* is null */
+} else {
+var46 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mclassdef,((val*)NULL)) on <var_mclassdef:nullable MClassDef> */
+var_other = ((val*)NULL);
+{
+var49 = ((short int(*)(val* self, val* p0))(var_mclassdef->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mclassdef, var_other); /* == on <var_mclassdef:nullable MClassDef(MClassDef)>*/
+}
+var50 = !var49;
+var47 = var50;
+goto RET_LABEL48;
+RET_LABEL48:(void)0;
+}
+var46 = var47;
+}
+if (var46){
+{
+{ /* Inline model#MClassDef#mclass (var_mclassdef) on <var_mclassdef:nullable MClassDef(MClassDef)> */
+var53 = var_mclassdef->attrs[COLOR_nit__model__MClassDef___mclass].val; /* _mclass on <var_mclassdef:nullable MClassDef(MClassDef)> */
+if (unlikely(var53 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 553);
+fatal_exit(1);
+}
+var51 = var53;
+RET_LABEL52:(void)0;
+}
+}
+{
+{ /* Inline model#MClass#mparameters (var51) on <var51:MClass> */
+var56 = var51->attrs[COLOR_nit__model__MClass___mparameters].val; /* _mparameters on <var51:MClass> */
+if (unlikely(var56 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 382);
+fatal_exit(1);
+}
+var54 = var56;
+RET_LABEL55:(void)0;
+}
+}
+var_57 = var54;
+{
+var58 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_57);
+}
+var_59 = var58;
+for(;;) {
+{
+var60 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_59);
+}
+if (var60){
+{
+var61 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_59);
+}
+var_p = var61;
+{
+{ /* Inline model#MParameterType#name (var_p) on <var_p:MParameterType> */
+var64 = var_p->attrs[COLOR_nit__model__MParameterType___name].val; /* _name on <var_p:MParameterType> */
+if (unlikely(var64 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1481);
+fatal_exit(1);
+}
+var62 = var64;
+RET_LABEL63:(void)0;
+}
+}
+{
+{ /* Inline kernel#Object#!= (var62,var_name) on <var62:String> */
+var_other = var_name;
+{
+var67 = ((short int(*)(val* self, val* p0))(var62->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var62, var_other); /* == on <var62:String>*/
+}
+var68 = !var67;
+var65 = var68;
+goto RET_LABEL66;
+RET_LABEL66:(void)0;
+}
+}
+if (var65){
+goto BREAK_label;
+} else {
+}
+{
+{ /* Inline parser_nodes#AType#n_types (var_ntype) on <var_ntype:AType> */
+var71 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_types].val; /* _n_types on <var_ntype:AType> */
+if (unlikely(var71 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_types");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1729);
+fatal_exit(1);
+}
+var69 = var71;
+RET_LABEL70:(void)0;
+}
+}
+{
+var72 = nit___nit__ANodes___standard__abstract_collection__Collection__is_empty(var69);
+}
+var73 = !var72;
+if (var73){
+if (unlikely(varonce74==NULL)) {
+var75 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce76!=NULL)) {
+var77 = varonce76;
+} else {
+var78 = "Type Error: formal type `";
+var79 = standard___standard__NativeString___to_s_with_length(var78, 25l);
+var77 = var79;
+varonce76 = var77;
+}
+((struct instance_standard__NativeArray*)var75)->values[0]=var77;
+if (likely(varonce80!=NULL)) {
+var81 = varonce80;
+} else {
+var82 = "` cannot have formal parameters.";
+var83 = standard___standard__NativeString___to_s_with_length(var82, 32l);
+var81 = var83;
+varonce80 = var81;
+}
+((struct instance_standard__NativeArray*)var75)->values[2]=var81;
+} else {
+var75 = varonce74;
+varonce74 = NULL;
+}
+((struct instance_standard__NativeArray*)var75)->values[1]=var_name;
+{
+var84 = ((val*(*)(val* self))(var75->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var75); /* native_to_s on <var75:NativeArray[String]>*/
+}
+varonce74 = var75;
+{
+nit___nit__ModelBuilder___error(self, var_ntype, var84); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+}
+var_res = var_p;
+{
+{ /* Inline parser_nodes#AType#n_kwnullable (var_ntype) on <var_ntype:AType> */
+var87 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_kwnullable].val; /* _n_kwnullable on <var_ntype:AType> */
+var85 = var87;
+RET_LABEL86:(void)0;
+}
+}
+if (var85 == NULL) {
+var88 = 0; /* is null */
+} else {
+var88 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var85,((val*)NULL)) on <var85:nullable TKwnullable> */
+var_other = ((val*)NULL);
+{
+var91 = ((short int(*)(val* self, val* p0))(var85->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var85, var_other); /* == on <var85:nullable TKwnullable(TKwnullable)>*/
+}
+var92 = !var91;
+var89 = var92;
+goto RET_LABEL90;
+RET_LABEL90:(void)0;
+}
+var88 = var89;
+}
+if (var88){
+{
+var93 = nit___nit__MType___as_nullable(var_res);
+}
+var_res = var93;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#AType#mtype= (var_ntype,var_res) on <var_ntype:AType> */
+var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val = var_res; /* _mtype on <var_ntype:AType> */
+RET_LABEL94:(void)0;
+}
+}
+var = var_res;
+goto RET_LABEL;
+BREAK_label: (void)0;
+{
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_59); /* Direct call array#ArrayIterator#next on <var_59:ArrayIterator[MParameterType]>*/
+}
+} else {
+goto BREAK_label95;
+}
+}
+BREAK_label95: (void)0;
+{
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_59); /* Direct call array#ArrayIterator#finish on <var_59:ArrayIterator[MParameterType]>*/
+}
+} else {
+}
+{
+var96 = nit___nit__ModelBuilder___try_get_mclass_by_name(self, var_ntype, var_mmodule, var_name);
+}
+var_mclass = var96;
+if (var_mclass == NULL) {
+var97 = 0; /* is null */
+} else {
+var97 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
+{
+var100 = ((short int(*)(val* self, val* p0))(var_mclass->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mclass, var_other); /* == on <var_mclass:nullable MClass(MClass)>*/
+}
+var101 = !var100;
+var98 = var101;
+goto RET_LABEL99;
+RET_LABEL99:(void)0;
+}
+var97 = var98;
+}
+if (var97){
+{
+{ /* Inline parser_nodes#AType#n_types (var_ntype) on <var_ntype:AType> */
+var104 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_types].val; /* _n_types on <var_ntype:AType> */
+if (unlikely(var104 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_types");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1729);
+fatal_exit(1);
+}
+var102 = var104;
+RET_LABEL103:(void)0;
+}
+}
+{
+var105 = nit___nit__ANodes___standard__abstract_collection__Collection__length(var102);
+}
+var_arity = var105;
+{
+{ /* Inline model#MClass#arity (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var108 = var_mclass->attrs[COLOR_nit__model__MClass___arity].l; /* _arity on <var_mclass:nullable MClass(MClass)> */
+var106 = var108;
+RET_LABEL107:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#!= (var_arity,var106) on <var_arity:Int> */
+var111 = var_arity == var106;
+var112 = !var111;
+var109 = var112;
+goto RET_LABEL110;
+RET_LABEL110:(void)0;
+}
+}
+if (var109){
+{
+{ /* Inline kernel#Int#== (var_arity,0l) on <var_arity:Int> */
+var115 = var_arity == 0l;
+var113 = var115;
+goto RET_LABEL114;
+RET_LABEL114:(void)0;
+}
+}
+if (var113){
+if (unlikely(varonce116==NULL)) {
+var117 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce118!=NULL)) {
+var119 = varonce118;
+} else {
+var120 = "Type Error: `";
+var121 = standard___standard__NativeString___to_s_with_length(var120, 13l);
+var119 = var121;
+varonce118 = var119;
+}
+((struct instance_standard__NativeArray*)var117)->values[0]=var119;
+if (likely(varonce122!=NULL)) {
+var123 = varonce122;
+} else {
+var124 = "` is a generic class.";
+var125 = standard___standard__NativeString___to_s_with_length(var124, 21l);
+var123 = var125;
+varonce122 = var123;
+}
+((struct instance_standard__NativeArray*)var117)->values[2]=var123;
+} else {
+var117 = varonce116;
+varonce116 = NULL;
+}
+{
+var126 = nit___nit__MClass___signature_to_s(var_mclass);
+}
+((struct instance_standard__NativeArray*)var117)->values[1]=var126;
+{
+var127 = ((val*(*)(val* self))(var117->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var117); /* native_to_s on <var117:NativeArray[String]>*/
+}
+varonce116 = var117;
+{
+nit___nit__ModelBuilder___error(self, var_ntype, var127); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+{
+{ /* Inline model#MClass#arity (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var130 = var_mclass->attrs[COLOR_nit__model__MClass___arity].l; /* _arity on <var_mclass:nullable MClass(MClass)> */
+var128 = var130;
+RET_LABEL129:(void)0;
+}
+}
+{
+{ /* Inline kernel#Int#== (var128,0l) on <var128:Int> */
+var133 = var128 == 0l;
+var131 = var133;
+goto RET_LABEL132;
+RET_LABEL132:(void)0;
+}
+}
+if (var131){
+if (unlikely(varonce134==NULL)) {
+var135 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce136!=NULL)) {
+var137 = varonce136;
+} else {
+var138 = "Type Error: `";
+var139 = standard___standard__NativeString___to_s_with_length(var138, 13l);
+var137 = var139;
+varonce136 = var137;
+}
+((struct instance_standard__NativeArray*)var135)->values[0]=var137;
+if (likely(varonce140!=NULL)) {
+var141 = varonce140;
+} else {
+var142 = "` is not a generic class.";
+var143 = standard___standard__NativeString___to_s_with_length(var142, 25l);
+var141 = var143;
+varonce140 = var141;
+}
+((struct instance_standard__NativeArray*)var135)->values[2]=var141;
+} else {
+var135 = varonce134;
+varonce134 = NULL;
+}
+((struct instance_standard__NativeArray*)var135)->values[1]=var_name;
+{
+var144 = ((val*(*)(val* self))(var135->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var135); /* native_to_s on <var135:NativeArray[String]>*/
+}
+varonce134 = var135;
+{
+nit___nit__ModelBuilder___error(self, var_ntype, var144); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+if (unlikely(varonce145==NULL)) {
+var146 = NEW_standard__NativeArray(7l, &type_standard__NativeArray__standard__String);
+if (likely(varonce147!=NULL)) {
+var148 = varonce147;
+} else {
+var149 = "Type Error: expected ";
+var150 = standard___standard__NativeString___to_s_with_length(var149, 21l);
+var148 = var150;
+varonce147 = var148;
+}
+((struct instance_standard__NativeArray*)var146)->values[0]=var148;
+if (likely(varonce151!=NULL)) {
+var152 = varonce151;
+} else {
+var153 = " formal argument(s) for `";
+var154 = standard___standard__NativeString___to_s_with_length(var153, 25l);
+var152 = var154;
+varonce151 = var152;
+}
+((struct instance_standard__NativeArray*)var146)->values[2]=var152;
+if (likely(varonce155!=NULL)) {
+var156 = varonce155;
+} else {
+var157 = "`; got ";
+var158 = standard___standard__NativeString___to_s_with_length(var157, 7l);
+var156 = var158;
+varonce155 = var156;
+}
+((struct instance_standard__NativeArray*)var146)->values[4]=var156;
+if (likely(varonce159!=NULL)) {
+var160 = varonce159;
+} else {
+var161 = ".";
+var162 = standard___standard__NativeString___to_s_with_length(var161, 1l);
+var160 = var162;
+varonce159 = var160;
+}
+((struct instance_standard__NativeArray*)var146)->values[6]=var160;
+} else {
+var146 = varonce145;
+varonce145 = NULL;
+}
+{
+{ /* Inline model#MClass#arity (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var165 = var_mclass->attrs[COLOR_nit__model__MClass___arity].l; /* _arity on <var_mclass:nullable MClass(MClass)> */
+var163 = var165;
+RET_LABEL164:(void)0;
+}
+}
+var166 = standard__string___Int___Object__to_s(var163);
+((struct instance_standard__NativeArray*)var146)->values[1]=var166;
+{
+var167 = nit___nit__MClass___signature_to_s(var_mclass);
+}
+((struct instance_standard__NativeArray*)var146)->values[3]=var167;
+var168 = standard__string___Int___Object__to_s(var_arity);
+((struct instance_standard__NativeArray*)var146)->values[5]=var168;
+{
+var169 = ((val*(*)(val* self))(var146->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var146); /* native_to_s on <var146:NativeArray[String]>*/
+}
+varonce145 = var146;
+{
+nit___nit__ModelBuilder___error(self, var_ntype, var169); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+}
+}
+var = ((val*)NULL);
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline kernel#Int#== (var_arity,0l) on <var_arity:Int> */
+var172 = var_arity == 0l;
+var170 = var172;
+goto RET_LABEL171;
+RET_LABEL171:(void)0;
+}
+}
+if (var170){
+{
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var175 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var175 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var173 = var175;
+RET_LABEL174:(void)0;
+}
+}
+var_res = var173;
+{
+{ /* Inline parser_nodes#AType#n_kwnullable (var_ntype) on <var_ntype:AType> */
+var178 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_kwnullable].val; /* _n_kwnullable on <var_ntype:AType> */
+var176 = var178;
+RET_LABEL177:(void)0;
+}
+}
+if (var176 == NULL) {
+var179 = 0; /* is null */
+} else {
+var179 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var176,((val*)NULL)) on <var176:nullable TKwnullable> */
+var_other = ((val*)NULL);
+{
+var182 = ((short int(*)(val* self, val* p0))(var176->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var176, var_other); /* == on <var176:nullable TKwnullable(TKwnullable)>*/
+}
+var183 = !var182;
+var180 = var183;
+goto RET_LABEL181;
+RET_LABEL181:(void)0;
+}
+var179 = var180;
+}
+if (var179){
+{
+var184 = nit___nit__MType___as_nullable(var_res);
+}
+var_res = var184;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#AType#mtype= (var_ntype,var_res) on <var_ntype:AType> */
+var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val = var_res; /* _mtype on <var_ntype:AType> */
+RET_LABEL185:(void)0;
+}
+}
+var = var_res;
+goto RET_LABEL;
+} else {
+var186 = NEW_standard__Array(&type_standard__Array__nit__MType);
+{
+standard___standard__Array___standard__kernel__Object__init(var186); /* Direct call array#Array#init on <var186:Array[MType]>*/
+}
+var_mtypes = var186;
+{
+{ /* Inline parser_nodes#AType#n_types (var_ntype) on <var_ntype:AType> */
+var189 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_types].val; /* _n_types on <var_ntype:AType> */
+if (unlikely(var189 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_types");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1729);
+fatal_exit(1);
+}
+var187 = var189;
+RET_LABEL188:(void)0;
+}
+}
+var_190 = var187;
+{
+var191 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_190);
+}
+var_192 = var191;
+for(;;) {
+{
+var193 = ((short int(*)(val* self))((((long)var_192&3)?class_info[((long)var_192&3)]:var_192->class)->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_192); /* is_ok on <var_192:Iterator[AType]>*/
+}
+if (var193){
+{
+var194 = ((val*(*)(val* self))((((long)var_192&3)?class_info[((long)var_192&3)]:var_192->class)->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_192); /* item on <var_192:Iterator[AType]>*/
+}
+var_nt = var194;
+{
+var195 = nit___nit__ModelBuilder___resolve_mtype_unchecked(self, var_mmodule, var_mclassdef, var_nt, var_with_virtual);
+}
+var_mt = var195;
+if (var_mt == NULL) {
+var196 = 1; /* is null */
+} else {
+var196 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mt,((val*)NULL)) on <var_mt:nullable MType> */
+var_other199 = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_mt,var_other199) on <var_mt:nullable MType(MType)> */
+var202 = var_mt == var_other199;
+var200 = var202;
+goto RET_LABEL201;
+RET_LABEL201:(void)0;
+}
+}
+var197 = var200;
+goto RET_LABEL198;
+RET_LABEL198:(void)0;
+}
+var196 = var197;
+}
+if (var196){
+var = ((val*)NULL);
+goto RET_LABEL;
+} else {
+}
+{
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_mtypes, var_mt); /* Direct call array#Array#add on <var_mtypes:Array[MType]>*/
+}
+{
+((void(*)(val* self))((((long)var_192&3)?class_info[((long)var_192&3)]:var_192->class)->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_192); /* next on <var_192:Iterator[AType]>*/
+}
+} else {
+goto BREAK_label203;
+}
+}
+BREAK_label203: (void)0;
+{
+((void(*)(val* self))((((long)var_192&3)?class_info[((long)var_192&3)]:var_192->class)->vft[COLOR_standard__abstract_collection__Iterator__finish]))(var_192); /* finish on <var_192:Iterator[AType]>*/
+}
+{
+var204 = nit___nit__MClass___get_mtype(var_mclass, var_mtypes);
+}
+var_res = var204;
+{
+{ /* Inline parser_nodes#AType#n_kwnullable (var_ntype) on <var_ntype:AType> */
+var207 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_kwnullable].val; /* _n_kwnullable on <var_ntype:AType> */
+var205 = var207;
+RET_LABEL206:(void)0;
+}
+}
+if (var205 == NULL) {
+var208 = 0; /* is null */
+} else {
+var208 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var205,((val*)NULL)) on <var205:nullable TKwnullable> */
+var_other = ((val*)NULL);
+{
+var211 = ((short int(*)(val* self, val* p0))(var205->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var205, var_other); /* == on <var205:nullable TKwnullable(TKwnullable)>*/
+}
+var212 = !var211;
+var209 = var212;
+goto RET_LABEL210;
+RET_LABEL210:(void)0;
+}
+var208 = var209;
+}
+if (var208){
+{
+var213 = nit___nit__MType___as_nullable(var_res);
+}
+var_res = var213;
+} else {
+}
+{
+{ /* Inline modelbuilder_base#AType#mtype= (var_ntype,var_res) on <var_ntype:AType> */
+var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val = var_res; /* _mtype on <var_ntype:AType> */
+RET_LABEL214:(void)0;
+}
+}
+var = var_res;
+goto RET_LABEL;
+}
+} else {
+}
+if (unlikely(varonce215==NULL)) {
+var216 = NEW_standard__NativeArray(5l, &type_standard__NativeArray__standard__String);
+if (likely(varonce217!=NULL)) {
+var218 = varonce217;
+} else {
+var219 = "Error: class `";
+var220 = standard___standard__NativeString___to_s_with_length(var219, 14l);
+var218 = var220;
+varonce217 = var218;
+}
+((struct instance_standard__NativeArray*)var216)->values[0]=var218;
+if (likely(varonce221!=NULL)) {
+var222 = varonce221;
+} else {
+var223 = "` not found in module `";
+var224 = standard___standard__NativeString___to_s_with_length(var223, 23l);
+var222 = var224;
+varonce221 = var222;
+}
+((struct instance_standard__NativeArray*)var216)->values[2]=var222;
+if (likely(varonce225!=NULL)) {
+var226 = varonce225;
+} else {
+var227 = "`.";
+var228 = standard___standard__NativeString___to_s_with_length(var227, 2l);
+var226 = var228;
+varonce225 = var226;
+}
+((struct instance_standard__NativeArray*)var216)->values[4]=var226;
+} else {
+var216 = varonce215;
+varonce215 = NULL;
+}
+((struct instance_standard__NativeArray*)var216)->values[1]=var_name;
+{
+var229 = ((val*(*)(val* self))(var_mmodule->class->vft[COLOR_standard__string__Object__to_s]))(var_mmodule); /* to_s on <var_mmodule:MModule>*/
+}
+((struct instance_standard__NativeArray*)var216)->values[3]=var229;
+{
+var230 = ((val*(*)(val* self))(var216->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var216); /* native_to_s on <var216:NativeArray[String]>*/
+}
+varonce215 = var216;
+{
+nit___nit__ModelBuilder___error(self, var_ntype, var230); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
+}
+var = ((val*)NULL);
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder_base#ModelBuilder#resolve_mtype for (self: ModelBuilder, MModule, nullable MClassDef, AType): nullable MType */
+val* nit___nit__ModelBuilder___resolve_mtype(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable MType */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var_mclassdef /* var mclassdef: nullable MClassDef */;
+val* var_ntype /* var ntype: AType */;
+val* var1 /* : nullable MType */;
+val* var3 /* : nullable MType */;
+val* var_mtype /* var mtype: nullable MType */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : nullable MType */;
+short int var11 /* : Bool */;
+short int var12 /* : Bool */;
+short int var14 /* : Bool */;
+short int var16 /* : Bool */;
+short int var17 /* : Bool */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+int cltype;
+int idtype;
+val* var21 /* : MClass */;
+val* var23 /* : MClass */;
+val* var_mclass /* var mclass: MClass */;
+long var_i /* var i: Int */;
+long var24 /* : Int */;
+long var26 /* : Int */;
+long var_ /* var : Int */;
+short int var27 /* : Bool */;
+short int var29 /* : Bool */;
+int cltype30;
+int idtype31;
+const char* var_class_name;
+short int var32 /* : Bool */;
+val* var33 /* : nullable MClassDef */;
+val* var_intro /* var intro: nullable MClassDef */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
+short int var37 /* : Bool */;
+short int var39 /* : Bool */;
+val* var40 /* : MClassType */;
+val* var42 /* : MClassType */;
+val* var43 /* : Array[MType] */;
+val* var44 /* : nullable Object */;
+val* var_bound /* var bound: MType */;
+val* var45 /* : ANodes[AType] */;
+val* var47 /* : ANodes[AType] */;
+val* var48 /* : ANode */;
+val* var_nt /* var nt: AType */;
+val* var49 /* : nullable MType */;
+val* var_mt /* var mt: nullable MType */;
+short int var50 /* : Bool */;
+short int var51 /* : Bool */;
+short int var53 /* : Bool */;
+short int var55 /* : Bool */;
+short int var56 /* : Bool */;
+short int var57 /* : Bool */;
+val* var_other59 /* var other: nullable Object */;
+short int var60 /* : Bool */;
+short int var61 /* : Bool */;
+val* var62 /* : MClassType */;
+val* var64 /* : MClassType */;
+val* var_anchor /* var anchor: nullable Object */;
+short int var65 /* : Bool */;
+short int var66 /* : Bool */;
+val* var67 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce68;
+val* var69 /* : String */;
+char* var70 /* : NativeString */;
+val* var71 /* : FlatString */;
+static val* varonce72;
+val* var73 /* : String */;
+char* var74 /* : NativeString */;
+val* var75 /* : FlatString */;
+static val* varonce76;
+val* var77 /* : String */;
+char* var78 /* : NativeString */;
+val* var79 /* : FlatString */;
+val* var80 /* : String */;
+val* var81 /* : String */;
+val* var82 /* : String */;
+long var83 /* : Int */;
+var_mmodule = p0;
+var_mclassdef = p1;
+var_ntype = p2;
+{
+{ /* Inline modelbuilder_base#AType#mtype (var_ntype) on <var_ntype:AType> */
+var3 = var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val; /* _mtype on <var_ntype:AType> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var_mtype = var1;
+if (var_mtype == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
+var9 = var_mtype == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+}
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
+{
+var10 = nit___nit__ModelBuilder___resolve_mtype_unchecked(self, var_mmodule, var_mclassdef, var_ntype, 1);
+}
+var_mtype = var10;
+} else {
+}
+if (var_mtype == NULL) {
+var11 = 1; /* is null */
+} else {
+var11 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
+var16 = var_mtype == var_other;
+var14 = var16;
+goto RET_LABEL15;
+RET_LABEL15:(void)0;
+}
+}
+var12 = var14;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
+}
+var11 = var12;
+}
+if (var11){
+var = ((val*)NULL);
+goto RET_LABEL;
+} else {
 }
-if (var2){
 {
-var7 = ((val* (*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:nullable ANode(ANode)>*/;
+{ /* Inline modelbuilder_base#AType#checked_mtype (var_ntype) on <var_ntype:AType> */
+var19 = var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___checked_mtype].s; /* _checked_mtype on <var_ntype:AType> */
+var17 = var19;
+RET_LABEL18:(void)0;
+}
+}
+if (var17){
+var = var_mtype;
+goto RET_LABEL;
+} else {
 }
-var_l = var7;
+/* <var_mtype:nullable MType(MType)> isa MGenericType */
+cltype = type_nit__MGenericType.color;
+idtype = type_nit__MGenericType.id;
+if(cltype >= var_mtype->type->table_size) {
+var20 = 0;
 } else {
+var20 = var_mtype->type->type_table[cltype] == idtype;
 }
+if (var20){
 {
-{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
-var10 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
-if (unlikely(var10 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+{ /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:nullable MType(MGenericType)> */
+var23 = var_mtype->attrs[COLOR_nit__model__MClassType___mclass].val; /* _mclass on <var_mtype:nullable MType(MGenericType)> */
+if (unlikely(var23 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1138);
+fatal_exit(1);
 }
-var8 = var10;
-RET_LABEL9:(void)0;
+var21 = var23;
+RET_LABEL22:(void)0;
 }
 }
+var_mclass = var21;
+var_i = 0l;
 {
-nit___nit__ToolContext___error(var8, var_l, var_text); /* Direct call toolcontext#ToolContext#error on <var8:ToolContext>*/
+{ /* Inline model#MClass#arity (var_mclass) on <var_mclass:MClass> */
+var26 = var_mclass->attrs[COLOR_nit__model__MClass___arity].l; /* _arity on <var_mclass:MClass> */
+var24 = var26;
+RET_LABEL25:(void)0;
 }
-RET_LABEL:;
 }
-/* method modelbuilder_base#ModelBuilder#warning for (self: ModelBuilder, nullable ANode, String, String) */
-void nit___nit__ModelBuilder___warning(val* self, val* p0, val* p1, val* p2) {
-val* var_n /* var n: nullable ANode */;
-val* var_tag /* var tag: String */;
-val* var_text /* var text: String */;
-val* var /* : null */;
-val* var_l /* var l: nullable Object */;
-val* var1 /* : null */;
-short int var2 /* : Bool */;
-short int var3 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-val* var7 /* : Location */;
-val* var8 /* : ToolContext */;
-val* var10 /* : ToolContext */;
-var_n = p0;
-var_tag = p1;
-var_text = p2;
-var = NULL;
-var_l = var;
-var1 = NULL;
-if (var_n == NULL) {
-var2 = 0; /* is null */
+var_ = var24;
+for(;;) {
+{
+{ /* Inline kernel#Int#< (var_i,var_) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <var_:Int> isa OTHER */
+/* <var_:Int> isa OTHER */
+var29 = 1; /* easy <var_:Int> isa OTHER*/
+if (unlikely(!var29)) {
+var_class_name = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 534);
+fatal_exit(1);
+}
+var32 = var_i < var_;
+var27 = var32;
+goto RET_LABEL28;
+RET_LABEL28:(void)0;
+}
+}
+if (var27){
+{
+var33 = nit___nit__MClass___try_intro(var_mclass);
+}
+var_intro = var33;
+if (var_intro == NULL) {
+var34 = 1; /* is null */
 } else {
-var2 = 1; /* arg is null and recv is not */
+var34 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_n,var1) on <var_n:nullable ANode> */
-var_other = var1;
+{ /* Inline kernel#Object#== (var_intro,((val*)NULL)) on <var_intro:nullable MClassDef> */
+var_other = ((val*)NULL);
 {
-var5 = ((short int (*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other) /* == on <var_n:nullable ANode(ANode)>*/;
+{ /* Inline kernel#Object#is_same_instance (var_intro,var_other) on <var_intro:nullable MClassDef(MClassDef)> */
+var39 = var_intro == var_other;
+var37 = var39;
+goto RET_LABEL38;
+RET_LABEL38:(void)0;
 }
-var6 = !var5;
-var3 = var6;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
 }
-var2 = var3;
+var35 = var37;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
 }
-if (var2){
-{
-var7 = ((val* (*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:nullable ANode(ANode)>*/;
+var34 = var35;
 }
-var_l = var7;
+if (var34){
+var = ((val*)NULL);
+goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
-var10 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
-if (unlikely(var10 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+{ /* Inline model#MClassDef#bound_mtype (var_intro) on <var_intro:nullable MClassDef(MClassDef)> */
+var42 = var_intro->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var_intro:nullable MClassDef(MClassDef)> */
+if (unlikely(var42 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-var8 = var10;
-RET_LABEL9:(void)0;
+var40 = var42;
+RET_LABEL41:(void)0;
 }
 }
 {
-nit___nit__ToolContext___warning(var8, var_l, var_tag, var_text); /* Direct call toolcontext#ToolContext#warning on <var8:ToolContext>*/
+var43 = ((val*(*)(val* self))(var40->class->vft[COLOR_nit__model__MClassType__arguments]))(var40); /* arguments on <var40:MClassType>*/
 }
-RET_LABEL:;
+{
+var44 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var43, var_i);
 }
-/* method modelbuilder_base#ModelBuilder#advice for (self: ModelBuilder, nullable ANode, String, String) */
-void nit___nit__ModelBuilder___advice(val* self, val* p0, val* p1, val* p2) {
-val* var_n /* var n: nullable ANode */;
-val* var_tag /* var tag: String */;
-val* var_text /* var text: String */;
-val* var /* : null */;
-val* var_l /* var l: nullable Object */;
-val* var1 /* : null */;
-short int var2 /* : Bool */;
-short int var3 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var5 /* : Bool */;
-short int var6 /* : Bool */;
-val* var7 /* : Location */;
-val* var8 /* : ToolContext */;
-val* var10 /* : ToolContext */;
-var_n = p0;
-var_tag = p1;
-var_text = p2;
-var = NULL;
-var_l = var;
-var1 = NULL;
-if (var_n == NULL) {
-var2 = 0; /* is null */
+var_bound = var44;
+{
+{ /* Inline parser_nodes#AType#n_types (var_ntype) on <var_ntype:AType> */
+var47 = var_ntype->attrs[COLOR_nit__parser_nodes__AType___n_types].val; /* _n_types on <var_ntype:AType> */
+if (unlikely(var47 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_types");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1729);
+fatal_exit(1);
+}
+var45 = var47;
+RET_LABEL46:(void)0;
+}
+}
+{
+var48 = nit___nit__ANodes___standard__abstract_collection__SequenceRead___91d_93d(var45, var_i);
+}
+var_nt = var48;
+{
+var49 = nit___nit__ModelBuilder___resolve_mtype(self, var_mmodule, var_mclassdef, var_nt);
+}
+var_mt = var49;
+if (var_mt == NULL) {
+var50 = 1; /* is null */
 } else {
-var2 = 1; /* arg is null and recv is not */
+var50 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_n,var1) on <var_n:nullable ANode> */
-var_other = var1;
+{ /* Inline kernel#Object#== (var_mt,((val*)NULL)) on <var_mt:nullable MType> */
+var_other = ((val*)NULL);
 {
-var5 = ((short int (*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other) /* == on <var_n:nullable ANode(ANode)>*/;
+{ /* Inline kernel#Object#is_same_instance (var_mt,var_other) on <var_mt:nullable MType(MType)> */
+var55 = var_mt == var_other;
+var53 = var55;
+goto RET_LABEL54;
+RET_LABEL54:(void)0;
 }
-var6 = !var5;
-var3 = var6;
-goto RET_LABEL4;
-RET_LABEL4:(void)0;
 }
-var2 = var3;
+var51 = var53;
+goto RET_LABEL52;
+RET_LABEL52:(void)0;
 }
-if (var2){
-{
-var7 = ((val* (*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:nullable ANode(ANode)>*/;
+var50 = var51;
+}
+if (var50){
+var = ((val*)NULL);
+goto RET_LABEL;
+} else {
 }
-var_l = var7;
+if (var_mclassdef == NULL) {
+var56 = 0; /* is null */
 } else {
+var56 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_mclassdef,((val*)NULL)) on <var_mclassdef:nullable MClassDef> */
+var_other59 = ((val*)NULL);
 {
-{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
-var10 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
-if (unlikely(var10 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+var60 = ((short int(*)(val* self, val* p0))(var_mclassdef->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mclassdef, var_other59); /* == on <var_mclassdef:nullable MClassDef(MClassDef)>*/
 }
-var8 = var10;
-RET_LABEL9:(void)0;
+var61 = !var60;
+var57 = var61;
+goto RET_LABEL58;
+RET_LABEL58:(void)0;
 }
+var56 = var57;
 }
+if (var56){
 {
-nit___nit__ToolContext___advice(var8, var_l, var_tag, var_text); /* Direct call toolcontext#ToolContext#advice on <var8:ToolContext>*/
+{ /* Inline model#MClassDef#bound_mtype (var_mclassdef) on <var_mclassdef:nullable MClassDef(MClassDef)> */
+var64 = var_mclassdef->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var_mclassdef:nullable MClassDef(MClassDef)> */
+if (unlikely(var64 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-RET_LABEL:;
+var62 = var64;
+RET_LABEL63:(void)0;
 }
-/* method modelbuilder_base#ModelBuilder#force_get_primitive_method for (self: ModelBuilder, nullable ANode, String, MClass, MModule): MMethod */
-val* nit___nit__ModelBuilder___force_get_primitive_method(val* self, val* p0, val* p1, val* p2, val* p3) {
-val* var /* : MMethod */;
-val* var_n /* var n: nullable ANode */;
-val* var_name /* var name: String */;
-val* var_recv /* var recv: MClass */;
-val* var_mmodule /* var mmodule: MModule */;
-val* var1 /* : nullable MMethod */;
-val* var_res /* var res: nullable MMethod */;
-val* var2 /* : null */;
-short int var3 /* : Bool */;
-short int var4 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var6 /* : Bool */;
-short int var8 /* : Bool */;
-val* var9 /* : null */;
-val* var_l /* var l: nullable Object */;
-val* var10 /* : null */;
-short int var11 /* : Bool */;
-short int var12 /* : Bool */;
-val* var_other14 /* var other: nullable Object */;
-short int var15 /* : Bool */;
-short int var16 /* : Bool */;
-val* var17 /* : Location */;
-val* var18 /* : ToolContext */;
-val* var20 /* : ToolContext */;
-static val* varonce;
-val* var21 /* : String */;
-char* var22 /* : NativeString */;
-long var23 /* : Int */;
-val* var24 /* : FlatString */;
-static val* varonce25;
-val* var26 /* : String */;
-char* var27 /* : NativeString */;
-long var28 /* : Int */;
-val* var29 /* : FlatString */;
-static val* varonce30;
-val* var31 /* : String */;
-char* var32 /* : NativeString */;
-long var33 /* : Int */;
-val* var34 /* : FlatString */;
-val* var35 /* : Array[Object] */;
-long var36 /* : Int */;
-val* var37 /* : NativeArray[Object] */;
-val* var38 /* : String */;
-var_n = p0;
-var_name = p1;
-var_recv = p2;
-var_mmodule = p3;
-{
-var1 = nit__model___MModule___try_get_primitive_method(var_mmodule, var_name, var_recv);
 }
-var_res = var1;
-var2 = NULL;
-if (var_res == NULL) {
-var3 = 1; /* is null */
+var_anchor = var62;
 } else {
-var3 = 0; /* arg is null but recv is not */
+var_anchor = ((val*)NULL);
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_res,var2) on <var_res:nullable MMethod> */
-var_other = var2;
 {
-{ /* Inline kernel#Object#is_same_instance (var_res,var_other) on <var_res:nullable MMethod(MMethod)> */
-var8 = var_res == var_other;
-var6 = var8;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var65 = nit___nit__ModelBuilder___check_subtype(self, var_nt, var_mmodule, var_anchor, var_mt, var_bound);
 }
+var66 = !var65;
+if (var66){
+if (unlikely(varonce==NULL)) {
+var67 = NEW_standard__NativeArray(5l, &type_standard__NativeArray__standard__String);
+if (likely(varonce68!=NULL)) {
+var69 = varonce68;
+} else {
+var70 = "Type Error: expected `";
+var71 = standard___standard__NativeString___to_s_with_length(var70, 22l);
+var69 = var71;
+varonce68 = var69;
 }
-var4 = var6;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
+((struct instance_standard__NativeArray*)var67)->values[0]=var69;
+if (likely(varonce72!=NULL)) {
+var73 = varonce72;
+} else {
+var74 = "`, got `";
+var75 = standard___standard__NativeString___to_s_with_length(var74, 8l);
+var73 = var75;
+varonce72 = var73;
 }
-var3 = var4;
+((struct instance_standard__NativeArray*)var67)->values[2]=var73;
+if (likely(varonce76!=NULL)) {
+var77 = varonce76;
+} else {
+var78 = "`.";
+var79 = standard___standard__NativeString___to_s_with_length(var78, 2l);
+var77 = var79;
+varonce76 = var77;
 }
-if (var3){
-var9 = NULL;
-var_l = var9;
-var10 = NULL;
-if (var_n == NULL) {
-var11 = 0; /* is null */
+((struct instance_standard__NativeArray*)var67)->values[4]=var77;
 } else {
-var11 = 1; /* arg is null and recv is not */
+var67 = varonce;
+varonce = NULL;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_n,var10) on <var_n:nullable ANode> */
-var_other14 = var10;
 {
-var15 = ((short int (*)(val* self, val* p0))(var_n->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_n, var_other14) /* == on <var_n:nullable ANode(ANode)>*/;
+var80 = ((val*(*)(val* self))(var_bound->class->vft[COLOR_standard__string__Object__to_s]))(var_bound); /* to_s on <var_bound:MType>*/
 }
-var16 = !var15;
-var12 = var16;
-goto RET_LABEL13;
-RET_LABEL13:(void)0;
+((struct instance_standard__NativeArray*)var67)->values[1]=var80;
+{
+var81 = ((val*(*)(val* self))(var_mt->class->vft[COLOR_standard__string__Object__to_s]))(var_mt); /* to_s on <var_mt:nullable MType(MType)>*/
 }
-var11 = var12;
+((struct instance_standard__NativeArray*)var67)->values[3]=var81;
+{
+var82 = ((val*(*)(val* self))(var67->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var67); /* native_to_s on <var67:NativeArray[String]>*/
 }
-if (var11){
+varonce = var67;
 {
-var17 = ((val* (*)(val* self))(var_n->class->vft[COLOR_nit__parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:nullable ANode(ANode)>*/;
+nit___nit__ModelBuilder___error(self, var_nt, var82); /* Direct call modelbuilder_base#ModelBuilder#error on <self:ModelBuilder>*/
 }
-var_l = var17;
+var = ((val*)NULL);
+goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
-var20 = self->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
-if (unlikely(var20 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+var83 = standard___standard__Int___Discrete__successor(var_i, 1l);
 }
-var18 = var20;
-RET_LABEL19:(void)0;
+var_i = var83;
+} else {
+goto BREAK_label;
 }
 }
-if (varonce) {
-var21 = varonce;
+BREAK_label: (void)0;
 } else {
-var22 = "Fatal Error: ";
-var23 = 13;
-var24 = standard___standard__NativeString___to_s_with_length(var22, var23);
-var21 = var24;
-varonce = var21;
 }
-if (varonce25) {
-var26 = varonce25;
-} else {
-var27 = " must have a property named ";
-var28 = 28;
-var29 = standard___standard__NativeString___to_s_with_length(var27, var28);
-var26 = var29;
-varonce25 = var26;
+{
+{ /* Inline modelbuilder_base#AType#checked_mtype= (var_ntype,1) on <var_ntype:AType> */
+var_ntype->attrs[COLOR_nit__modelbuilder_base__AType___checked_mtype].s = 1; /* _checked_mtype on <var_ntype:AType> */
+RET_LABEL84:(void)0;
 }
-if (varonce30) {
-var31 = varonce30;
-} else {
-var32 = ".";
-var33 = 1;
-var34 = standard___standard__NativeString___to_s_with_length(var32, var33);
-var31 = var34;
-varonce30 = var31;
 }
-var35 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var35 = array_instance Array[Object] */
-var36 = 5;
-var37 = NEW_standard__NativeArray(var36, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var37)->values[0] = (val*) var21;
-((struct instance_standard__NativeArray*)var37)->values[1] = (val*) var_recv;
-((struct instance_standard__NativeArray*)var37)->values[2] = (val*) var26;
-((struct instance_standard__NativeArray*)var37)->values[3] = (val*) var_name;
-((struct instance_standard__NativeArray*)var37)->values[4] = (val*) var31;
+var = var_mtype;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder_base#ModelBuilder#check_subtype for (self: ModelBuilder, ANode, MModule, nullable MClassType, MType, MType): Bool */
+short int nit___nit__ModelBuilder___check_subtype(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
+short int var /* : Bool */;
+val* var_node /* var node: ANode */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var_anchor /* var anchor: nullable MClassType */;
+val* var_sub /* var sub: MType */;
+val* var_sup /* var sup: MType */;
+short int var1 /* : Bool */;
+var_node = p0;
+var_mmodule = p1;
+var_anchor = p2;
+var_sub = p3;
+var_sup = p4;
 {
-((void (*)(val* self, val* p0, long p1))(var35->class->vft[COLOR_standard__array__Array__with_native]))(var35, var37, var36) /* with_native on <var35:Array[Object]>*/;
+var1 = nit___nit__MType___is_subtype(var_sub, var_mmodule, var_anchor, var_sup);
 }
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
+/* method modelbuilder_base#ModelBuilder#check_sametype for (self: ModelBuilder, ANode, MModule, nullable MClassType, MType, MType): Bool */
+short int nit___nit__ModelBuilder___check_sametype(val* self, val* p0, val* p1, val* p2, val* p3, val* p4) {
+short int var /* : Bool */;
+val* var_node /* var node: ANode */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var_anchor /* var anchor: nullable MClassType */;
+val* var_sub /* var sub: MType */;
+val* var_sup /* var sup: MType */;
+short int var1 /* : Bool */;
+short int var2 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var3 /* : Bool */;
+var_node = p0;
+var_mmodule = p1;
+var_anchor = p2;
+var_sub = p3;
+var_sup = p4;
 {
-var38 = ((val* (*)(val* self))(var35->class->vft[COLOR_standard__string__Object__to_s]))(var35) /* to_s on <var35:Array[Object]>*/;
+var2 = nit___nit__MType___is_subtype(var_sub, var_mmodule, var_anchor, var_sup);
 }
+var_ = var2;
+if (var2){
 {
-nit___nit__ToolContext___fatal_error(var18, var_l, var38); /* Direct call toolcontext#ToolContext#fatal_error on <var18:ToolContext>*/
+var3 = nit___nit__MType___is_subtype(var_sup, var_mmodule, var_anchor, var_sub);
 }
-PRINT_ERROR("Runtime error: %s", "Aborted");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 212);
-show_backtrace(1);
+var1 = var3;
 } else {
+var1 = var_;
 }
-var = var_res;
+var = var1;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
+/* method modelbuilder_base#AType#mtype for (self: AType): nullable MType */
+val* nit__modelbuilder_base___AType___mtype(val* self) {
+val* var /* : nullable MType */;
+val* var1 /* : nullable MType */;
+var1 = self->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val; /* _mtype on <self:AType> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder_base#AType#mtype= for (self: AType, nullable MType) */
+void nit__modelbuilder_base___AType___mtype_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__modelbuilder_base__AType___mtype].val = p0; /* _mtype on <self:AType> */
+RET_LABEL:;
+}
+/* method modelbuilder_base#AType#checked_mtype for (self: AType): Bool */
+short int nit__modelbuilder_base___AType___checked_mtype(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = self->attrs[COLOR_nit__modelbuilder_base__AType___checked_mtype].s; /* _checked_mtype on <self:AType> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder_base#AType#checked_mtype= for (self: AType, Bool) */
+void nit__modelbuilder_base___AType___checked_mtype_61d(val* self, short int p0) {
+self->attrs[COLOR_nit__modelbuilder_base__AType___checked_mtype].s = p0; /* _checked_mtype on <self:AType> */
+RET_LABEL:;
+}
 /* method modelbuilder_base#AIntrudeVisibility#mvisibility for (self: AIntrudeVisibility): MVisibility */
 val* nit__modelbuilder_base___AIntrudeVisibility___AVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
-val* var1 /* : MVisibility */;
+val* var1 /* : Sys */;
+val* var2 /* : MVisibility */;
+var1 = glob_sys;
 {
-var1 = nit__model_base___standard__Object___intrude_visibility(self);
+var2 = nit__model_base___standard__Sys___intrude_visibility(var1);
 }
-var = var1;
+var = var2;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1846,11 +3453,13 @@ return var;
 /* method modelbuilder_base#APublicVisibility#mvisibility for (self: APublicVisibility): MVisibility */
 val* nit__modelbuilder_base___APublicVisibility___AVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
-val* var1 /* : MVisibility */;
+val* var1 /* : Sys */;
+val* var2 /* : MVisibility */;
+var1 = glob_sys;
 {
-var1 = nit__model_base___standard__Object___public_visibility(self);
+var2 = nit__model_base___standard__Sys___public_visibility(var1);
 }
-var = var1;
+var = var2;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1858,11 +3467,13 @@ return var;
 /* method modelbuilder_base#AProtectedVisibility#mvisibility for (self: AProtectedVisibility): MVisibility */
 val* nit__modelbuilder_base___AProtectedVisibility___AVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
-val* var1 /* : MVisibility */;
+val* var1 /* : Sys */;
+val* var2 /* : MVisibility */;
+var1 = glob_sys;
 {
-var1 = nit__model_base___standard__Object___protected_visibility(self);
+var2 = nit__model_base___standard__Sys___protected_visibility(var1);
 }
-var = var1;
+var = var2;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1870,11 +3481,13 @@ return var;
 /* method modelbuilder_base#APrivateVisibility#mvisibility for (self: APrivateVisibility): MVisibility */
 val* nit__modelbuilder_base___APrivateVisibility___AVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
-val* var1 /* : MVisibility */;
+val* var1 /* : Sys */;
+val* var2 /* : MVisibility */;
+var1 = glob_sys;
 {
-var1 = nit__model_base___standard__Object___private_visibility(self);
+var2 = nit__model_base___standard__Sys___private_visibility(var1);
 }
-var = var1;
+var = var2;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1899,24 +3512,24 @@ val* var /* : MDoc */;
 val* var1 /* : nullable MDoc */;
 val* var3 /* : nullable MDoc */;
 val* var_res /* var res: nullable MDoc */;
-val* var4 /* : null */;
+short int var4 /* : Bool */;
 short int var5 /* : Bool */;
-short int var6 /* : Bool */;
 val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
 short int var8 /* : Bool */;
-short int var9 /* : Bool */;
-val* var10 /* : MDoc */;
-val* var12 /* : ANodes[TComment] */;
-val* var14 /* : ANodes[TComment] */;
+val* var9 /* : MDoc */;
+val* var10 /* : Location */;
+val* var12 /* : Location */;
+val* var13 /* : ANodes[TComment] */;
+val* var15 /* : ANodes[TComment] */;
 val* var_ /* var : ANodes[TComment] */;
-val* var15 /* : Iterator[ANode] */;
-val* var_16 /* var : Iterator[TComment] */;
-short int var17 /* : Bool */;
-val* var18 /* : nullable Object */;
+val* var16 /* : Iterator[ANode] */;
+val* var_17 /* var : Iterator[TComment] */;
+short int var18 /* : Bool */;
+val* var19 /* : nullable Object */;
 val* var_c /* var c: TComment */;
-val* var19 /* : String */;
+val* var20 /* : String */;
 val* var_text /* var text: String */;
-long var20 /* : Int */;
 long var21 /* : Int */;
 short int var22 /* : Bool */;
 short int var24 /* : Bool */;
@@ -1929,44 +3542,34 @@ val* var28 /* : Array[String] */;
 static val* varonce;
 val* var29 /* : String */;
 char* var30 /* : NativeString */;
-long var31 /* : Int */;
-val* var32 /* : FlatString */;
-val* var33 /* : SequenceRead[Char] */;
-long var34 /* : Int */;
-val* var35 /* : nullable Object */;
-char var36 /* : Char */;
-short int var37 /* : Bool */;
-short int var39 /* : Bool */;
-char var40 /* : Char */;
-val* var41 /* : SequenceRead[Char] */;
-long var42 /* : Int */;
-val* var43 /* : nullable Object */;
-char var44 /* : Char */;
-short int var45 /* : Bool */;
-short int var47 /* : Bool */;
-char var48 /* : Char */;
-long var49 /* : Int */;
-val* var50 /* : Text */;
-long var51 /* : Int */;
-val* var52 /* : Text */;
-val* var53 /* : SequenceRead[Char] */;
-val* var54 /* : nullable Object */;
-char var55 /* : Char */;
-short int var56 /* : Bool */;
-short int var58 /* : Bool */;
-char var59 /* : Char */;
-long var60 /* : Int */;
-long var61 /* : Int */;
-long var62 /* : Int */;
-long var63 /* : Int */;
-short int var65 /* : Bool */;
-int cltype66;
-int idtype67;
-const char* var_class_name68;
-long var69 /* : Int */;
-val* var70 /* : Text */;
-val* var71 /* : Array[String] */;
-val* var73 /* : Array[String] */;
+val* var31 /* : FlatString */;
+val* var32 /* : SequenceRead[Char] */;
+val* var33 /* : nullable Object */;
+short int var34 /* : Bool */;
+short int var36 /* : Bool */;
+uint32_t var37 /* : Char */;
+val* var38 /* : SequenceRead[Char] */;
+val* var39 /* : nullable Object */;
+short int var40 /* : Bool */;
+short int var42 /* : Bool */;
+uint32_t var43 /* : Char */;
+val* var44 /* : Text */;
+val* var45 /* : Text */;
+val* var46 /* : SequenceRead[Char] */;
+val* var47 /* : nullable Object */;
+short int var48 /* : Bool */;
+short int var50 /* : Bool */;
+uint32_t var51 /* : Char */;
+long var52 /* : Int */;
+long var53 /* : Int */;
+short int var55 /* : Bool */;
+int cltype56;
+int idtype57;
+const char* var_class_name58;
+long var59 /* : Int */;
+val* var60 /* : Text */;
+val* var61 /* : Array[String] */;
+val* var63 /* : Array[String] */;
 {
 { /* Inline modelbuilder_base#ADoc#mdoc_cache (self) on <self:ADoc> */
 var3 = self->attrs[COLOR_nit__modelbuilder_base__ADoc___mdoc_cache].val; /* _mdoc_cache on <self:ADoc> */
@@ -1975,83 +3578,94 @@ RET_LABEL2:(void)0;
 }
 }
 var_res = var1;
-var4 = NULL;
 if (var_res == NULL) {
-var5 = 0; /* is null */
+var4 = 0; /* is null */
 } else {
-var5 = 1; /* arg is null and recv is not */
+var4 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_res,var4) on <var_res:nullable MDoc> */
-var_other = var4;
+{ /* Inline kernel#Object#!= (var_res,((val*)NULL)) on <var_res:nullable MDoc> */
+var_other = ((val*)NULL);
 {
-var8 = ((short int (*)(val* self, val* p0))(var_res->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable MDoc(MDoc)>*/;
+var7 = ((short int(*)(val* self, val* p0))(var_res->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_res, var_other); /* == on <var_res:nullable MDoc(MDoc)>*/
 }
-var9 = !var8;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var8 = !var7;
+var5 = var8;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
-var5 = var6;
+var4 = var5;
 }
-if (var5){
+if (var4){
 var = var_res;
 goto RET_LABEL;
 } else {
 }
-var10 = NEW_nit__MDoc(&type_nit__MDoc);
+var9 = NEW_nit__MDoc(&type_nit__MDoc);
 {
-{ /* Inline kernel#Object#init (var10) on <var10:MDoc> */
+{ /* Inline parser_nodes#ANode#location (self) on <self:ADoc> */
+var12 = self->attrs[COLOR_nit__parser_nodes__ANode___location].val; /* _location on <self:ADoc> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 24);
+fatal_exit(1);
+}
+var10 = var12;
 RET_LABEL11:(void)0;
 }
 }
-var_res = var10;
+{
+((void(*)(val* self, val* p0))(var9->class->vft[COLOR_nit__mdoc__MDoc__location_61d]))(var9, var10); /* location= on <var9:MDoc>*/
+}
+{
+((void(*)(val* self))(var9->class->vft[COLOR_standard__kernel__Object__init]))(var9); /* init on <var9:MDoc>*/
+}
+var_res = var9;
 {
 { /* Inline parser_nodes#ADoc#n_comment (self) on <self:ADoc> */
-var14 = self->attrs[COLOR_nit__parser_nodes__ADoc___n_comment].val; /* _n_comment on <self:ADoc> */
-if (unlikely(var14 == NULL)) {
+var15 = self->attrs[COLOR_nit__parser_nodes__ADoc___n_comment].val; /* _n_comment on <self:ADoc> */
+if (unlikely(var15 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_comment");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2515);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2945);
+fatal_exit(1);
 }
-var12 = var14;
-RET_LABEL13:(void)0;
+var13 = var15;
+RET_LABEL14:(void)0;
 }
 }
-var_ = var12;
+var_ = var13;
 {
-var15 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
+var16 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
 }
-var_16 = var15;
+var_17 = var16;
 for(;;) {
 {
-var17 = ((short int (*)(val* self))(var_16->class->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_16) /* is_ok on <var_16:Iterator[TComment]>*/;
+var18 = ((short int(*)(val* self))((((long)var_17&3)?class_info[((long)var_17&3)]:var_17->class)->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_17); /* is_ok on <var_17:Iterator[TComment]>*/
 }
-if (var17){
+if (var18){
 {
-var18 = ((val* (*)(val* self))(var_16->class->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_16) /* item on <var_16:Iterator[TComment]>*/;
+var19 = ((val*(*)(val* self))((((long)var_17&3)?class_info[((long)var_17&3)]:var_17->class)->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_17); /* item on <var_17:Iterator[TComment]>*/
 }
-var_c = var18;
+var_c = var19;
 {
-var19 = nit__lexer_work___Token___text(var_c);
+var20 = nit__lexer_work___Token___text(var_c);
 }
-var_text = var19;
+var_text = var20;
 {
-var20 = ((long (*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__length]))(var_text) /* length on <var_text:String>*/;
+var21 = ((long(*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__length]))(var_text); /* length on <var_text:String>*/
 }
-var21 = 2;
 {
-{ /* Inline kernel#Int#< (var20,var21) on <var20:Int> */
-/* Covariant cast for argument 0 (i) <var21:Int> isa OTHER */
-/* <var21:Int> isa OTHER */
-var24 = 1; /* easy <var21:Int> isa OTHER*/
+{ /* Inline kernel#Int#< (var21,2l) on <var21:Int> */
+/* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
+/* <2l:Int> isa OTHER */
+var24 = 1; /* easy <2l:Int> isa OTHER*/
 if (unlikely(!var24)) {
 var_class_name = type_standard__Int.name;
 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 410);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 534);
+fatal_exit(1);
 }
-var25 = var20 < var21;
+var25 = var21 < 2l;
 var22 = var25;
 goto RET_LABEL23;
 RET_LABEL23:(void)0;
@@ -2063,20 +3677,19 @@ if (var22){
 var28 = var_res->attrs[COLOR_nit__mdoc__MDoc___content].val; /* _content on <var_res:nullable MDoc(MDoc)> */
 if (unlikely(var28 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _content");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__mdoc, 22);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__mdoc, 23);
+fatal_exit(1);
 }
 var26 = var28;
 RET_LABEL27:(void)0;
 }
 }
-if (varonce) {
+if (likely(varonce!=NULL)) {
 var29 = varonce;
 } else {
 var30 = "";
-var31 = 0;
-var32 = standard___standard__NativeString___to_s_with_length(var30, var31);
-var29 = var32;
+var31 = standard___standard__NativeString___to_s_with_length(var30, 0l);
+var29 = var31;
 varonce = var29;
 }
 {
@@ -2086,144 +3699,124 @@ goto BREAK_label;
 } else {
 }
 {
-var33 = ((val* (*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__chars]))(var_text) /* chars on <var_text:String>*/;
+var32 = ((val*(*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__chars]))(var_text); /* chars on <var_text:String>*/
 }
-var34 = 0;
 {
-var35 = ((val* (*)(val* self, long p0))(var33->class->vft[COLOR_standard__abstract_collection__SequenceRead___91d_93d]))(var33, var34) /* [] on <var33:SequenceRead[Char]>*/;
+var33 = ((val*(*)(val* self, long p0))((((long)var32&3)?class_info[((long)var32&3)]:var32->class)->vft[COLOR_standard__abstract_collection__SequenceRead___91d_93d]))(var32, 0l); /* [] on <var32:SequenceRead[Char]>*/
 }
-var36 = '#';
 {
-{ /* Inline kernel#Char#== (var35,var36) on <var35:nullable Object(Char)> */
-var39 = (var35 != NULL) && (var35->class == &class_standard__Char);
-if (var39) {
-var40 = ((struct instance_standard__Char*)var35)->value; /* autounbox from nullable Object to Char */;
-var39 = (var40 == var36);
-}
-var37 = var39;
-goto RET_LABEL38;
-RET_LABEL38:(void)0;
+{ /* Inline kernel#Char#== (var33,'#') on <var33:nullable Object(Char)> */
+var37 = (uint32_t)((long)(var33)>>2);
+var36 = (var33 != NULL) && (var37 == '#');
+var34 = var36;
+goto RET_LABEL35;
+RET_LABEL35:(void)0;
 }
 }
-if (unlikely(!var37)) {
+if (unlikely(!var34)) {
 PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 250);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 397);
+fatal_exit(1);
 }
 {
-var41 = ((val* (*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__chars]))(var_text) /* chars on <var_text:String>*/;
+var38 = ((val*(*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__chars]))(var_text); /* chars on <var_text:String>*/
 }
-var42 = 1;
 {
-var43 = ((val* (*)(val* self, long p0))(var41->class->vft[COLOR_standard__abstract_collection__SequenceRead___91d_93d]))(var41, var42) /* [] on <var41:SequenceRead[Char]>*/;
+var39 = ((val*(*)(val* self, long p0))((((long)var38&3)?class_info[((long)var38&3)]:var38->class)->vft[COLOR_standard__abstract_collection__SequenceRead___91d_93d]))(var38, 1l); /* [] on <var38:SequenceRead[Char]>*/
 }
-var44 = ' ';
 {
-{ /* Inline kernel#Char#== (var43,var44) on <var43:nullable Object(Char)> */
-var47 = (var43 != NULL) && (var43->class == &class_standard__Char);
-if (var47) {
-var48 = ((struct instance_standard__Char*)var43)->value; /* autounbox from nullable Object to Char */;
-var47 = (var48 == var44);
-}
-var45 = var47;
-goto RET_LABEL46;
-RET_LABEL46:(void)0;
+{ /* Inline kernel#Char#== (var39,' ') on <var39:nullable Object(Char)> */
+var43 = (uint32_t)((long)(var39)>>2);
+var42 = (var39 != NULL) && (var43 == ' ');
+var40 = var42;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
 }
 }
-if (var45){
-var49 = 2;
+if (var40){
 {
-var50 = standard___standard__Text___substring_from(var_text, var49);
+var44 = standard___standard__Text___substring_from(var_text, 2l);
 }
-var_text = var50;
+var_text = var44;
 } else {
-var51 = 1;
 {
-var52 = standard___standard__Text___substring_from(var_text, var51);
+var45 = standard___standard__Text___substring_from(var_text, 1l);
 }
-var_text = var52;
+var_text = var45;
 }
 {
-var53 = ((val* (*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__chars]))(var_text) /* chars on <var_text:String>*/;
+var46 = ((val*(*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__chars]))(var_text); /* chars on <var_text:String>*/
 }
 {
-var54 = ((val* (*)(val* self))(var53->class->vft[COLOR_standard__abstract_collection__SequenceRead__last]))(var53) /* last on <var53:SequenceRead[Char]>*/;
+var47 = ((val*(*)(val* self))((((long)var46&3)?class_info[((long)var46&3)]:var46->class)->vft[COLOR_standard__abstract_collection__SequenceRead__last]))(var46); /* last on <var46:SequenceRead[Char]>*/
 }
-var55 = '\n';
 {
-{ /* Inline kernel#Char#== (var54,var55) on <var54:nullable Object(Char)> */
-var58 = (var54 != NULL) && (var54->class == &class_standard__Char);
-if (var58) {
-var59 = ((struct instance_standard__Char*)var54)->value; /* autounbox from nullable Object to Char */;
-var58 = (var59 == var55);
-}
-var56 = var58;
-goto RET_LABEL57;
-RET_LABEL57:(void)0;
+{ /* Inline kernel#Char#== (var47,'\n') on <var47:nullable Object(Char)> */
+var51 = (uint32_t)((long)(var47)>>2);
+var50 = (var47 != NULL) && (var51 == '\n');
+var48 = var50;
+goto RET_LABEL49;
+RET_LABEL49:(void)0;
 }
 }
-if (var56){
-var60 = 0;
+if (var48){
 {
-var61 = ((long (*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__length]))(var_text) /* length on <var_text:String>*/;
+var52 = ((long(*)(val* self))(var_text->class->vft[COLOR_standard__string__Text__length]))(var_text); /* length on <var_text:String>*/
 }
-var62 = 1;
 {
-{ /* Inline kernel#Int#- (var61,var62) on <var61:Int> */
-/* Covariant cast for argument 0 (i) <var62:Int> isa OTHER */
-/* <var62:Int> isa OTHER */
-var65 = 1; /* easy <var62:Int> isa OTHER*/
-if (unlikely(!var65)) {
-var_class_name68 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name68);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 416);
-show_backtrace(1);
+{ /* Inline kernel#Int#- (var52,1l) on <var52:Int> */
+/* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
+/* <1l:Int> isa OTHER */
+var55 = 1; /* easy <1l:Int> isa OTHER*/
+if (unlikely(!var55)) {
+var_class_name58 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name58);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 540);
+fatal_exit(1);
 }
-var69 = var61 - var62;
-var63 = var69;
-goto RET_LABEL64;
-RET_LABEL64:(void)0;
+var59 = var52 - 1l;
+var53 = var59;
+goto RET_LABEL54;
+RET_LABEL54:(void)0;
 }
 }
 {
-var70 = ((val* (*)(val* self, long p0, long p1))(var_text->class->vft[COLOR_standard__string__Text__substring]))(var_text, var60, var63) /* substring on <var_text:String>*/;
+var60 = ((val*(*)(val* self, long p0, long p1))(var_text->class->vft[COLOR_standard__string__Text__substring]))(var_text, 0l, var53); /* substring on <var_text:String>*/
 }
-var_text = var70;
+var_text = var60;
 } else {
 }
 {
 { /* Inline mdoc#MDoc#content (var_res) on <var_res:nullable MDoc(MDoc)> */
-var73 = var_res->attrs[COLOR_nit__mdoc__MDoc___content].val; /* _content on <var_res:nullable MDoc(MDoc)> */
-if (unlikely(var73 == NULL)) {
+var63 = var_res->attrs[COLOR_nit__mdoc__MDoc___content].val; /* _content on <var_res:nullable MDoc(MDoc)> */
+if (unlikely(var63 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _content");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__mdoc, 22);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__mdoc, 23);
+fatal_exit(1);
 }
-var71 = var73;
-RET_LABEL72:(void)0;
+var61 = var63;
+RET_LABEL62:(void)0;
 }
 }
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var71, var_text); /* Direct call array#Array#add on <var71:Array[String]>*/
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var61, var_text); /* Direct call array#Array#add on <var61:Array[String]>*/
 }
 BREAK_label: (void)0;
 {
-((void (*)(val* self))(var_16->class->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_16) /* next on <var_16:Iterator[TComment]>*/;
+((void(*)(val* self))((((long)var_17&3)?class_info[((long)var_17&3)]:var_17->class)->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_17); /* next on <var_17:Iterator[TComment]>*/
 }
 } else {
-goto BREAK_label74;
+goto BREAK_label64;
 }
 }
-BREAK_label74: (void)0;
+BREAK_label64: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_16) on <var_16:Iterator[TComment]> */
-RET_LABEL75:(void)0;
-}
+((void(*)(val* self))((((long)var_17&3)?class_info[((long)var_17&3)]:var_17->class)->vft[COLOR_standard__abstract_collection__Iterator__finish]))(var_17); /* finish on <var_17:Iterator[TComment]>*/
 }
 {
 { /* Inline modelbuilder_base#ADoc#mdoc_cache= (self,var_res) on <self:ADoc> */
 self->attrs[COLOR_nit__modelbuilder_base__ADoc___mdoc_cache].val = var_res; /* _mdoc_cache on <self:ADoc> */
-RET_LABEL76:(void)0;
+RET_LABEL65:(void)0;
 }
 }
 var = var_res;