+var_candidate = var_try_file;
+} else {
+{
+{ /* Inline kernel#Object#!= (var_candidate,var_try_file) on <var_candidate:nullable String(String)> */
+var_other = var_try_file;
+{
+var87 = ((short int (*)(val*, val*))(var_candidate->class->vft[COLOR_kernel__Object___61d_61d]))(var_candidate, var_other) /* == on <var_candidate:nullable String(String)>*/;
+var86 = var87;
+}
+var88 = !var86;
+var84 = var88;
+goto RET_LABEL85;
+RET_LABEL85:(void)0;
+}
+var83 = var84;
+}
+if (var83){
+{
+var89 = modelbuilder__ModelBuilder__module_absolute_path(self, var_candidate);
+}
+var_abs_candidate90 = var89;
+{
+var91 = modelbuilder__ModelBuilder__module_absolute_path(self, var_try_file);
+}
+var_abs_try_file92 = var91;
+{
+{ /* Inline kernel#Object#!= (var_abs_candidate90,var_abs_try_file92) on <var_abs_candidate90:String> */
+var_other = var_abs_try_file92;
+{
+var97 = ((short int (*)(val*, val*))(var_abs_candidate90->class->vft[COLOR_kernel__Object___61d_61d]))(var_abs_candidate90, var_other) /* == on <var_abs_candidate90:String>*/;
+var96 = var97;
+}
+var98 = !var96;
+var94 = var98;
+goto RET_LABEL95;
+RET_LABEL95:(void)0;
+}
+var93 = var94;
+}
+if (var93){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var101 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var101 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var99 = var101;
+RET_LABEL100:(void)0;
+}
+}
+if (varonce102) {
+var103 = varonce102;
+} else {
+var104 = "Error: conflicting module file for ";
+var105 = 35;
+var106 = string__NativeString__to_s_with_length(var104, var105);
+var103 = var106;
+varonce102 = var103;
+}
+if (varonce107) {
+var108 = varonce107;
+} else {
+var109 = ": ";
+var110 = 2;
+var111 = string__NativeString__to_s_with_length(var109, var110);
+var108 = var111;
+varonce107 = var108;
+}
+if (varonce112) {
+var113 = varonce112;
+} else {
+var114 = " ";
+var115 = 1;
+var116 = string__NativeString__to_s_with_length(var114, var115);
+var113 = var116;
+varonce112 = var113;
+}
+var117 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var117 = array_instance Array[Object] */
+var118 = 6;
+var119 = NEW_array__NativeArray(var118, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var119)->values[0] = (val*) var103;
+((struct instance_array__NativeArray*)var119)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var119)->values[2] = (val*) var108;
+((struct instance_array__NativeArray*)var119)->values[3] = (val*) var_candidate;
+((struct instance_array__NativeArray*)var119)->values[4] = (val*) var113;
+((struct instance_array__NativeArray*)var119)->values[5] = (val*) var_try_file;
+{
+((void (*)(val*, val*, long))(var117->class->vft[COLOR_array__Array__with_native]))(var117, var119, var118) /* with_native on <var117:Array[Object]>*/;
+}
+}
+{
+var120 = ((val* (*)(val*))(var117->class->vft[COLOR_string__Object__to_s]))(var117) /* to_s on <var117:Array[Object]>*/;
+}
+{
+toolcontext__ToolContext__error(var99, var_location, var120); /* Direct call toolcontext#ToolContext#error on <var99:ToolContext>*/
+}
+} else {
+}
+} else {
+}
+}
+} else {
+}
+CONTINUE_label: (void)0;
+{
+((void (*)(val*))(var2->class->vft[COLOR_abstract_collection__Iterator__next]))(var2) /* next on <var2:Iterator[nullable Object]>*/;
+}
+}
+BREAK_label: (void)0;
+var121 = NULL;
+if (var_candidate == NULL) {
+var122 = 1; /* is null */
+} else {
+var122 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var123 = string__FlatString___61d_61d(var_candidate, var121);
+var122 = var123;
+}
+if (var122){
+var124 = NULL;
+var = var124;
+goto RET_LABEL;
+} else {
+}
+{
+var125 = modelbuilder__ModelBuilder__identify_file(self, var_candidate);
+}
+var = var125;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#search_module_in_paths for (self: Object, nullable Location, String, Collection[String]): nullable ModulePath */
+val* VIRTUAL_modelbuilder__ModelBuilder__search_module_in_paths(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable ModulePath */;
+val* var1 /* : nullable ModulePath */;
+var1 = modelbuilder__ModelBuilder__search_module_in_paths(self, p0, p1, p2);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#identified_files for (self: ModelBuilder): HashMap[String, nullable ModulePath] */
+val* modelbuilder__ModelBuilder__identified_files(val* self) {
+val* var /* : HashMap[String, nullable ModulePath] */;
+val* var1 /* : HashMap[String, nullable ModulePath] */;
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___identified_files].val; /* _identified_files on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _identified_files");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 405);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#identified_files for (self: Object): HashMap[String, nullable ModulePath] */
+val* VIRTUAL_modelbuilder__ModelBuilder__identified_files(val* self) {
+val* var /* : HashMap[String, nullable ModulePath] */;
+val* var1 /* : HashMap[String, nullable ModulePath] */;
+val* var3 /* : HashMap[String, nullable ModulePath] */;
+{ /* Inline modelbuilder#ModelBuilder#identified_files (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___identified_files].val; /* _identified_files on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _identified_files");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 405);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#identify_file for (self: ModelBuilder, String): nullable ModulePath */
+val* modelbuilder__ModelBuilder__identify_file(val* self, val* p0) {
+val* var /* : nullable ModulePath */;
+val* var_path /* var path: String */;
+val* var1 /* : nullable String */;
+static val* varonce;
+val* var2 /* : String */;
+char* var3 /* : NativeString */;
+long var4 /* : Int */;
+val* var5 /* : FlatString */;
+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 var11 /* : Bool */;
+val* var12 /* : null */;
+val* var13 /* : Array[String] */;
+val* var15 /* : Array[String] */;
+val* var16 /* : nullable ModulePath */;
+val* var_res /* var res: nullable ModulePath */;
+val* var17 /* : null */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+short int var21 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+val* var24 /* : null */;
+val* var_candidate /* var candidate: nullable Object */;
+short int var25 /* : Bool */;
+val* var26 /* : nullable MGroup */;
+val* var_mgroup /* var mgroup: nullable MGroup */;
+val* var27 /* : null */;
+short int var28 /* : Bool */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+short int var32 /* : Bool */;
+short int var33 /* : Bool */;
+val* var34 /* : nullable String */;
+val* var36 /* : nullable String */;
+val* var37 /* : String */;
+val* var39 /* : String */;
+static val* varonce40;
+val* var41 /* : String */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : FlatString */;
+val* var45 /* : String */;
+val* var46 /* : String */;
+val* var_owner_path /* var owner_path: String */;
+short int var47 /* : Bool */;
+val* var48 /* : null */;
+short int var49 /* : Bool */;
+short int var50 /* : Bool */;
+val* var51 /* : ToolContext */;
+val* var53 /* : ToolContext */;
+val* var54 /* : null */;
+static val* varonce55;
+val* var56 /* : String */;
+char* var57 /* : NativeString */;
+long var58 /* : Int */;
+val* var59 /* : FlatString */;
+static val* varonce60;
+val* var61 /* : String */;
+char* var62 /* : NativeString */;
+long var63 /* : Int */;
+val* var64 /* : FlatString */;
+val* var65 /* : Array[Object] */;
+long var66 /* : Int */;
+val* var67 /* : NativeArray[Object] */;
+val* var68 /* : String */;
+val* var69 /* : null */;
+static val* varonce70;
+val* var71 /* : String */;
+char* var72 /* : NativeString */;
+long var73 /* : Int */;
+val* var74 /* : FlatString */;
+val* var75 /* : String */;
+val* var_pn /* var pn: String */;
+val* var76 /* : String */;
+val* var_rp /* var rp: String */;
+val* var77 /* : HashMap[String, nullable ModulePath] */;
+val* var79 /* : HashMap[String, nullable ModulePath] */;
+short int var80 /* : Bool */;
+val* var81 /* : HashMap[String, nullable ModulePath] */;
+val* var83 /* : HashMap[String, nullable ModulePath] */;
+val* var84 /* : nullable Object */;
+static val* varonce85;
+val* var86 /* : String */;
+char* var87 /* : NativeString */;
+long var88 /* : Int */;
+val* var89 /* : FlatString */;
+val* var90 /* : String */;
+val* var91 /* : String */;
+val* var_mgrouppath /* var mgrouppath: String */;
+val* var92 /* : nullable MGroup */;
+val* var_mgroup93 /* var mgroup: nullable MGroup */;
+val* var94 /* : null */;
+short int var95 /* : Bool */;
+short int var96 /* : Bool */;
+val* var_other98 /* var other: nullable Object */;
+short int var99 /* : Bool */;
+short int var101 /* : Bool */;
+val* var102 /* : MProject */;
+val* var103 /* : Model */;
+val* var105 /* : Model */;
+val* var_mproject /* var mproject: MProject */;
+val* var106 /* : MGroup */;
+val* var107 /* : null */;
+val* var110 /* : ToolContext */;
+val* var112 /* : ToolContext */;
+static val* varonce113;
+val* var114 /* : String */;
+char* var115 /* : NativeString */;
+long var116 /* : Int */;
+val* var117 /* : FlatString */;
+static val* varonce118;
+val* var119 /* : String */;
+char* var120 /* : NativeString */;
+long var121 /* : Int */;
+val* var122 /* : FlatString */;
+val* var123 /* : Array[Object] */;
+long var124 /* : Int */;
+val* var125 /* : NativeArray[Object] */;
+val* var126 /* : String */;
+long var127 /* : Int */;
+val* var128 /* : ModulePath */;
+val* var_res130 /* var res: ModulePath */;
+val* var131 /* : Array[ModulePath] */;
+val* var133 /* : Array[ModulePath] */;
+val* var134 /* : HashMap[String, nullable ModulePath] */;
+val* var136 /* : HashMap[String, nullable ModulePath] */;
+var_path = p0;
+{
+var1 = file__String__file_extension(var_path);
+}
+if (varonce) {
+var2 = varonce;
+} else {
+var3 = "nit";
+var4 = 3;
+var5 = string__NativeString__to_s_with_length(var3, var4);
+var2 = var5;
+varonce = var2;
+}
+if (var1 == NULL) {
+var6 = 1; /* <var2:String> cannot be null */
+} else {
+{ /* Inline kernel#Object#!= (var1,var2) on <var1:nullable String> */
+var_other = var2;
+{
+var10 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___61d_61d]))(var1, var_other) /* == on <var1:nullable String(String)>*/;
+var9 = var10;
+}
+var11 = !var9;
+var7 = var11;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+var6 = var7;
+}
+if (var6){
+var12 = NULL;
+{
+{ /* Inline modelbuilder#ModelBuilder#paths (self) on <self:ModelBuilder> */
+var15 = self->attrs[COLOR_modelbuilder__ModelBuilder___paths].val; /* _paths on <self:ModelBuilder> */
+if (unlikely(var15 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _paths");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 289);
+show_backtrace(1);
+}
+var13 = var15;
+RET_LABEL14:(void)0;
+}
+}
+{
+var16 = modelbuilder__ModelBuilder__search_module_in_paths(self, var12, var_path, var13);
+}
+var_res = var16;
+var17 = NULL;
+if (var_res == NULL) {
+var18 = 0; /* is null */
+} else {
+var18 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_res,var17) on <var_res:nullable ModulePath> */
+var_other = var17;
+{
+var22 = ((short int (*)(val*, val*))(var_res->class->vft[COLOR_kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable ModulePath(ModulePath)>*/;
+var21 = var22;
+}
+var23 = !var21;
+var19 = var23;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
+}
+var18 = var19;
+}
+if (var18){
+var = var_res;
+goto RET_LABEL;
+} else {
+}
+var24 = NULL;
+var_candidate = var24;
+{
+var25 = file__String__file_exists(var_path);
+}
+if (var25){
+{
+var26 = modelbuilder__ModelBuilder__get_mgroup(self, var_path);
+}
+var_mgroup = var26;
+var27 = NULL;
+if (var_mgroup == NULL) {
+var28 = 0; /* is null */
+} else {
+var28 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mgroup,var27) on <var_mgroup:nullable MGroup> */
+var_other = var27;
+{
+var32 = ((short int (*)(val*, val*))(var_mgroup->class->vft[COLOR_kernel__Object___61d_61d]))(var_mgroup, var_other) /* == on <var_mgroup:nullable MGroup(MGroup)>*/;
+var31 = var32;
+}
+var33 = !var31;
+var29 = var33;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
+}
+var28 = var29;
+}
+if (var28){
+{
+{ /* Inline mproject#MGroup#filepath (var_mgroup) on <var_mgroup:nullable MGroup(MGroup)> */
+var36 = var_mgroup->attrs[COLOR_mproject__MGroup___filepath].val; /* _filepath on <var_mgroup:nullable MGroup(MGroup)> */
+var34 = var36;
+RET_LABEL35:(void)0;
+}
+}
+{
+{ /* Inline mproject#MGroup#name (var_mgroup) on <var_mgroup:nullable MGroup(MGroup)> */
+var39 = var_mgroup->attrs[COLOR_mproject__MGroup___name].val; /* _name on <var_mgroup:nullable MGroup(MGroup)> */
+if (unlikely(var39 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "src/model/mproject.nit", 56);
+show_backtrace(1);
+}
+var37 = var39;
+RET_LABEL38:(void)0;
+}
+}
+if (varonce40) {
+var41 = varonce40;
+} else {
+var42 = ".nit";
+var43 = 4;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
+}
+{
+var45 = string__FlatString___43d(var37, var41);
+}
+if (var34 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 423);
+show_backtrace(1);
+} else {
+var46 = file__String__join_path(var34, var45);
+}
+var_owner_path = var46;
+{
+var47 = file__String__file_exists(var_owner_path);
+}
+if (var47){
+var_candidate = var_owner_path;
+} else {
+}
+} else {
+}
+} else {
+}
+var48 = NULL;
+if (var_candidate == NULL) {
+var49 = 1; /* is null */
+} else {
+var49 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var50 = string__FlatString___61d_61d(var_candidate, var48);
+var49 = var50;
+}
+if (var49){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var53 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var53 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var51 = var53;
+RET_LABEL52:(void)0;
+}
+}
+var54 = NULL;
+if (varonce55) {
+var56 = varonce55;
+} else {
+var57 = "Error: cannot find module `";
+var58 = 27;
+var59 = string__NativeString__to_s_with_length(var57, var58);
+var56 = var59;
+varonce55 = var56;
+}
+if (varonce60) {
+var61 = varonce60;
+} else {
+var62 = "`.";
+var63 = 2;
+var64 = string__NativeString__to_s_with_length(var62, var63);
+var61 = var64;
+varonce60 = var61;
+}
+var65 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var65 = array_instance Array[Object] */
+var66 = 3;
+var67 = NEW_array__NativeArray(var66, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var67)->values[0] = (val*) var56;
+((struct instance_array__NativeArray*)var67)->values[1] = (val*) var_path;
+((struct instance_array__NativeArray*)var67)->values[2] = (val*) var61;
+{
+((void (*)(val*, val*, long))(var65->class->vft[COLOR_array__Array__with_native]))(var65, var67, var66) /* with_native on <var65:Array[Object]>*/;
+}
+}
+{
+var68 = ((val* (*)(val*))(var65->class->vft[COLOR_string__Object__to_s]))(var65) /* to_s on <var65:Array[Object]>*/;
+}
+{
+toolcontext__ToolContext__error(var51, var54, var68); /* Direct call toolcontext#ToolContext#error on <var51:ToolContext>*/
+}
+var69 = NULL;
+var = var69;
+goto RET_LABEL;
+} else {
+}
+var_path = var_candidate;
+} else {
+}
+if (varonce70) {
+var71 = varonce70;
+} else {
+var72 = ".nit";
+var73 = 4;
+var74 = string__NativeString__to_s_with_length(var72, var73);
+var71 = var74;
+varonce70 = var71;
+}
+{
+var75 = file__String__basename(var_path, var71);
+}
+var_pn = var75;
+{
+var76 = modelbuilder__ModelBuilder__module_absolute_path(self, var_path);
+}
+var_rp = var76;
+{
+{ /* Inline modelbuilder#ModelBuilder#identified_files (self) on <self:ModelBuilder> */
+var79 = self->attrs[COLOR_modelbuilder__ModelBuilder___identified_files].val; /* _identified_files on <self:ModelBuilder> */
+if (unlikely(var79 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _identified_files");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 405);
+show_backtrace(1);
+}
+var77 = var79;
+RET_LABEL78:(void)0;
+}
+}
+{
+var80 = abstract_collection__MapRead__has_key(var77, var_rp);
+}
+if (var80){
+{
+{ /* Inline modelbuilder#ModelBuilder#identified_files (self) on <self:ModelBuilder> */
+var83 = self->attrs[COLOR_modelbuilder__ModelBuilder___identified_files].val; /* _identified_files on <self:ModelBuilder> */
+if (unlikely(var83 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _identified_files");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 405);
+show_backtrace(1);
+}
+var81 = var83;
+RET_LABEL82:(void)0;
+}
+}
+{
+var84 = hash_collection__HashMap___91d_93d(var81, var_rp);
+}
+var = var84;
+goto RET_LABEL;
+} else {
+}
+if (varonce85) {
+var86 = varonce85;
+} else {
+var87 = "..";
+var88 = 2;
+var89 = string__NativeString__to_s_with_length(var87, var88);
+var86 = var89;
+varonce85 = var86;
+}
+{
+var90 = file__String__join_path(var_path, var86);
+}
+{
+var91 = file__String__simplify_path(var90);
+}
+var_mgrouppath = var91;
+{
+var92 = modelbuilder__ModelBuilder__get_mgroup(self, var_mgrouppath);
+}
+var_mgroup93 = var92;
+var94 = NULL;
+if (var_mgroup93 == NULL) {
+var95 = 1; /* is null */
+} else {
+var95 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mgroup93,var94) on <var_mgroup93:nullable MGroup> */
+var_other98 = var94;
+{
+{ /* Inline kernel#Object#is_same_instance (var_mgroup93,var_other98) on <var_mgroup93:nullable MGroup(MGroup)> */
+var101 = var_mgroup93 == var_other98;
+var99 = var101;
+goto RET_LABEL100;
+RET_LABEL100:(void)0;
+}
+}
+var96 = var99;
+goto RET_LABEL97;
+RET_LABEL97:(void)0;
+}
+var95 = var96;
+}
+if (var95){
+var102 = NEW_mproject__MProject(&type_mproject__MProject);
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var105 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var105 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 98);
+show_backtrace(1);
+}
+var103 = var105;
+RET_LABEL104:(void)0;
+}
+}
+{
+mproject__MProject__init(var102, var_pn, var103); /* Direct call mproject#MProject#init on <var102:MProject>*/
+}
+var_mproject = var102;
+var106 = NEW_mproject__MGroup(&type_mproject__MGroup);
+var107 = NULL;
+{
+mproject__MGroup__init(var106, var_pn, var_mproject, var107); /* Direct call mproject#MGroup#init on <var106:MGroup>*/
+}
+var_mgroup93 = var106;
+{
+{ /* Inline mproject#MGroup#filepath= (var_mgroup93,var_path) on <var_mgroup93:nullable MGroup(MGroup)> */
+var_mgroup93->attrs[COLOR_mproject__MGroup___filepath].val = var_path; /* _filepath on <var_mgroup93:nullable MGroup(MGroup)> */
+RET_LABEL108:(void)0;
+}
+}
+{
+{ /* Inline mproject#MProject#root= (var_mproject,var_mgroup93) on <var_mproject:MProject> */
+var_mproject->attrs[COLOR_mproject__MProject___root].val = var_mgroup93; /* _root on <var_mproject:MProject> */
+RET_LABEL109:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var112 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var112 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var110 = var112;
+RET_LABEL111:(void)0;
+}
+}
+if (varonce113) {
+var114 = varonce113;
+} else {
+var115 = "found project `";
+var116 = 15;
+var117 = string__NativeString__to_s_with_length(var115, var116);
+var114 = var117;
+varonce113 = var114;
+}
+if (varonce118) {
+var119 = varonce118;
+} else {
+var120 = "` at ";
+var121 = 5;
+var122 = string__NativeString__to_s_with_length(var120, var121);
+var119 = var122;
+varonce118 = var119;
+}
+var123 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var123 = array_instance Array[Object] */
+var124 = 4;
+var125 = NEW_array__NativeArray(var124, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var125)->values[0] = (val*) var114;
+((struct instance_array__NativeArray*)var125)->values[1] = (val*) var_pn;
+((struct instance_array__NativeArray*)var125)->values[2] = (val*) var119;
+((struct instance_array__NativeArray*)var125)->values[3] = (val*) var_path;
+{
+((void (*)(val*, val*, long))(var123->class->vft[COLOR_array__Array__with_native]))(var123, var125, var124) /* with_native on <var123:Array[Object]>*/;
+}
+}
+{
+var126 = ((val* (*)(val*))(var123->class->vft[COLOR_string__Object__to_s]))(var123) /* to_s on <var123:Array[Object]>*/;
+}
+var127 = 2;
+{
+toolcontext__ToolContext__info(var110, var126, var127); /* Direct call toolcontext#ToolContext#info on <var110:ToolContext>*/
+}
+} else {
+}
+var128 = NEW_modelbuilder__ModulePath(&type_modelbuilder__ModulePath);
+{
+{ /* Inline modelbuilder#ModulePath#init (var128,var_pn,var_path,var_mgroup93) on <var128:ModulePath> */
+var128->attrs[COLOR_modelbuilder__ModulePath___name].val = var_pn; /* _name on <var128:ModulePath> */
+var128->attrs[COLOR_modelbuilder__ModulePath___filepath].val = var_path; /* _filepath on <var128:ModulePath> */
+var128->attrs[COLOR_modelbuilder__ModulePath___mgroup].val = var_mgroup93; /* _mgroup on <var128:ModulePath> */
+RET_LABEL129:(void)0;
+}
+}
+var_res130 = var128;
+{
+{ /* Inline modelbuilder#MGroup#module_paths (var_mgroup93) on <var_mgroup93:nullable MGroup(MGroup)> */
+var133 = var_mgroup93->attrs[COLOR_modelbuilder__MGroup___module_paths].val; /* _module_paths on <var_mgroup93:nullable MGroup(MGroup)> */
+if (unlikely(var133 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _module_paths");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 746);
+show_backtrace(1);
+}
+var131 = var133;
+RET_LABEL132:(void)0;
+}
+}
+{
+array__Array__add(var131, var_res130); /* Direct call array#Array#add on <var131:Array[ModulePath]>*/
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#identified_files (self) on <self:ModelBuilder> */
+var136 = self->attrs[COLOR_modelbuilder__ModelBuilder___identified_files].val; /* _identified_files on <self:ModelBuilder> */
+if (unlikely(var136 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _identified_files");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 405);
+show_backtrace(1);
+}
+var134 = var136;
+RET_LABEL135:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var134, var_rp, var_res130); /* Direct call hash_collection#HashMap#[]= on <var134:HashMap[String, nullable ModulePath]>*/
+}
+var = var_res130;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#identify_file for (self: Object, String): nullable ModulePath */
+val* VIRTUAL_modelbuilder__ModelBuilder__identify_file(val* self, val* p0) {
+val* var /* : nullable ModulePath */;
+val* var1 /* : nullable ModulePath */;
+var1 = modelbuilder__ModelBuilder__identify_file(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#mgroups for (self: ModelBuilder): HashMap[String, nullable MGroup] */
+val* modelbuilder__ModelBuilder__mgroups(val* self) {
+val* var /* : HashMap[String, nullable MGroup] */;
+val* var1 /* : HashMap[String, nullable MGroup] */;
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___mgroups].val; /* _mgroups on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroups");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 460);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#mgroups for (self: Object): HashMap[String, nullable MGroup] */
+val* VIRTUAL_modelbuilder__ModelBuilder__mgroups(val* self) {
+val* var /* : HashMap[String, nullable MGroup] */;
+val* var1 /* : HashMap[String, nullable MGroup] */;
+val* var3 /* : HashMap[String, nullable MGroup] */;
+{ /* Inline modelbuilder#ModelBuilder#mgroups (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___mgroups].val; /* _mgroups on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroups");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 460);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#get_mgroup for (self: ModelBuilder, String): nullable MGroup */
+val* modelbuilder__ModelBuilder__get_mgroup(val* self, val* p0) {
+val* var /* : nullable MGroup */;
+val* var_dirpath /* var dirpath: String */;
+val* var1 /* : String */;
+val* var_rdp /* var rdp: String */;
+val* var2 /* : HashMap[String, nullable MGroup] */;
+val* var4 /* : HashMap[String, nullable MGroup] */;
+short int var5 /* : Bool */;
+val* var6 /* : HashMap[String, nullable MGroup] */;
+val* var8 /* : HashMap[String, nullable MGroup] */;
+val* var9 /* : nullable Object */;
+static val* varonce;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+long var12 /* : Int */;
+val* var13 /* : FlatString */;
+val* var14 /* : String */;
+val* var_pn /* var pn: String */;
+static val* varonce15;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+long var18 /* : Int */;
+val* var19 /* : FlatString */;
+val* var20 /* : String */;
+val* var21 /* : String */;
+val* var22 /* : String */;
+val* var_mp /* var mp: String */;
+val* var_dirpath2 /* var dirpath2: String */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+static val* varonce25;
+val* var26 /* : String */;
+char* var27 /* : NativeString */;
+long var28 /* : Int */;
+val* var29 /* : FlatString */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+val* var32 /* : String */;
+static val* varonce33;
+val* var34 /* : String */;
+char* var35 /* : NativeString */;
+long var36 /* : Int */;
+val* var37 /* : FlatString */;
+val* var38 /* : String */;
+val* var39 /* : null */;
+static val* varonce40;
+val* var41 /* : String */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : FlatString */;
+val* var45 /* : String */;
+val* var46 /* : String */;
+val* var_parentpath /* var parentpath: String */;
+val* var47 /* : nullable MGroup */;
+val* var_parent /* var parent: nullable MGroup */;
+val* var48 /* : null */;
+short int var49 /* : Bool */;
+short int var50 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var52 /* : Bool */;
+short int var54 /* : Bool */;
+val* var55 /* : MProject */;
+val* var56 /* : Model */;
+val* var58 /* : Model */;
+val* var_mproject /* var mproject: MProject */;
+val* var59 /* : MGroup */;
+val* var60 /* : null */;
+val* var_mgroup /* var mgroup: nullable Object */;
+val* var62 /* : ToolContext */;
+val* var64 /* : ToolContext */;
+static val* varonce65;
+val* var66 /* : String */;
+char* var67 /* : NativeString */;
+long var68 /* : Int */;
+val* var69 /* : FlatString */;
+static val* varonce70;
+val* var71 /* : String */;
+char* var72 /* : NativeString */;
+long var73 /* : Int */;
+val* var74 /* : FlatString */;
+val* var75 /* : Array[Object] */;
+long var76 /* : Int */;
+val* var77 /* : NativeArray[Object] */;
+val* var78 /* : String */;
+long var79 /* : Int */;
+val* var80 /* : MGroup */;
+val* var81 /* : MProject */;
+val* var83 /* : MProject */;
+val* var84 /* : ToolContext */;
+val* var86 /* : ToolContext */;
+static val* varonce87;
+val* var88 /* : String */;
+char* var89 /* : NativeString */;
+long var90 /* : Int */;
+val* var91 /* : FlatString */;
+val* var92 /* : String */;
+static val* varonce93;
+val* var94 /* : String */;
+char* var95 /* : NativeString */;
+long var96 /* : Int */;
+val* var97 /* : FlatString */;
+val* var98 /* : Array[Object] */;
+long var99 /* : Int */;
+val* var100 /* : NativeArray[Object] */;
+val* var101 /* : String */;
+long var102 /* : Int */;
+static val* varonce103;
+val* var104 /* : String */;
+char* var105 /* : NativeString */;
+long var106 /* : Int */;
+val* var107 /* : FlatString */;
+val* var108 /* : String */;
+val* var_readme /* var readme: String */;
+short int var109 /* : Bool */;
+short int var110 /* : Bool */;
+static val* varonce111;
+val* var112 /* : String */;
+char* var113 /* : NativeString */;
+long var114 /* : Int */;
+val* var115 /* : FlatString */;
+val* var116 /* : String */;
+short int var117 /* : Bool */;
+val* var118 /* : MDoc */;
+val* var_mdoc /* var mdoc: MDoc */;
+val* var120 /* : IFStream */;
+val* var_s /* var s: IFStream */;
+short int var121 /* : Bool */;
+short int var122 /* : Bool */;
+val* var123 /* : Array[String] */;
+val* var125 /* : Array[String] */;
+val* var126 /* : String */;
+val* var130 /* : HashMap[String, nullable MGroup] */;
+val* var132 /* : HashMap[String, nullable MGroup] */;
+var_dirpath = p0;
+{
+var1 = modelbuilder__ModelBuilder__module_absolute_path(self, var_dirpath);
+}
+var_rdp = var1;
+{
+{ /* Inline modelbuilder#ModelBuilder#mgroups (self) on <self:ModelBuilder> */
+var4 = self->attrs[COLOR_modelbuilder__ModelBuilder___mgroups].val; /* _mgroups on <self:ModelBuilder> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroups");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 460);
+show_backtrace(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+var5 = abstract_collection__MapRead__has_key(var2, var_rdp);
+}
+if (var5){
+{
+{ /* Inline modelbuilder#ModelBuilder#mgroups (self) on <self:ModelBuilder> */
+var8 = self->attrs[COLOR_modelbuilder__ModelBuilder___mgroups].val; /* _mgroups on <self:ModelBuilder> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroups");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 460);
+show_backtrace(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+var9 = hash_collection__HashMap___91d_93d(var6, var_rdp);
+}
+var = var9;
+goto RET_LABEL;
+} else {
+}
+if (varonce) {
+var10 = varonce;
+} else {
+var11 = ".nit";
+var12 = 4;
+var13 = string__NativeString__to_s_with_length(var11, var12);
+var10 = var13;
+varonce = var10;
+}
+{
+var14 = file__String__basename(var_rdp, var10);
+}
+var_pn = var14;
+if (varonce15) {
+var16 = varonce15;
+} else {
+var17 = ".nit";
+var18 = 4;
+var19 = string__NativeString__to_s_with_length(var17, var18);
+var16 = var19;
+varonce15 = var16;
+}
+{
+var20 = string__FlatString___43d(var_pn, var16);
+}
+{
+var21 = file__String__join_path(var_dirpath, var20);
+}
+{
+var22 = file__String__simplify_path(var21);
+}
+var_mp = var22;
+var_dirpath2 = var_dirpath;
+{
+var23 = file__String__file_exists(var_mp);
+}
+var24 = !var23;
+if (var24){
+if (varonce25) {
+var26 = varonce25;
+} else {
+var27 = "src";
+var28 = 3;
+var29 = string__NativeString__to_s_with_length(var27, var28);
+var26 = var29;
+varonce25 = var26;
+}
+{
+var31 = string__FlatString___61d_61d(var_pn, var26);
+var30 = var31;
+}
+if (var30){
+{
+var32 = file__String__dirname(var_rdp);
+}
+var_dirpath2 = var32;
+if (varonce33) {
+var34 = varonce33;
+} else {
+var35 = "";
+var36 = 0;
+var37 = string__NativeString__to_s_with_length(var35, var36);
+var34 = var37;
+varonce33 = var34;
+}
+{
+var38 = file__String__basename(var_dirpath2, var34);
+}
+var_pn = var38;
+} else {
+var39 = NULL;
+var = var39;
+goto RET_LABEL;
+}
+} else {
+}
+if (varonce40) {
+var41 = varonce40;
+} else {
+var42 = "..";
+var43 = 2;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
+}
+{
+var45 = file__String__join_path(var_dirpath, var41);
+}
+{
+var46 = file__String__simplify_path(var45);
+}
+var_parentpath = var46;
+{
+var47 = modelbuilder__ModelBuilder__get_mgroup(self, var_parentpath);
+}
+var_parent = var47;
+var48 = NULL;
+if (var_parent == NULL) {
+var49 = 1; /* is null */
+} else {
+var49 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_parent,var48) on <var_parent:nullable MGroup> */
+var_other = var48;
+{
+{ /* Inline kernel#Object#is_same_instance (var_parent,var_other) on <var_parent:nullable MGroup(MGroup)> */
+var54 = var_parent == var_other;
+var52 = var54;
+goto RET_LABEL53;
+RET_LABEL53:(void)0;
+}
+}
+var50 = var52;
+goto RET_LABEL51;
+RET_LABEL51:(void)0;
+}
+var49 = var50;
+}
+if (var49){
+var55 = NEW_mproject__MProject(&type_mproject__MProject);
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var58 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var58 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 98);
+show_backtrace(1);
+}
+var56 = var58;
+RET_LABEL57:(void)0;
+}
+}
+{
+mproject__MProject__init(var55, var_pn, var56); /* Direct call mproject#MProject#init on <var55:MProject>*/
+}
+var_mproject = var55;
+var59 = NEW_mproject__MGroup(&type_mproject__MGroup);
+var60 = NULL;
+{
+mproject__MGroup__init(var59, var_pn, var_mproject, var60); /* Direct call mproject#MGroup#init on <var59:MGroup>*/
+}
+var_mgroup = var59;
+{
+{ /* Inline mproject#MProject#root= (var_mproject,var_mgroup) on <var_mproject:MProject> */
+var_mproject->attrs[COLOR_mproject__MProject___root].val = var_mgroup; /* _root on <var_mproject:MProject> */
+RET_LABEL61:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var64 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var64 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var62 = var64;
+RET_LABEL63:(void)0;
+}
+}
+if (varonce65) {
+var66 = varonce65;
+} else {
+var67 = "found project `";
+var68 = 15;
+var69 = string__NativeString__to_s_with_length(var67, var68);
+var66 = var69;
+varonce65 = var66;
+}
+if (varonce70) {
+var71 = varonce70;
+} else {
+var72 = "` at ";
+var73 = 5;
+var74 = string__NativeString__to_s_with_length(var72, var73);
+var71 = var74;
+varonce70 = var71;
+}
+var75 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var75 = array_instance Array[Object] */
+var76 = 4;
+var77 = NEW_array__NativeArray(var76, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var77)->values[0] = (val*) var66;
+((struct instance_array__NativeArray*)var77)->values[1] = (val*) var_mproject;
+((struct instance_array__NativeArray*)var77)->values[2] = (val*) var71;
+((struct instance_array__NativeArray*)var77)->values[3] = (val*) var_dirpath;
+{
+((void (*)(val*, val*, long))(var75->class->vft[COLOR_array__Array__with_native]))(var75, var77, var76) /* with_native on <var75:Array[Object]>*/;
+}
+}
+{
+var78 = ((val* (*)(val*))(var75->class->vft[COLOR_string__Object__to_s]))(var75) /* to_s on <var75:Array[Object]>*/;
+}
+var79 = 2;
+{
+toolcontext__ToolContext__info(var62, var78, var79); /* Direct call toolcontext#ToolContext#info on <var62:ToolContext>*/
+}
+} else {
+var80 = NEW_mproject__MGroup(&type_mproject__MGroup);
+{
+{ /* Inline mproject#MGroup#mproject (var_parent) on <var_parent:nullable MGroup(MGroup)> */
+var83 = var_parent->attrs[COLOR_mproject__MGroup___mproject].val; /* _mproject on <var_parent:nullable MGroup(MGroup)> */
+if (unlikely(var83 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproject");
+PRINT_ERROR(" (%s:%d)\n", "src/model/mproject.nit", 60);
+show_backtrace(1);
+}
+var81 = var83;
+RET_LABEL82:(void)0;
+}
+}
+{
+mproject__MGroup__init(var80, var_pn, var81, var_parent); /* Direct call mproject#MGroup#init on <var80:MGroup>*/
+}
+var_mgroup = var80;
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var86 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var86 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var84 = var86;
+RET_LABEL85:(void)0;
+}
+}
+if (varonce87) {
+var88 = varonce87;
+} else {
+var89 = "found sub group `";
+var90 = 17;
+var91 = string__NativeString__to_s_with_length(var89, var90);
+var88 = var91;
+varonce87 = var88;
+}
+{
+var92 = mproject__MGroup__full_name(var_mgroup);
+}
+if (varonce93) {
+var94 = varonce93;
+} else {
+var95 = "` at ";
+var96 = 5;
+var97 = string__NativeString__to_s_with_length(var95, var96);
+var94 = var97;
+varonce93 = var94;
+}
+var98 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var98 = array_instance Array[Object] */
+var99 = 4;
+var100 = NEW_array__NativeArray(var99, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var100)->values[0] = (val*) var88;
+((struct instance_array__NativeArray*)var100)->values[1] = (val*) var92;
+((struct instance_array__NativeArray*)var100)->values[2] = (val*) var94;
+((struct instance_array__NativeArray*)var100)->values[3] = (val*) var_dirpath;
+{
+((void (*)(val*, val*, long))(var98->class->vft[COLOR_array__Array__with_native]))(var98, var100, var99) /* with_native on <var98:Array[Object]>*/;
+}
+}
+{
+var101 = ((val* (*)(val*))(var98->class->vft[COLOR_string__Object__to_s]))(var98) /* to_s on <var98:Array[Object]>*/;
+}
+var102 = 2;
+{
+toolcontext__ToolContext__info(var84, var101, var102); /* Direct call toolcontext#ToolContext#info on <var84:ToolContext>*/
+}
+}
+if (varonce103) {
+var104 = varonce103;
+} else {
+var105 = "README.md";
+var106 = 9;
+var107 = string__NativeString__to_s_with_length(var105, var106);
+var104 = var107;
+varonce103 = var104;
+}
+{
+var108 = file__String__join_path(var_dirpath2, var104);
+}
+var_readme = var108;
+{
+var109 = file__String__file_exists(var_readme);
+}
+var110 = !var109;
+if (var110){
+if (varonce111) {
+var112 = varonce111;
+} else {
+var113 = "README";
+var114 = 6;
+var115 = string__NativeString__to_s_with_length(var113, var114);
+var112 = var115;
+varonce111 = var112;
+}
+{
+var116 = file__String__join_path(var_dirpath2, var112);
+}
+var_readme = var116;
+} else {
+}
+{
+var117 = file__String__file_exists(var_readme);
+}
+if (var117){
+var118 = NEW_mdoc__MDoc(&type_mdoc__MDoc);
+{
+{ /* Inline mdoc#MDoc#init (var118) on <var118:MDoc> */
+RET_LABEL119:(void)0;
+}
+}
+var_mdoc = var118;
+var120 = NEW_file__IFStream(&type_file__IFStream);
+{
+file__IFStream__open(var120, var_readme); /* Direct call file#IFStream#open on <var120:IFStream>*/
+}
+var_s = var120;
+for(;;) {
+{
+var121 = stream__BufferedIStream__eof(var_s);
+}
+var122 = !var121;
+if (!var122) break;
+{
+{ /* Inline mdoc#MDoc#content (var_mdoc) on <var_mdoc:MDoc> */
+var125 = var_mdoc->attrs[COLOR_mdoc__MDoc___content].val; /* _content on <var_mdoc:MDoc> */
+if (unlikely(var125 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _content");
+PRINT_ERROR(" (%s:%d)\n", "src/model/mdoc.nit", 22);
+show_backtrace(1);
+}
+var123 = var125;
+RET_LABEL124:(void)0;
+}
+}
+{
+var126 = stream__IStream__read_line(var_s);
+}
+{
+array__Array__add(var123, var126); /* Direct call array#Array#add on <var123:Array[String]>*/
+}
+CONTINUE_label: (void)0;
+}
+BREAK_label: (void)0;
+{
+{ /* Inline mdoc#MEntity#mdoc= (var_mgroup,var_mdoc) on <var_mgroup:nullable Object(MGroup)> */
+var_mgroup->attrs[COLOR_mdoc__MEntity___mdoc].val = var_mdoc; /* _mdoc on <var_mgroup:nullable Object(MGroup)> */
+RET_LABEL127:(void)0;
+}
+}
+{
+{ /* Inline mdoc#MDoc#original_mentity= (var_mdoc,var_mgroup) on <var_mdoc:MDoc> */
+var_mdoc->attrs[COLOR_mdoc__MDoc___original_mentity].val = var_mgroup; /* _original_mentity on <var_mdoc:MDoc> */
+RET_LABEL128:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline mproject#MGroup#filepath= (var_mgroup,var_dirpath) on <var_mgroup:nullable Object(MGroup)> */
+var_mgroup->attrs[COLOR_mproject__MGroup___filepath].val = var_dirpath; /* _filepath on <var_mgroup:nullable Object(MGroup)> */
+RET_LABEL129:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#mgroups (self) on <self:ModelBuilder> */
+var132 = self->attrs[COLOR_modelbuilder__ModelBuilder___mgroups].val; /* _mgroups on <self:ModelBuilder> */
+if (unlikely(var132 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroups");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 460);
+show_backtrace(1);
+}
+var130 = var132;
+RET_LABEL131:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var130, var_rdp, var_mgroup); /* Direct call hash_collection#HashMap#[]= on <var130:HashMap[String, nullable MGroup]>*/
+}
+var = var_mgroup;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#get_mgroup for (self: Object, String): nullable MGroup */
+val* VIRTUAL_modelbuilder__ModelBuilder__get_mgroup(val* self, val* p0) {
+val* var /* : nullable MGroup */;
+val* var1 /* : nullable MGroup */;
+var1 = modelbuilder__ModelBuilder__get_mgroup(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#module_absolute_path for (self: ModelBuilder, String): String */
+val* modelbuilder__ModelBuilder__module_absolute_path(val* self, val* p0) {
+val* var /* : String */;
+val* var_path /* var path: String */;
+val* var1 /* : String */;
+val* var2 /* : String */;
+val* var3 /* : String */;
+var_path = p0;
+{
+var1 = file__Object__getcwd(self);
+}
+{
+var2 = file__String__join_path(var1, var_path);
+}
+{
+var3 = file__String__simplify_path(var2);
+}
+var = var3;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#module_absolute_path for (self: Object, String): String */
+val* VIRTUAL_modelbuilder__ModelBuilder__module_absolute_path(val* self, val* p0) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = modelbuilder__ModelBuilder__module_absolute_path(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#load_module_ast for (self: ModelBuilder, String): nullable AModule */
+val* modelbuilder__ModelBuilder__load_module_ast(val* self, val* p0) {
+val* var /* : nullable AModule */;
+val* var_filename /* var filename: String */;
+val* var1 /* : nullable String */;
+static val* varonce;
+val* var2 /* : String */;
+char* var3 /* : NativeString */;
+long var4 /* : Int */;
+val* var5 /* : FlatString */;
+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 var11 /* : Bool */;
+val* var12 /* : ToolContext */;
+val* var14 /* : ToolContext */;
+val* var15 /* : null */;
+static val* varonce16;
+val* var17 /* : String */;
+char* var18 /* : NativeString */;
+long var19 /* : Int */;
+val* var20 /* : FlatString */;
+static val* varonce21;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : FlatString */;
+val* var26 /* : Array[Object] */;
+long var27 /* : Int */;
+val* var28 /* : NativeArray[Object] */;
+val* var29 /* : String */;
+val* var30 /* : null */;
+short int var31 /* : Bool */;
+short int var32 /* : Bool */;
+val* var33 /* : ToolContext */;
+val* var35 /* : ToolContext */;
+val* var36 /* : null */;
+static val* varonce37;
+val* var38 /* : String */;
+char* var39 /* : NativeString */;
+long var40 /* : Int */;
+val* var41 /* : FlatString */;
+static val* varonce42;
+val* var43 /* : String */;
+char* var44 /* : NativeString */;
+long var45 /* : Int */;
+val* var46 /* : FlatString */;
+val* var47 /* : Array[Object] */;
+long var48 /* : Int */;
+val* var49 /* : NativeArray[Object] */;
+val* var50 /* : String */;
+val* var51 /* : null */;
+val* var52 /* : ToolContext */;
+val* var54 /* : ToolContext */;
+static val* varonce55;
+val* var56 /* : String */;
+char* var57 /* : NativeString */;
+long var58 /* : Int */;
+val* var59 /* : FlatString */;
+val* var60 /* : Array[Object] */;
+long var61 /* : Int */;
+val* var62 /* : NativeArray[Object] */;
+val* var63 /* : String */;
+long var64 /* : Int */;
+val* var65 /* : IFStream */;
+val* var_file /* var file: IFStream */;
+val* var66 /* : Lexer */;
+val* var67 /* : SourceFile */;
+val* var_lexer /* var lexer: Lexer */;
+val* var68 /* : Parser */;
+val* var_parser /* var parser: Parser */;
+val* var69 /* : Start */;
+val* var_tree /* var tree: Start */;
+static val* varonce70;
+val* var71 /* : String */;
+char* var72 /* : NativeString */;
+long var73 /* : Int */;
+val* var74 /* : FlatString */;
+val* var75 /* : String */;
+val* var_mod_name /* var mod_name: String */;
+val* var76 /* : nullable AModule */;
+val* var_nmodule /* var nmodule: nullable AModule */;
+val* var77 /* : null */;
+short int var78 /* : Bool */;
+short int var79 /* : Bool */;
+val* var_other81 /* var other: nullable Object */;
+short int var82 /* : Bool */;
+short int var84 /* : Bool */;
+val* var85 /* : EOF */;
+val* var_neof /* var neof: EOF */;
+short int var86 /* : Bool */;
+int cltype;
+int idtype;
+val* var87 /* : String */;
+val* var89 /* : String */;
+val* var90 /* : null */;
+var_filename = p0;
+{
+var1 = file__String__file_extension(var_filename);
+}
+if (varonce) {
+var2 = varonce;
+} else {
+var3 = "nit";
+var4 = 3;
+var5 = string__NativeString__to_s_with_length(var3, var4);
+var2 = var5;
+varonce = var2;
+}
+if (var1 == NULL) {
+var6 = 1; /* <var2:String> cannot be null */
+} else {
+{ /* Inline kernel#Object#!= (var1,var2) on <var1:nullable String> */
+var_other = var2;
+{
+var10 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___61d_61d]))(var1, var_other) /* == on <var1:nullable String(String)>*/;
+var9 = var10;
+}
+var11 = !var9;
+var7 = var11;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+var6 = var7;
+}
+if (var6){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var14 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var12 = var14;
+RET_LABEL13:(void)0;
+}
+}
+var15 = NULL;
+if (varonce16) {
+var17 = varonce16;
+} else {
+var18 = "Error: file ";
+var19 = 12;
+var20 = string__NativeString__to_s_with_length(var18, var19);
+var17 = var20;
+varonce16 = var17;
+}
+if (varonce21) {
+var22 = varonce21;
+} else {
+var23 = " is not a valid nit module.";
+var24 = 27;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce21 = var22;
+}
+var26 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var26 = array_instance Array[Object] */
+var27 = 3;
+var28 = NEW_array__NativeArray(var27, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var28)->values[0] = (val*) var17;
+((struct instance_array__NativeArray*)var28)->values[1] = (val*) var_filename;
+((struct instance_array__NativeArray*)var28)->values[2] = (val*) var22;
+{
+((void (*)(val*, val*, long))(var26->class->vft[COLOR_array__Array__with_native]))(var26, var28, var27) /* with_native on <var26:Array[Object]>*/;
+}
+}
+{
+var29 = ((val* (*)(val*))(var26->class->vft[COLOR_string__Object__to_s]))(var26) /* to_s on <var26:Array[Object]>*/;
+}
+{
+toolcontext__ToolContext__error(var12, var15, var29); /* Direct call toolcontext#ToolContext#error on <var12:ToolContext>*/
+}
+var30 = NULL;
+var = var30;
+goto RET_LABEL;
+} else {
+}
+{
+var31 = file__String__file_exists(var_filename);
+}
+var32 = !var31;
+if (var32){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var35 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var35 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var33 = var35;
+RET_LABEL34:(void)0;
+}
+}
+var36 = NULL;
+if (varonce37) {
+var38 = varonce37;
+} else {
+var39 = "Error: file ";
+var40 = 12;
+var41 = string__NativeString__to_s_with_length(var39, var40);
+var38 = var41;
+varonce37 = var38;
+}
+if (varonce42) {
+var43 = varonce42;
+} else {
+var44 = " not found.";
+var45 = 11;
+var46 = string__NativeString__to_s_with_length(var44, var45);
+var43 = var46;
+varonce42 = var43;
+}
+var47 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var47 = array_instance Array[Object] */
+var48 = 3;
+var49 = NEW_array__NativeArray(var48, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var49)->values[0] = (val*) var38;
+((struct instance_array__NativeArray*)var49)->values[1] = (val*) var_filename;
+((struct instance_array__NativeArray*)var49)->values[2] = (val*) var43;
+{
+((void (*)(val*, val*, long))(var47->class->vft[COLOR_array__Array__with_native]))(var47, var49, var48) /* with_native on <var47:Array[Object]>*/;
+}
+}
+{
+var50 = ((val* (*)(val*))(var47->class->vft[COLOR_string__Object__to_s]))(var47) /* to_s on <var47:Array[Object]>*/;
+}
+{
+toolcontext__ToolContext__error(var33, var36, var50); /* Direct call toolcontext#ToolContext#error on <var33:ToolContext>*/
+}
+var51 = NULL;
+var = var51;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var54 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var54 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "src/modelbuilder.nit", 101);
+show_backtrace(1);
+}
+var52 = var54;
+RET_LABEL53:(void)0;
+}
+}
+if (varonce55) {
+var56 = varonce55;
+} else {
+var57 = "load module ";
+var58 = 12;
+var59 = string__NativeString__to_s_with_length(var57, var58);
+var56 = var59;
+varonce55 = var56;
+}
+var60 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var60 = array_instance Array[Object] */
+var61 = 2;
+var62 = NEW_array__NativeArray(var61, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var62)->values[0] = (val*) var56;
+((struct instance_array__NativeArray*)var62)->values[1] = (val*) var_filename;
+{
+((void (*)(val*, val*, long))(var60->class->vft[COLOR_array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
+}
+}
+{
+var63 = ((val* (*)(val*))(var60->class->vft[COLOR_string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
+}
+var64 = 2;
+{
+toolcontext__ToolContext__info(var52, var63, var64); /* Direct call toolcontext#ToolContext#info on <var52:ToolContext>*/
+}
+var65 = NEW_file__IFStream(&type_file__IFStream);
+{
+file__IFStream__open(var65, var_filename); /* Direct call file#IFStream#open on <var65:IFStream>*/
+}
+var_file = var65;
+var66 = NEW_lexer_work__Lexer(&type_lexer_work__Lexer);
+var67 = NEW_location__SourceFile(&type_location__SourceFile);
+{
+location__SourceFile__init(var67, var_filename, var_file); /* Direct call location#SourceFile#init on <var67:SourceFile>*/
+}
+{
+lexer_work__Lexer__init(var66, var67); /* Direct call lexer_work#Lexer#init on <var66:Lexer>*/
+}
+var_lexer = var66;
+var68 = NEW_parser_work__Parser(&type_parser_work__Parser);
+{
+parser_work__Parser__init(var68, var_lexer); /* Direct call parser_work#Parser#init on <var68:Parser>*/
+}
+var_parser = var68;
+{
+var69 = parser_work__Parser__parse(var_parser);
+}
+var_tree = var69;
+{
+file__IFStream__close(var_file); /* Direct call file#IFStream#close on <var_file:IFStream>*/
+}
+if (varonce70) {
+var71 = varonce70;
+} else {
+var72 = ".nit";
+var73 = 4;
+var74 = string__NativeString__to_s_with_length(var72, var73);
+var71 = var74;
+varonce70 = var71;
+}
+{
+var75 = file__String__basename(var_filename, var71);
+}
+var_mod_name = var75;
+{
+var76 = parser_nodes__Start__n_base(var_tree);
+}
+var_nmodule = var76;
+var77 = NULL;
+if (var_nmodule == NULL) {
+var78 = 1; /* is null */
+} else {
+var78 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_nmodule,var77) on <var_nmodule:nullable AModule> */
+var_other81 = var77;
+{
+{ /* Inline kernel#Object#is_same_instance (var_nmodule,var_other81) on <var_nmodule:nullable AModule(AModule)> */
+var84 = var_nmodule == var_other81;
+var82 = var84;
+goto RET_LABEL83;
+RET_LABEL83:(void)0;
+}
+}
+var79 = var82;
+goto RET_LABEL80;
+RET_LABEL80:(void)0;
+}
+var78 = var79;
+}
+if (var78){
+{
+var85 = parser_nodes__Start__n_eof(var_tree);
+}
+var_neof = var85;
+/* <var_neof:EOF> isa AError */