nitdoc: Mangle names in IDs.
[nit.git] / c_src / modelbuilder.sep.1.c
index d6ad91c..90bd361 100644 (file)
@@ -3,10 +3,10 @@
 val* modelbuilder__ToolContext__opt_path(val* self) {
 val* var /* : OptionArray */;
 val* var1 /* : OptionArray */;
-var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dopt_path].val; /* @opt_path on <self:ToolContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_path");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 37);
+var1 = self->attrs[COLOR_modelbuilder__ToolContext___opt_path].val; /* _opt_path on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_path");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 33);
 show_backtrace(1);
 }
 var = var1;
@@ -17,29 +17,29 @@ return var;
 val* VIRTUAL_modelbuilder__ToolContext__opt_path(val* self) {
 val* var /* : OptionArray */;
 val* var1 /* : OptionArray */;
-var1 = modelbuilder__ToolContext__opt_path(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : OptionArray */;
+{ /* Inline modelbuilder#ToolContext#opt_path (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_modelbuilder__ToolContext___opt_path].val; /* _opt_path on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_path");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 33);
+show_backtrace(1);
 }
-/* method modelbuilder#ToolContext#opt_path= for (self: ToolContext, OptionArray) */
-void modelbuilder__ToolContext__opt_path_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ToolContext___64dopt_path].val = p0; /* @opt_path on <self:ToolContext> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ToolContext#opt_path= for (self: Object, OptionArray) */
-void VIRTUAL_modelbuilder__ToolContext__opt_path_61d(val* self, val* p0) {
-modelbuilder__ToolContext__opt_path_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#ToolContext#opt_only_metamodel for (self: ToolContext): OptionBool */
 val* modelbuilder__ToolContext__opt_only_metamodel(val* self) {
 val* var /* : OptionBool */;
 val* var1 /* : OptionBool */;
-var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_metamodel].val; /* @opt_only_metamodel on <self:ToolContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_only_metamodel");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 40);
+var1 = self->attrs[COLOR_modelbuilder__ToolContext___opt_only_metamodel].val; /* _opt_only_metamodel on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_metamodel");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 36);
 show_backtrace(1);
 }
 var = var1;
@@ -50,29 +50,29 @@ return var;
 val* VIRTUAL_modelbuilder__ToolContext__opt_only_metamodel(val* self) {
 val* var /* : OptionBool */;
 val* var1 /* : OptionBool */;
-var1 = modelbuilder__ToolContext__opt_only_metamodel(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : OptionBool */;
+{ /* Inline modelbuilder#ToolContext#opt_only_metamodel (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_modelbuilder__ToolContext___opt_only_metamodel].val; /* _opt_only_metamodel on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_metamodel");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 36);
+show_backtrace(1);
 }
-/* method modelbuilder#ToolContext#opt_only_metamodel= for (self: ToolContext, OptionBool) */
-void modelbuilder__ToolContext__opt_only_metamodel_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_metamodel].val = p0; /* @opt_only_metamodel on <self:ToolContext> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ToolContext#opt_only_metamodel= for (self: Object, OptionBool) */
-void VIRTUAL_modelbuilder__ToolContext__opt_only_metamodel_61d(val* self, val* p0) {
-modelbuilder__ToolContext__opt_only_metamodel_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#ToolContext#opt_only_parse for (self: ToolContext): OptionBool */
 val* modelbuilder__ToolContext__opt_only_parse(val* self) {
 val* var /* : OptionBool */;
 val* var1 /* : OptionBool */;
-var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_parse].val; /* @opt_only_parse on <self:ToolContext> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @opt_only_parse");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 43);
+var1 = self->attrs[COLOR_modelbuilder__ToolContext___opt_only_parse].val; /* _opt_only_parse on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_parse");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 39);
 show_backtrace(1);
 }
 var = var1;
@@ -83,60 +83,169 @@ return var;
 val* VIRTUAL_modelbuilder__ToolContext__opt_only_parse(val* self) {
 val* var /* : OptionBool */;
 val* var1 /* : OptionBool */;
-var1 = modelbuilder__ToolContext__opt_only_parse(self);
+val* var3 /* : OptionBool */;
+{ /* Inline modelbuilder#ToolContext#opt_only_parse (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_modelbuilder__ToolContext___opt_only_parse].val; /* _opt_only_parse on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_parse");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 39);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method modelbuilder#ToolContext#opt_only_parse= for (self: ToolContext, OptionBool) */
-void modelbuilder__ToolContext__opt_only_parse_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ToolContext___64dopt_only_parse].val = p0; /* @opt_only_parse on <self:ToolContext> */
+/* method modelbuilder#ToolContext#opt_ignore_visibility for (self: ToolContext): OptionBool */
+val* modelbuilder__ToolContext__opt_ignore_visibility(val* self) {
+val* var /* : OptionBool */;
+val* var1 /* : OptionBool */;
+var1 = self->attrs[COLOR_modelbuilder__ToolContext___opt_ignore_visibility].val; /* _opt_ignore_visibility on <self:ToolContext> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_ignore_visibility");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 42);
+show_backtrace(1);
+}
+var = var1;
 RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ToolContext#opt_ignore_visibility for (self: Object): OptionBool */
+val* VIRTUAL_modelbuilder__ToolContext__opt_ignore_visibility(val* self) {
+val* var /* : OptionBool */;
+val* var1 /* : OptionBool */;
+val* var3 /* : OptionBool */;
+{ /* Inline modelbuilder#ToolContext#opt_ignore_visibility (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_modelbuilder__ToolContext___opt_ignore_visibility].val; /* _opt_ignore_visibility on <self:Object(ToolContext)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_ignore_visibility");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 42);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ToolContext#opt_only_parse= for (self: Object, OptionBool) */
-void VIRTUAL_modelbuilder__ToolContext__opt_only_parse_61d(val* self, val* p0) {
-modelbuilder__ToolContext__opt_only_parse_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#ToolContext#init for (self: ToolContext) */
 void modelbuilder__ToolContext__init(val* self) {
 val* var /* : OptionContext */;
-val* var1 /* : OptionArray */;
-val* var2 /* : OptionBool */;
-val* var3 /* : OptionBool */;
-val* var4 /* : Array[Option] */;
-long var5 /* : Int */;
-val* var6 /* : NativeArray[Option] */;
+val* var2 /* : OptionContext */;
+val* var3 /* : OptionArray */;
+val* var5 /* : OptionArray */;
+val* var6 /* : OptionBool */;
+val* var8 /* : OptionBool */;
+val* var9 /* : OptionBool */;
+val* var11 /* : OptionBool */;
+val* var12 /* : OptionBool */;
+val* var14 /* : OptionBool */;
+val* var15 /* : Array[Option] */;
+long var16 /* : Int */;
+val* var17 /* : NativeArray[Option] */;
+{
 ((void (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__init]))(self) /* init on <self:ToolContext>*/;
-var = ((val* (*)(val*))(self->class->vft[COLOR_toolcontext__ToolContext__option_context]))(self) /* option_context on <self:ToolContext>*/;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__opt_path]))(self) /* opt_path on <self:ToolContext>*/;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__opt_only_parse]))(self) /* opt_only_parse on <self:ToolContext>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__opt_only_metamodel]))(self) /* opt_only_metamodel on <self:ToolContext>*/;
-var4 = NEW_array__Array(&type_array__Arrayopts__Option);
-{ /* var4 = array_instance Array[Option] */
-var5 = 3;
-var6 = NEW_array__NativeArray(var5, &type_array__NativeArrayopts__Option);
-((struct instance_array__NativeArray*)var6)->values[0] = (val*) var1;
-((struct instance_array__NativeArray*)var6)->values[1] = (val*) var2;
-((struct instance_array__NativeArray*)var6)->values[2] = (val*) var3;
-((void (*)(val*, val*, long))(var4->class->vft[COLOR_array__Array__with_native]))(var4, var6, var5) /* with_native on <var4:Array[Option]>*/;
-}
-((void (*)(val*, val*))(var->class->vft[COLOR_opts__OptionContext__add_option]))(var, var4) /* add_option on <var:OptionContext>*/;
+}
+{
+{ /* Inline toolcontext#ToolContext#option_context (self) on <self:ToolContext> */
+var2 = self->attrs[COLOR_toolcontext__ToolContext___option_context].val; /* _option_context on <self:ToolContext> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _option_context");
+PRINT_ERROR(" (%s:%d)\n", "toolcontext.nit", 231);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_path (self) on <self:ToolContext> */
+var5 = self->attrs[COLOR_modelbuilder__ToolContext___opt_path].val; /* _opt_path on <self:ToolContext> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_path");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 33);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_only_parse (self) on <self:ToolContext> */
+var8 = self->attrs[COLOR_modelbuilder__ToolContext___opt_only_parse].val; /* _opt_only_parse on <self:ToolContext> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_parse");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 39);
+show_backtrace(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_only_metamodel (self) on <self:ToolContext> */
+var11 = self->attrs[COLOR_modelbuilder__ToolContext___opt_only_metamodel].val; /* _opt_only_metamodel on <self:ToolContext> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_metamodel");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 36);
+show_backtrace(1);
+}
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_ignore_visibility (self) on <self:ToolContext> */
+var14 = self->attrs[COLOR_modelbuilder__ToolContext___opt_ignore_visibility].val; /* _opt_ignore_visibility on <self:ToolContext> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_ignore_visibility");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 42);
+show_backtrace(1);
+}
+var12 = var14;
+RET_LABEL13:(void)0;
+}
+}
+var15 = NEW_array__Array(&type_array__Arrayopts__Option);
+{ /* var15 = array_instance Array[Option] */
+var16 = 4;
+var17 = NEW_array__NativeArray(var16, &type_array__NativeArrayopts__Option);
+((struct instance_array__NativeArray*)var17)->values[0] = (val*) var3;
+((struct instance_array__NativeArray*)var17)->values[1] = (val*) var6;
+((struct instance_array__NativeArray*)var17)->values[2] = (val*) var9;
+((struct instance_array__NativeArray*)var17)->values[3] = (val*) var12;
+{
+((void (*)(val*, val*, long))(var15->class->vft[COLOR_array__Array__with_native]))(var15, var17, var16) /* with_native on <var15:Array[Option]>*/;
+}
+}
+{
+opts__OptionContext__add_option(var, var15); /* Direct call opts#OptionContext#add_option on <var:OptionContext>*/
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ToolContext#init for (self: Object) */
 void VIRTUAL_modelbuilder__ToolContext__init(val* self) {
-modelbuilder__ToolContext__init(self);
+modelbuilder__ToolContext__init(self); /* Direct call modelbuilder#ToolContext#init on <self:Object(ToolContext)>*/
 RET_LABEL:;
 }
 /* method modelbuilder#ToolContext#modelbuilder for (self: ToolContext): ModelBuilder */
 val* modelbuilder__ToolContext__modelbuilder(val* self) {
 val* var /* : ModelBuilder */;
 val* var1 /* : nullable ModelBuilder */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ToolContext__modelbuilder_real]))(self) /* modelbuilder_real on <self:ToolContext>*/;
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 52);
+val* var3 /* : nullable ModelBuilder */;
+{
+{ /* Inline modelbuilder#ToolContext#modelbuilder_real (self) on <self:ToolContext> */
+var3 = self->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val; /* _modelbuilder_real on <self:ToolContext> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 52);
 show_backtrace(1);
 }
 var = var1;
@@ -157,7 +266,7 @@ return var;
 val* modelbuilder__ToolContext__modelbuilder_real(val* self) {
 val* var /* : nullable ModelBuilder */;
 val* var1 /* : nullable ModelBuilder */;
-var1 = self->attrs[COLOR_modelbuilder__ToolContext___64dmodelbuilder_real].val; /* @modelbuilder_real on <self:ToolContext> */
+var1 = self->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val; /* _modelbuilder_real on <self:ToolContext> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -166,68 +275,302 @@ return var;
 val* VIRTUAL_modelbuilder__ToolContext__modelbuilder_real(val* self) {
 val* var /* : nullable ModelBuilder */;
 val* var1 /* : nullable ModelBuilder */;
-var1 = modelbuilder__ToolContext__modelbuilder_real(self);
+val* var3 /* : nullable ModelBuilder */;
+{ /* Inline modelbuilder#ToolContext#modelbuilder_real (self) on <self:Object(ToolContext)> */
+var3 = self->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val; /* _modelbuilder_real on <self:Object(ToolContext)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ToolContext#modelbuilder_real= for (self: ToolContext, nullable ModelBuilder) */
 void modelbuilder__ToolContext__modelbuilder_real_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ToolContext___64dmodelbuilder_real].val = p0; /* @modelbuilder_real on <self:ToolContext> */
+self->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val = p0; /* _modelbuilder_real on <self:ToolContext> */
 RET_LABEL:;
 }
 /* method modelbuilder#ToolContext#modelbuilder_real= for (self: Object, nullable ModelBuilder) */
 void VIRTUAL_modelbuilder__ToolContext__modelbuilder_real_61d(val* self, val* p0) {
-modelbuilder__ToolContext__modelbuilder_real_61d(self, p0);
+{ /* Inline modelbuilder#ToolContext#modelbuilder_real= (self,p0) on <self:Object(ToolContext)> */
+self->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val = p0; /* _modelbuilder_real on <self:Object(ToolContext)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method modelbuilder#ToolContext#make_main_module for (self: ToolContext, Array[MModule]): MModule */
+val* modelbuilder__ToolContext__make_main_module(val* self, val* p0) {
+val* var /* : MModule */;
+val* var_mmodules /* var mmodules: Array[MModule] */;
+short int var1 /* : Bool */;
+short int var2 /* : Bool */;
+long var3 /* : Int */;
+long var5 /* : Int */;
+long var6 /* : Int */;
+short int var7 /* : Bool */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+val* var11 /* : nullable Object */;
+val* var_mainmodule /* var mainmodule: nullable Object */;
+val* var12 /* : MModule */;
+val* var13 /* : ModelBuilder */;
+val* var14 /* : Model */;
+val* var16 /* : Model */;
+val* var17 /* : null */;
+val* var18 /* : nullable Object */;
+val* var19 /* : String */;
+val* var21 /* : String */;
+static val* varonce;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : FlatString */;
+val* var26 /* : String */;
+val* var27 /* : Location */;
+val* var28 /* : nullable Object */;
+val* var29 /* : Location */;
+val* var31 /* : Location */;
+val* var32 /* : nullable SourceFile */;
+val* var34 /* : nullable SourceFile */;
+long var35 /* : Int */;
+long var36 /* : Int */;
+long var37 /* : Int */;
+long var38 /* : Int */;
+short int var39 /* : Bool */;
+var_mmodules = p0;
+{
+var1 = array__AbstractArrayRead__is_empty(var_mmodules);
+}
+var2 = !var1;
+if (unlikely(!var2)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 59);
+show_backtrace(1);
+}
+{
+{ /* Inline array#AbstractArrayRead#length (var_mmodules) on <var_mmodules:Array[MModule]> */
+var5 = var_mmodules->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_mmodules:Array[MModule]> */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var6 = 1;
+{
+{ /* Inline kernel#Int#== (var3,var6) on <var3:Int> */
+var10 = var3 == var6;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+var7 = var8;
+}
+if (var7){
+{
+var11 = abstract_collection__SequenceRead__first(var_mmodules);
+}
+var_mainmodule = var11;
+} else {
+var12 = NEW_mmodule__MModule(&type_mmodule__MModule);
+{
+var13 = modelbuilder__ToolContext__modelbuilder(self);
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#model (var13) on <var13:ModelBuilder> */
+var16 = var13->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <var13:ModelBuilder> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+var17 = NULL;
+{
+var18 = abstract_collection__SequenceRead__first(var_mmodules);
+}
+{
+{ /* Inline mmodule#MModule#name (var18) on <var18:nullable Object(MModule)> */
+var21 = var18->attrs[COLOR_mmodule__MModule___name].val; /* _name on <var18:nullable Object(MModule)> */
+if (unlikely(var21 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 78);
+show_backtrace(1);
+}
+var19 = var21;
+RET_LABEL20:(void)0;
+}
+}
+if (varonce) {
+var22 = varonce;
+} else {
+var23 = "-m";
+var24 = 2;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce = var22;
+}
+{
+var26 = string__FlatString___43d(var19, var22);
+}
+var27 = NEW_location__Location(&type_location__Location);
+{
+var28 = abstract_collection__SequenceRead__first(var_mmodules);
+}
+{
+{ /* Inline mmodule#MModule#location (var28) on <var28:nullable Object(MModule)> */
+var31 = var28->attrs[COLOR_mmodule__MModule___location].val; /* _location on <var28:nullable Object(MModule)> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 81);
+show_backtrace(1);
+}
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+{
+{ /* Inline location#Location#file (var29) on <var29:Location> */
+var34 = var29->attrs[COLOR_location__Location___file].val; /* _file on <var29:Location> */
+var32 = var34;
+RET_LABEL33:(void)0;
+}
+}
+var35 = 0;
+var36 = 0;
+var37 = 0;
+var38 = 0;
+{
+location__Location__init(var27, var32, var35, var36, var37, var38); /* Direct call location#Location#init on <var27:Location>*/
+}
+{
+mmodule__MModule__init(var12, var14, var17, var26, var27); /* Direct call mmodule#MModule#init on <var12:MModule>*/
+}
+var_mainmodule = var12;
+var39 = 1;
+{
+{ /* Inline mmodule#MModule#is_fictive= (var_mainmodule,var39) on <var_mainmodule:nullable Object(MModule)> */
+var_mainmodule->attrs[COLOR_mmodule__MModule___is_fictive].s = var39; /* _is_fictive on <var_mainmodule:nullable Object(MModule)> */
+RET_LABEL40:(void)0;
+}
+}
+{
+mmodule__MModule__set_imported_mmodules(var_mainmodule, var_mmodules); /* Direct call mmodule#MModule#set_imported_mmodules on <var_mainmodule:nullable Object(MModule)>*/
+}
+}
+var = var_mainmodule;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ToolContext#make_main_module for (self: Object, Array[MModule]): MModule */
+val* VIRTUAL_modelbuilder__ToolContext__make_main_module(val* self, val* p0) {
+val* var /* : MModule */;
+val* var1 /* : MModule */;
+var1 = modelbuilder__ToolContext__make_main_module(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
-/* method modelbuilder#ToolContext#run_global_phases for (self: ToolContext, MModule) */
+/* method modelbuilder#ToolContext#run_global_phases for (self: ToolContext, Array[MModule]) */
 void modelbuilder__ToolContext__run_global_phases(val* self, val* p0) {
+val* var_mmodules /* var mmodules: Array[MModule] */;
+val* var /* : MModule */;
 val* var_mainmodule /* var mainmodule: MModule */;
-val* var /* : Sequence[Phase] */;
-val* var1 /* : Iterator[nullable Object] */;
-short int var2 /* : Bool */;
-val* var3 /* : nullable Object */;
+val* var1 /* : Sequence[Phase] */;
+val* var_ /* var : Sequence[Phase] */;
+val* var2 /* : Iterator[nullable Object] */;
+val* var_3 /* var : IndexedIterator[Phase] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
 val* var_phase /* var phase: Phase */;
-var_mainmodule = p0;
-var = ((val* (*)(val*))(self->class->vft[COLOR_phase__ToolContext__phases_list]))(self) /* phases_list on <self:ToolContext>*/;
-var1 = ((val* (*)(val*))(var->class->vft[COLOR_abstract_collection__Collection__iterator]))(var) /* iterator on <var:Sequence[Phase]>*/;
+short int var6 /* : Bool */;
+short int var8 /* : Bool */;
+var_mmodules = p0;
+{
+var = mixin__ToolContext__make_main_module(self, var_mmodules);
+}
+var_mainmodule = var;
+{
+var1 = phase__ToolContext__phases_list(self);
+}
+var_ = var1;
+{
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Sequence[Phase]>*/;
+}
+var_3 = var2;
 for(;;) {
-var2 = ((short int (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var1) /* is_ok on <var1:Iterator[nullable Object]>*/;
-if(!var2) break;
-var3 = ((val* (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__item]))(var1) /* item on <var1:Iterator[nullable Object]>*/;
-var_phase = var3;
-((void (*)(val*, val*))(var_phase->class->vft[COLOR_modelbuilder__Phase__process_mainmodule]))(var_phase, var_mainmodule) /* process_mainmodule on <var_phase:Phase>*/;
-CONTINUE_label: (void)0;
-((void (*)(val*))(var1->class->vft[COLOR_abstract_collection__Iterator__next]))(var1) /* next on <var1:Iterator[nullable Object]>*/;
+{
+var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:IndexedIterator[Phase]>*/;
+}
+if (var4){
+{
+var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:IndexedIterator[Phase]>*/;
+}
+var_phase = var5;
+{
+{ /* Inline phase#Phase#disabled (var_phase) on <var_phase:Phase> */
+var8 = var_phase->attrs[COLOR_phase__Phase___disabled].s; /* _disabled on <var_phase:Phase> */
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+if (var6){
+goto BREAK_label;
+} else {
+}
+{
+((void (*)(val*, val*, val*))(var_phase->class->vft[COLOR_modelbuilder__Phase__process_mainmodule]))(var_phase, var_mainmodule, var_mmodules) /* process_mainmodule on <var_phase:Phase>*/;
 }
 BREAK_label: (void)0;
+{
+((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:IndexedIterator[Phase]>*/;
+}
+} else {
+goto BREAK_label9;
+}
+}
+BREAK_label9: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:IndexedIterator[Phase]> */
+RET_LABEL10:(void)0;
+}
+}
 RET_LABEL:;
 }
-/* method modelbuilder#ToolContext#run_global_phases for (self: Object, MModule) */
+/* method modelbuilder#ToolContext#run_global_phases for (self: Object, Array[MModule]) */
 void VIRTUAL_modelbuilder__ToolContext__run_global_phases(val* self, val* p0) {
-modelbuilder__ToolContext__run_global_phases(self, p0);
+modelbuilder__ToolContext__run_global_phases(self, p0); /* Direct call modelbuilder#ToolContext#run_global_phases on <self:Object(ToolContext)>*/
 RET_LABEL:;
 }
-/* method modelbuilder#Phase#process_mainmodule for (self: Phase, MModule) */
-void modelbuilder__Phase__process_mainmodule(val* self, val* p0) {
+/* method modelbuilder#Phase#process_mainmodule for (self: Phase, MModule, SequenceRead[MModule]) */
+void modelbuilder__Phase__process_mainmodule(val* self, val* p0, val* p1) {
 val* var_mainmodule /* var mainmodule: MModule */;
+val* var_given_mmodules /* var given_mmodules: SequenceRead[MModule] */;
 var_mainmodule = p0;
+var_given_mmodules = p1;
 RET_LABEL:;
 }
-/* method modelbuilder#Phase#process_mainmodule for (self: Object, MModule) */
-void VIRTUAL_modelbuilder__Phase__process_mainmodule(val* self, val* p0) {
-modelbuilder__Phase__process_mainmodule(self, p0);
+/* method modelbuilder#Phase#process_mainmodule for (self: Object, MModule, SequenceRead[MModule]) */
+void VIRTUAL_modelbuilder__Phase__process_mainmodule(val* self, val* p0, val* p1) {
+val* var_mainmodule /* var mainmodule: MModule */;
+val* var_given_mmodules /* var given_mmodules: SequenceRead[MModule] */;
+{ /* Inline modelbuilder#Phase#process_mainmodule (self,p0,p1) on <self:Object(Phase)> */
+var_mainmodule = p0;
+var_given_mmodules = p1;
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#model for (self: ModelBuilder): Model */
 val* modelbuilder__ModelBuilder__model(val* self) {
 val* var /* : Model */;
 val* var1 /* : Model */;
-var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dmodel].val; /* @model on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @model");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 73);
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
 show_backtrace(1);
 }
 var = var1;
@@ -238,29 +581,42 @@ return var;
 val* VIRTUAL_modelbuilder__ModelBuilder__model(val* self) {
 val* var /* : Model */;
 val* var1 /* : Model */;
-var1 = modelbuilder__ModelBuilder__model(self);
+val* var3 /* : Model */;
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ModelBuilder#model= for (self: ModelBuilder, Model) */
 void modelbuilder__ModelBuilder__model_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dmodel].val = p0; /* @model on <self:ModelBuilder> */
+self->attrs[COLOR_modelbuilder__ModelBuilder___model].val = p0; /* _model on <self:ModelBuilder> */
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#model= for (self: Object, Model) */
 void VIRTUAL_modelbuilder__ModelBuilder__model_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__model_61d(self, p0);
+{ /* Inline modelbuilder#ModelBuilder#model= (self,p0) on <self:Object(ModelBuilder)> */
+self->attrs[COLOR_modelbuilder__ModelBuilder___model].val = p0; /* _model on <self:Object(ModelBuilder)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#toolcontext for (self: ModelBuilder): ToolContext */
 val* modelbuilder__ModelBuilder__toolcontext(val* self) {
 val* var /* : ToolContext */;
 val* var1 /* : ToolContext */;
-var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dtoolcontext].val; /* @toolcontext on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @toolcontext");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 76);
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
 show_backtrace(1);
 }
 var = var1;
@@ -271,101 +627,267 @@ return var;
 val* VIRTUAL_modelbuilder__ModelBuilder__toolcontext(val* self) {
 val* var /* : ToolContext */;
 val* var1 /* : ToolContext */;
-var1 = modelbuilder__ModelBuilder__toolcontext(self);
+val* var3 /* : ToolContext */;
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ModelBuilder#toolcontext= for (self: ModelBuilder, ToolContext) */
 void modelbuilder__ModelBuilder__toolcontext_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dtoolcontext].val = p0; /* @toolcontext on <self:ModelBuilder> */
+self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val = p0; /* _toolcontext on <self:ModelBuilder> */
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#toolcontext= for (self: Object, ToolContext) */
 void VIRTUAL_modelbuilder__ModelBuilder__toolcontext_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__toolcontext_61d(self, p0);
+{ /* Inline modelbuilder#ModelBuilder#toolcontext= (self,p0) on <self:Object(ModelBuilder)> */
+self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val = p0; /* _toolcontext on <self:Object(ModelBuilder)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#run_phases for (self: ModelBuilder) */
 void modelbuilder__ModelBuilder__run_phases(val* self) {
 val* var /* : Model */;
-val* var1 /* : Array[MModule] */;
-val* var2 /* : Array[nullable Object] */;
+val* var2 /* : Model */;
+val* var3 /* : Array[MModule] */;
+val* var5 /* : Array[MModule] */;
+val* var6 /* : Array[nullable Object] */;
 val* var_mmodules /* var mmodules: Array[MModule] */;
-val* var3 /* : Model */;
-val* var4 /* : POSet[MModule] */;
-val* var5 /* : Array[AModule] */;
+val* var7 /* : Model */;
+val* var9 /* : Model */;
+val* var10 /* : POSet[MModule] */;
+val* var12 /* : POSet[MModule] */;
+val* var13 /* : Array[AModule] */;
 val* var_nmodules /* var nmodules: Array[AModule] */;
-val* var6 /* : Iterator[nullable Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable Object */;
+val* var_ /* var : Array[MModule] */;
+val* var14 /* : ArrayIterator[nullable Object] */;
+val* var_15 /* var : ArrayIterator[MModule] */;
+short int var16 /* : Bool */;
+val* var17 /* : nullable Object */;
 val* var_mm /* var mm: MModule */;
-val* var9 /* : HashMap[MModule, AModule] */;
-val* var10 /* : nullable Object */;
-val* var11 /* : ToolContext */;
-val* var12 /* : ToolContext */;
-val* var13 /* : OptionBool */;
-val* var14 /* : nullable Object */;
-short int var15 /* : Bool */;
-val* var16 /* : ToolContext */;
+val* var18 /* : HashMap[MModule, AModule] */;
+val* var20 /* : HashMap[MModule, AModule] */;
+val* var21 /* : nullable Object */;
+val* var23 /* : ToolContext */;
+val* var25 /* : ToolContext */;
+val* var26 /* : ToolContext */;
+val* var28 /* : ToolContext */;
+val* var29 /* : OptionBool */;
+val* var31 /* : OptionBool */;
+val* var32 /* : nullable Object */;
+val* var34 /* : nullable Object */;
+short int var35 /* : Bool */;
+val* var36 /* : ToolContext */;
+val* var38 /* : ToolContext */;
 static val* varonce;
-val* var17 /* : String */;
-char* var18 /* : NativeString */;
-long var19 /* : Int */;
-val* var20 /* : String */;
-long var21 /* : Int */;
-long var22 /* : Int */;
-var = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-var1 = ((val* (*)(val*))(var->class->vft[COLOR_mmodule__Model__mmodules]))(var) /* mmodules on <var:Model>*/;
-var2 = ((val* (*)(val*))(var1->class->vft[COLOR_array__Collection__to_a]))(var1) /* to_a on <var1:Array[MModule]>*/;
-var_mmodules = var2;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-var4 = ((val* (*)(val*))(var3->class->vft[COLOR_mmodule__Model__mmodule_importation_hierarchy]))(var3) /* mmodule_importation_hierarchy on <var3:Model>*/;
-((void (*)(val*, val*))(var4->class->vft[COLOR_sorter__AbstractSorter__sort]))(var4, var_mmodules) /* sort on <var4:POSet[MModule]>*/;
-var5 = NEW_array__Array(&type_array__Arrayparser_nodes__AModule);
-((void (*)(val*))(var5->class->vft[COLOR_array__Array__init]))(var5) /* init on <var5:Array[AModule]>*/;
-var_nmodules = var5;
-var6 = ((val* (*)(val*))(var_mmodules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_mmodules) /* iterator on <var_mmodules:Array[MModule]>*/;
+val* var39 /* : String */;
+char* var40 /* : NativeString */;
+long var41 /* : Int */;
+val* var42 /* : FlatString */;
+long var43 /* : Int */;
+long var44 /* : Int */;
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var2 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline mmodule#Model#mmodules (var) on <var:Model> */
+var5 = var->attrs[COLOR_mmodule__Model___mmodules].val; /* _mmodules on <var:Model> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodules");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 27);
+show_backtrace(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+{
+var6 = array__Collection__to_a(var3);
+}
+var_mmodules = var6;
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var9 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var9 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+{
+{ /* Inline mmodule#Model#mmodule_importation_hierarchy (var7) on <var7:Model> */
+var12 = var7->attrs[COLOR_mmodule__Model___mmodule_importation_hierarchy].val; /* _mmodule_importation_hierarchy on <var7:Model> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule_importation_hierarchy");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 36);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+{
+sorter__Comparator__sort(var10, var_mmodules); /* Direct call sorter#Comparator#sort on <var10:POSet[MModule]>*/
+}
+var13 = NEW_array__Array(&type_array__Arrayparser_nodes__AModule);
+{
+((void (*)(val*))(var13->class->vft[COLOR_kernel__Object__init]))(var13) /* init on <var13:Array[AModule]>*/;
+}
+var_nmodules = var13;
+var_ = var_mmodules;
+{
+var14 = array__AbstractArrayRead__iterator(var_);
+}
+var_15 = var14;
 for(;;) {
-var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
-if(!var7) break;
-var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
-var_mm = var8;
-var9 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(self) /* mmodule2nmodule on <self:ModelBuilder>*/;
-var10 = ((val* (*)(val*, val*))(var9->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var9, var_mm) /* [] on <var9:HashMap[MModule, AModule]>*/;
-((void (*)(val*, val*))(var_nmodules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_nmodules, var10) /* add on <var_nmodules:Array[AModule]>*/;
-CONTINUE_label: (void)0;
-((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
+{
+var16 = array__ArrayIterator__is_ok(var_15);
+}
+if (var16){
+{
+var17 = array__ArrayIterator__item(var_15);
+}
+var_mm = var17;
+{
+{ /* Inline modelbuilder#ModelBuilder#mmodule2nmodule (self) on <self:ModelBuilder> */
+var20 = self->attrs[COLOR_modelbuilder__ModelBuilder___mmodule2nmodule].val; /* _mmodule2nmodule on <self:ModelBuilder> */
+if (unlikely(var20 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule2nmodule");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 728);
+show_backtrace(1);
+}
+var18 = var20;
+RET_LABEL19:(void)0;
+}
+}
+{
+var21 = hash_collection__HashMap___91d_93d(var18, var_mm);
+}
+{
+array__Array__add(var_nmodules, var21); /* Direct call array#Array#add on <var_nmodules:Array[AModule]>*/
+}
+{
+array__ArrayIterator__next(var_15); /* Direct call array#ArrayIterator#next on <var_15:ArrayIterator[MModule]>*/
+}
+} else {
+goto BREAK_label;
+}
 }
 BREAK_label: (void)0;
-var11 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-((void (*)(val*, val*))(var11->class->vft[COLOR_phase__ToolContext__run_phases]))(var11, var_nmodules) /* run_phases on <var11:ToolContext>*/;
-var12 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var13 = ((val* (*)(val*))(var12->class->vft[COLOR_modelbuilder__ToolContext__opt_only_metamodel]))(var12) /* opt_only_metamodel on <var12:ToolContext>*/;
-var14 = ((val* (*)(val*))(var13->class->vft[COLOR_opts__Option__value]))(var13) /* value on <var13:OptionBool>*/;
-var15 = ((struct instance_kernel__Bool*)var14)->value; /* autounbox from nullable Object to Bool */;
-if (var15){
-var16 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_15) on <var_15:ArrayIterator[MModule]> */
+RET_LABEL22:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var25 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var23 = var25;
+RET_LABEL24:(void)0;
+}
+}
+{
+phase__ToolContext__run_phases(var23, var_nmodules); /* Direct call phase#ToolContext#run_phases on <var23:ToolContext>*/
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var28 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var28 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var26 = var28;
+RET_LABEL27:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_only_metamodel (var26) on <var26:ToolContext> */
+var31 = var26->attrs[COLOR_modelbuilder__ToolContext___opt_only_metamodel].val; /* _opt_only_metamodel on <var26:ToolContext> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_metamodel");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 36);
+show_backtrace(1);
+}
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var29) on <var29:OptionBool> */
+var34 = var29->attrs[COLOR_opts__Option___value].val; /* _value on <var29:OptionBool> */
+var32 = var34;
+RET_LABEL33:(void)0;
+}
+}
+var35 = ((struct instance_kernel__Bool*)var32)->value; /* autounbox from nullable Object to Bool */;
+if (var35){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var38 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var38 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var36 = var38;
+RET_LABEL37:(void)0;
+}
+}
 if (varonce) {
-var17 = varonce;
+var39 = varonce;
 } else {
-var18 = "*** ONLY METAMODEL";
-var19 = 18;
-var20 = string__NativeString__to_s_with_length(var18, var19);
-var17 = var20;
-varonce = var17;
+var40 = "*** ONLY METAMODEL";
+var41 = 18;
+var42 = string__NativeString__to_s_with_length(var40, var41);
+var39 = var42;
+varonce = var39;
+}
+var43 = 1;
+{
+toolcontext__ToolContext__info(var36, var39, var43); /* Direct call toolcontext#ToolContext#info on <var36:ToolContext>*/
+}
+var44 = 0;
+{
+{ /* Inline kernel#Object#exit (self,var44) on <self:ModelBuilder> */
+exit(var44);
+RET_LABEL45:(void)0;
+}
 }
-var21 = 1;
-((void (*)(val*, val*, long))(var16->class->vft[COLOR_toolcontext__ToolContext__info]))(var16, var17, var21) /* info on <var16:ToolContext>*/;
-var22 = 0;
-((void (*)(val*, long))(self->class->vft[COLOR_kernel__Object__exit]))(self, var22) /* exit on <self:ModelBuilder>*/;
 } else {
 }
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#run_phases for (self: Object) */
 void VIRTUAL_modelbuilder__ModelBuilder__run_phases(val* self) {
-modelbuilder__ModelBuilder__run_phases(self);
+modelbuilder__ModelBuilder__run_phases(self); /* Direct call modelbuilder#ModelBuilder#run_phases on <self:Object(ModelBuilder)>*/
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#init for (self: ModelBuilder, Model, ToolContext) */
@@ -373,203 +895,265 @@ void modelbuilder__ModelBuilder__init(val* self, val* p0, val* p1) {
 val* var_model /* var model: Model */;
 val* var_toolcontext /* var toolcontext: ToolContext */;
 val* var /* : nullable ModelBuilder */;
-val* var1 /* : null */;
-short int var2 /* : Bool */;
-val* var3 /* : Array[String] */;
-val* var4 /* : OptionArray */;
-val* var5 /* : nullable Object */;
-static val* varonce;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : String */;
-val* var10 /* : String */;
-val* var_path_env /* var path_env: String */;
+val* var4 /* : nullable ModelBuilder */;
+val* var5 /* : null */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var9 /* : Bool */;
 short int var11 /* : Bool */;
-short int var12 /* : Bool */;
 val* var13 /* : Array[String] */;
-char var14 /* : Char */;
 val* var15 /* : Array[String] */;
-val* var16 /* : Pattern */;
-static val* varonce17;
-val* var18 /* : String */;
-char* var19 /* : NativeString */;
-long var20 /* : Int */;
-val* var21 /* : String */;
+val* var16 /* : OptionArray */;
+val* var18 /* : OptionArray */;
+val* var19 /* : nullable Object */;
+val* var21 /* : nullable Object */;
+static val* varonce;
 val* var22 /* : String */;
-short int var23 /* : Bool */;
-short int var24 /* : Bool */;
-val* var25 /* : Array[Object] */;
-long var26 /* : Int */;
-val* var_ /* var : Array[Object] */;
-static val* varonce27;
-val* var28 /* : String */;
-char* var29 /* : NativeString */;
-long var30 /* : Int */;
-val* var31 /* : String */;
-static val* varonce32;
-val* var33 /* : String */;
-char* var34 /* : NativeString */;
-long var35 /* : Int */;
-val* var36 /* : String */;
-val* var37 /* : String */;
-val* var_libname /* var libname: String */;
-short int var38 /* : Bool */;
-val* var39 /* : Array[String] */;
-val* var40 /* : Array[Object] */;
-long var41 /* : Int */;
-val* var_42 /* var : Array[Object] */;
-static val* varonce43;
-val* var44 /* : String */;
-char* var45 /* : NativeString */;
-long var46 /* : Int */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : FlatString */;
+val* var26 /* : String */;
+val* var_path_env /* var path_env: String */;
+short int var27 /* : Bool */;
+short int var28 /* : Bool */;
+val* var29 /* : Array[String] */;
+val* var31 /* : Array[String] */;
+char var32 /* : Char */;
+val* var33 /* : Array[Text] */;
+val* var34 /* : Pattern */;
+val* var35 /* : nullable String */;
+val* var37 /* : nullable String */;
+val* var_nit_dir /* var nit_dir: nullable String */;
+val* var38 /* : null */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
+val* var_other42 /* var other: nullable Object */;
+short int var43 /* : Bool */;
+short int var44 /* : Bool */;
+short int var45 /* : Bool */;
+static val* varonce46;
 val* var47 /* : String */;
-val* var48 /* : Sys */;
-val* var49 /* : String */;
-val* var50 /* : String */;
-static val* varonce51;
-val* var52 /* : String */;
-char* var53 /* : NativeString */;
-long var54 /* : Int */;
-val* var55 /* : String */;
-val* var56 /* : String */;
-val* var_libname57 /* var libname: String */;
-short int var58 /* : Bool */;
-val* var59 /* : Array[String] */;
-val* var60 /* : String */;
+char* var48 /* : NativeString */;
+long var49 /* : Int */;
+val* var50 /* : FlatString */;
+val* var51 /* : Array[Object] */;
+long var52 /* : Int */;
+val* var53 /* : NativeArray[Object] */;
+val* var54 /* : String */;
+val* var_libname /* var libname: String */;
+short int var55 /* : Bool */;
+val* var56 /* : Array[String] */;
+val* var58 /* : Array[String] */;
 var_model = p0;
 var_toolcontext = p1;
-((void (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model_61d]))(self, var_model) /* model= on <self:ModelBuilder>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext_61d]))(self, var_toolcontext) /* toolcontext= on <self:ModelBuilder>*/;
-var = ((val* (*)(val*))(var_toolcontext->class->vft[COLOR_modelbuilder__ToolContext__modelbuilder_real]))(var_toolcontext) /* modelbuilder_real on <var_toolcontext:ToolContext>*/;
-var1 = NULL;
+{
+{ /* Inline modelbuilder#ModelBuilder#model= (self,var_model) on <self:ModelBuilder> */
+self->attrs[COLOR_modelbuilder__ModelBuilder___model].val = var_model; /* _model on <self:ModelBuilder> */
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext= (self,var_toolcontext) on <self:ModelBuilder> */
+self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val = var_toolcontext; /* _toolcontext on <self:ModelBuilder> */
+RET_LABEL2:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#modelbuilder_real (var_toolcontext) on <var_toolcontext:ToolContext> */
+var4 = var_toolcontext->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val; /* _modelbuilder_real on <var_toolcontext:ToolContext> */
+var = var4;
+RET_LABEL3:(void)0;
+}
+}
+var5 = NULL;
 if (var == NULL) {
-var2 = 1; /* is null */
+var6 = 1; /* is null */
 } else {
-var2 = 0; /* arg is null but recv is not */
+var6 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var,var5) on <var:nullable ModelBuilder> */
+var_other = var5;
+{
+{ /* Inline kernel#Object#is_same_instance (var,var_other) on <var:nullable ModelBuilder(ModelBuilder)> */
+var11 = var == var_other;
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
+}
+}
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+var6 = var7;
+}
+if (unlikely(!var6)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 132);
+show_backtrace(1);
+}
+{
+{ /* Inline modelbuilder#ToolContext#modelbuilder_real= (var_toolcontext,self) on <var_toolcontext:ToolContext> */
+var_toolcontext->attrs[COLOR_modelbuilder__ToolContext___modelbuilder_real].val = self; /* _modelbuilder_real on <var_toolcontext:ToolContext> */
+RET_LABEL12:(void)0;
+}
+}
+{
+{ /* 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", "modelbuilder.nit", 300);
+show_backtrace(1);
+}
+var13 = var15;
+RET_LABEL14:(void)0;
 }
-if (!var2) {
-fprintf(stderr, "Runtime error: %s", "Assert failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 102);
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_path (var_toolcontext) on <var_toolcontext:ToolContext> */
+var18 = var_toolcontext->attrs[COLOR_modelbuilder__ToolContext___opt_path].val; /* _opt_path on <var_toolcontext:ToolContext> */
+if (unlikely(var18 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_path");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 33);
 show_backtrace(1);
 }
-((void (*)(val*, val*))(var_toolcontext->class->vft[COLOR_modelbuilder__ToolContext__modelbuilder_real_61d]))(var_toolcontext, self) /* modelbuilder_real= on <var_toolcontext:ToolContext>*/;
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
-var4 = ((val* (*)(val*))(var_toolcontext->class->vft[COLOR_modelbuilder__ToolContext__opt_path]))(var_toolcontext) /* opt_path on <var_toolcontext:ToolContext>*/;
-var5 = ((val* (*)(val*))(var4->class->vft[COLOR_opts__Option__value]))(var4) /* value on <var4:OptionArray>*/;
-((void (*)(val*, val*))(var3->class->vft[COLOR_abstract_collection__Sequence__append]))(var3, var5) /* append on <var3:Array[String]>*/;
+var16 = var18;
+RET_LABEL17:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var16) on <var16:OptionArray> */
+var21 = var16->attrs[COLOR_opts__Option___value].val; /* _value on <var16:OptionArray> */
+var19 = var21;
+RET_LABEL20:(void)0;
+}
+}
+{
+abstract_collection__Sequence__append(var13, var19); /* Direct call abstract_collection#Sequence#append on <var13:Array[String]>*/
+}
 if (varonce) {
-var6 = varonce;
+var22 = varonce;
 } else {
-var7 = "NIT_PATH";
-var8 = 8;
-var9 = string__NativeString__to_s_with_length(var7, var8);
-var6 = var9;
-varonce = var6;
+var23 = "NIT_PATH";
+var24 = 8;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce = var22;
 }
-var10 = ((val* (*)(val*))(var6->class->vft[COLOR_environ__String__environ]))(var6) /* environ on <var6:String>*/;
-var_path_env = var10;
-var11 = ((short int (*)(val*))(var_path_env->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_path_env) /* is_empty on <var_path_env:String>*/;
-var12 = !var11;
-if (var12){
-var13 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
-var14 = ':';
-var16 = BOX_kernel__Char(var14); /* autobox from Char to Pattern */
-var15 = ((val* (*)(val*, val*))(var_path_env->class->vft[COLOR_string_search__String__split_with]))(var_path_env, var16) /* split_with on <var_path_env:String>*/;
-((void (*)(val*, val*))(var13->class->vft[COLOR_abstract_collection__Sequence__append]))(var13, var15) /* append on <var13:Array[String]>*/;
-} else {
+{
+var26 = environ__String__environ(var22);
 }
-if (varonce17) {
-var18 = varonce17;
-} else {
-var19 = "NIT_DIR";
-var20 = 7;
-var21 = string__NativeString__to_s_with_length(var19, var20);
-var18 = var21;
-varonce17 = var18;
+var_path_env = var26;
+{
+var27 = string__Text__is_empty(var_path_env);
 }
-var22 = ((val* (*)(val*))(var18->class->vft[COLOR_environ__String__environ]))(var18) /* environ on <var18:String>*/;
-var_path_env = var22;
-var23 = ((short int (*)(val*))(var_path_env->class->vft[COLOR_abstract_collection__Collection__is_empty]))(var_path_env) /* is_empty on <var_path_env:String>*/;
-var24 = !var23;
-if (var24){
-var25 = NEW_array__Array(&type_array__Arraykernel__Object);
-var26 = 3;
-((void (*)(val*, long))(var25->class->vft[COLOR_array__Array__with_capacity]))(var25, var26) /* with_capacity on <var25:Array[Object]>*/;
-var_ = var25;
-if (varonce27) {
-var28 = varonce27;
-} else {
-var29 = "";
-var30 = 0;
-var31 = string__NativeString__to_s_with_length(var29, var30);
-var28 = var31;
-varonce27 = var28;
+var28 = !var27;
+if (var28){
+{
+{ /* Inline modelbuilder#ModelBuilder#paths (self) on <self:ModelBuilder> */
+var31 = self->attrs[COLOR_modelbuilder__ModelBuilder___paths].val; /* _paths on <self:ModelBuilder> */
+if (unlikely(var31 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 300);
+show_backtrace(1);
 }
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var28) /* add on <var_:Array[Object]>*/;
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var_path_env) /* add on <var_:Array[Object]>*/;
-if (varonce32) {
-var33 = varonce32;
-} else {
-var34 = "/lib";
-var35 = 4;
-var36 = string__NativeString__to_s_with_length(var34, var35);
-var33 = var36;
-varonce32 = var33;
+var29 = var31;
+RET_LABEL30:(void)0;
+}
+}
+var32 = ':';
+{
+var34 = BOX_kernel__Char(var32); /* autobox from Char to Pattern */
+var33 = string_search__Text__split_with(var_path_env, var34);
+}
+{
+abstract_collection__Sequence__append(var29, var33); /* Direct call abstract_collection#Sequence#append on <var29:Array[String]>*/
 }
-((void (*)(val*, val*))(var_->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_, var33) /* add on <var_:Array[Object]>*/;
-var37 = ((val* (*)(val*))(var_->class->vft[COLOR_string__Object__to_s]))(var_) /* to_s on <var_:Array[Object]>*/;
-var_libname = var37;
-var38 = ((short int (*)(val*))(var_libname->class->vft[COLOR_file__String__file_exists]))(var_libname) /* file_exists on <var_libname:String>*/;
-if (var38){
-var39 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
-((void (*)(val*, val*))(var39->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var39, var_libname) /* add on <var39:Array[String]>*/;
 } else {
 }
+{
+{ /* Inline toolcontext#ToolContext#nit_dir (var_toolcontext) on <var_toolcontext:ToolContext> */
+var37 = var_toolcontext->attrs[COLOR_toolcontext__ToolContext___nit_dir].val; /* _nit_dir on <var_toolcontext:ToolContext> */
+var35 = var37;
+RET_LABEL36:(void)0;
+}
+}
+var_nit_dir = var35;
+var38 = NULL;
+if (var_nit_dir == NULL) {
+var39 = 0; /* is null */
 } else {
+var39 = 1; /* arg is null and recv is not */
 }
-var40 = NEW_array__Array(&type_array__Arraykernel__Object);
-var41 = 3;
-((void (*)(val*, long))(var40->class->vft[COLOR_array__Array__with_capacity]))(var40, var41) /* with_capacity on <var40:Array[Object]>*/;
-var_42 = var40;
-if (varonce43) {
-var44 = varonce43;
+if (0) {
+{ /* Inline kernel#Object#!= (var_nit_dir,var38) on <var_nit_dir:nullable String> */
+var_other42 = var38;
+{
+var44 = ((short int (*)(val*, val*))(var_nit_dir->class->vft[COLOR_kernel__Object___61d_61d]))(var_nit_dir, var_other42) /* == on <var_nit_dir:nullable String(String)>*/;
+var43 = var44;
+}
+var45 = !var43;
+var40 = var45;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
+}
+var39 = var40;
+}
+if (var39){
+if (varonce46) {
+var47 = varonce46;
 } else {
-var45 = "";
-var46 = 0;
-var47 = string__NativeString__to_s_with_length(var45, var46);
-var44 = var47;
-varonce43 = var44;
+var48 = "/lib";
+var49 = 4;
+var50 = string__NativeString__to_s_with_length(var48, var49);
+var47 = var50;
+varonce46 = var47;
+}
+var51 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var51 = array_instance Array[Object] */
+var52 = 2;
+var53 = NEW_array__NativeArray(var52, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var53)->values[0] = (val*) var_nit_dir;
+((struct instance_array__NativeArray*)var53)->values[1] = (val*) var47;
+{
+((void (*)(val*, val*, long))(var51->class->vft[COLOR_array__Array__with_native]))(var51, var53, var52) /* with_native on <var51:Array[Object]>*/;
+}
+}
+{
+var54 = ((val* (*)(val*))(var51->class->vft[COLOR_string__Object__to_s]))(var51) /* to_s on <var51:Array[Object]>*/;
+}
+var_libname = var54;
+{
+var55 = file__String__file_exists(var_libname);
+}
+if (var55){
+{
+{ /* Inline modelbuilder#ModelBuilder#paths (self) on <self:ModelBuilder> */
+var58 = self->attrs[COLOR_modelbuilder__ModelBuilder___paths].val; /* _paths on <self:ModelBuilder> */
+if (unlikely(var58 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 300);
+show_backtrace(1);
+}
+var56 = var58;
+RET_LABEL57:(void)0;
+}
+}
+{
+array__Array__add(var56, var_libname); /* Direct call array#Array#add on <var56:Array[String]>*/
 }
-((void (*)(val*, val*))(var_42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_42, var44) /* add on <var_42:Array[Object]>*/;
-var48 = ((val* (*)(val*))(self->class->vft[COLOR_kernel__Object__sys]))(self) /* sys on <self:ModelBuilder>*/;
-var49 = ((val* (*)(val*))(var48->class->vft[COLOR_string__Sys__program_name]))(var48) /* program_name on <var48:Sys>*/;
-var50 = ((val* (*)(val*))(var49->class->vft[COLOR_file__String__dirname]))(var49) /* dirname on <var49:String>*/;
-((void (*)(val*, val*))(var_42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_42, var50) /* add on <var_42:Array[Object]>*/;
-if (varonce51) {
-var52 = varonce51;
 } else {
-var53 = "/../lib";
-var54 = 7;
-var55 = string__NativeString__to_s_with_length(var53, var54);
-var52 = var55;
-varonce51 = var52;
 }
-((void (*)(val*, val*))(var_42->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_42, var52) /* add on <var_42:Array[Object]>*/;
-var56 = ((val* (*)(val*))(var_42->class->vft[COLOR_string__Object__to_s]))(var_42) /* to_s on <var_42:Array[Object]>*/;
-var_libname57 = var56;
-var58 = ((short int (*)(val*))(var_libname57->class->vft[COLOR_file__String__file_exists]))(var_libname57) /* file_exists on <var_libname57:String>*/;
-if (var58){
-var59 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
-var60 = ((val* (*)(val*))(var_libname57->class->vft[COLOR_file__String__simplify_path]))(var_libname57) /* simplify_path on <var_libname57:String>*/;
-((void (*)(val*, val*))(var59->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var59, var60) /* add on <var59:Array[String]>*/;
 } else {
 }
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#init for (self: Object, Model, ToolContext) */
 void VIRTUAL_modelbuilder__ModelBuilder__init(val* self, val* p0, val* p1) {
-modelbuilder__ModelBuilder__init(self, p0, p1);
+modelbuilder__ModelBuilder__init(self, p0, p1); /* Direct call modelbuilder#ModelBuilder#init on <self:Object(ModelBuilder)>*/
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#parse for (self: ModelBuilder, Sequence[String]): Array[MModule] */
@@ -577,172 +1161,355 @@ val* modelbuilder__ModelBuilder__parse(val* self, val* p0) {
 val* var /* : Array[MModule] */;
 val* var_modules /* var modules: Sequence[String] */;
 long var1 /* : Int */;
+long var3 /* : Int for extern */;
 long var_time0 /* var time0: Int */;
-val* var2 /* : ToolContext */;
+val* var4 /* : ToolContext */;
+val* var6 /* : ToolContext */;
 static val* varonce;
-val* var3 /* : String */;
-char* var4 /* : NativeString */;
-long var5 /* : Int */;
-val* var6 /* : String */;
-long var7 /* : Int */;
-val* var8 /* : ArraySet[MModule] */;
+val* var7 /* : String */;
+char* var8 /* : NativeString */;
+long var9 /* : Int */;
+val* var10 /* : FlatString */;
+long var11 /* : Int */;
+val* var12 /* : ArraySet[MModule] */;
 val* var_mmodules /* var mmodules: ArraySet[MModule] */;
-val* var9 /* : Iterator[nullable Object] */;
-short int var10 /* : Bool */;
-val* var11 /* : nullable Object */;
+val* var_ /* var : Sequence[String] */;
+val* var13 /* : Iterator[nullable Object] */;
+val* var_14 /* var : IndexedIterator[String] */;
+short int var15 /* : Bool */;
+val* var16 /* : nullable Object */;
 val* var_a /* var a: String */;
-val* var12 /* : nullable AModule */;
+val* var17 /* : nullable AModule */;
 val* var_nmodule /* var nmodule: nullable AModule */;
-val* var13 /* : null */;
-short int var14 /* : Bool */;
-val* var15 /* : nullable MModule */;
-long var16 /* : Int */;
+val* var18 /* : null */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var22 /* : Bool */;
+short int var24 /* : Bool */;
+val* var25 /* : nullable MModule */;
+val* var27 /* : nullable MModule */;
+long var30 /* : Int */;
+long var32 /* : Int for extern */;
 long var_time1 /* var time1: Int */;
-val* var17 /* : ToolContext */;
-static val* varonce18;
-val* var19 /* : String */;
-char* var20 /* : NativeString */;
-long var21 /* : Int */;
-val* var22 /* : String */;
-long var23 /* : Int */;
-long var25 /* : Int */;
-static val* varonce26;
-val* var27 /* : String */;
-char* var28 /* : NativeString */;
-long var29 /* : Int */;
-val* var30 /* : String */;
-val* var31 /* : Array[Object] */;
-long var32 /* : Int */;
-val* var33 /* : NativeArray[Object] */;
-val* var34 /* : Object */;
-val* var35 /* : String */;
-long var36 /* : Int */;
-val* var37 /* : ToolContext */;
-val* var38 /* : ToolContext */;
-val* var39 /* : OptionBool */;
-val* var40 /* : nullable Object */;
-short int var41 /* : Bool */;
-val* var42 /* : ToolContext */;
-static val* varonce43;
-val* var44 /* : String */;
-char* var45 /* : NativeString */;
-long var46 /* : Int */;
-val* var47 /* : String */;
+val* var33 /* : ToolContext */;
+val* var35 /* : ToolContext */;
+static val* varonce36;
+val* var37 /* : String */;
+char* var38 /* : NativeString */;
+long var39 /* : Int */;
+val* var40 /* : FlatString */;
+long var41 /* : Int */;
+short int var43 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+long var44 /* : Int */;
+static val* varonce45;
+val* var46 /* : String */;
+char* var47 /* : NativeString */;
 long var48 /* : Int */;
-long var49 /* : Int */;
-val* var50 /* : Array[nullable Object] */;
+val* var49 /* : FlatString */;
+val* var50 /* : Array[Object] */;
+long var51 /* : Int */;
+val* var52 /* : NativeArray[Object] */;
+val* var53 /* : Object */;
+val* var54 /* : String */;
+long var55 /* : Int */;
+val* var56 /* : ToolContext */;
+val* var58 /* : ToolContext */;
+val* var59 /* : ToolContext */;
+val* var61 /* : ToolContext */;
+val* var62 /* : OptionBool */;
+val* var64 /* : OptionBool */;
+val* var65 /* : nullable Object */;
+val* var67 /* : nullable Object */;
+short int var68 /* : Bool */;
+val* var69 /* : ToolContext */;
+val* var71 /* : ToolContext */;
+static val* varonce72;
+val* var73 /* : String */;
+char* var74 /* : NativeString */;
+long var75 /* : Int */;
+val* var76 /* : FlatString */;
+long var77 /* : Int */;
+long var78 /* : Int */;
+val* var80 /* : Array[nullable Object] */;
 var_modules = p0;
-var1 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
+{
+{ /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
+var3 = kernel_Any_Any_get_time_0(self);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+}
 var_time0 = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var6 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
 if (varonce) {
-var3 = varonce;
-} else {
-var4 = "*** PARSE ***";
-var5 = 13;
-var6 = string__NativeString__to_s_with_length(var4, var5);
-var3 = var6;
-varonce = var3;
-}
-var7 = 1;
-((void (*)(val*, val*, long))(var2->class->vft[COLOR_toolcontext__ToolContext__info]))(var2, var3, var7) /* info on <var2:ToolContext>*/;
-var8 = NEW_array__ArraySet(&type_array__ArraySetmmodule__MModule);
-((void (*)(val*))(var8->class->vft[COLOR_array__ArraySet__init]))(var8) /* init on <var8:ArraySet[MModule]>*/;
-var_mmodules = var8;
-var9 = ((val* (*)(val*))(var_modules->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_modules) /* iterator on <var_modules:Sequence[String]>*/;
+var7 = varonce;
+} else {
+var8 = "*** PARSE ***";
+var9 = 13;
+var10 = string__NativeString__to_s_with_length(var8, var9);
+var7 = var10;
+varonce = var7;
+}
+var11 = 1;
+{
+toolcontext__ToolContext__info(var4, var7, var11); /* Direct call toolcontext#ToolContext#info on <var4:ToolContext>*/
+}
+var12 = NEW_array__ArraySet(&type_array__ArraySetmmodule__MModule);
+{
+((void (*)(val*))(var12->class->vft[COLOR_kernel__Object__init]))(var12) /* init on <var12:ArraySet[MModule]>*/;
+}
+var_mmodules = var12;
+var_ = var_modules;
+{
+var13 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Sequence[String]>*/;
+}
+var_14 = var13;
 for(;;) {
-var10 = ((short int (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var9) /* is_ok on <var9:Iterator[nullable Object]>*/;
-if(!var10) break;
-var11 = ((val* (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__item]))(var9) /* item on <var9:Iterator[nullable Object]>*/;
-var_a = var11;
-var12 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var_a) /* load_module on <self:ModelBuilder>*/;
-var_nmodule = var12;
-var13 = NULL;
+{
+var15 = ((short int (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_14) /* is_ok on <var_14:IndexedIterator[String]>*/;
+}
+if (var15){
+{
+var16 = ((val* (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__item]))(var_14) /* item on <var_14:IndexedIterator[String]>*/;
+}
+var_a = var16;
+{
+var17 = modelbuilder__ModelBuilder__load_module(self, var_a);
+}
+var_nmodule = var17;
+var18 = NULL;
 if (var_nmodule == NULL) {
-var14 = 1; /* is null */
+var19 = 1; /* is null */
 } else {
-var14 = 0; /* arg is null but recv is not */
+var19 = 0; /* arg is null but recv is not */
 }
-if (var14){
-goto CONTINUE_label;
+if (0) {
+{ /* Inline kernel#Object#== (var_nmodule,var18) on <var_nmodule:nullable AModule> */
+var_other = var18;
+{
+{ /* Inline kernel#Object#is_same_instance (var_nmodule,var_other) on <var_nmodule:nullable AModule(AModule)> */
+var24 = var_nmodule == var_other;
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
+}
+}
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
+}
+var19 = var20;
+}
+if (var19){
+goto BREAK_label;
 } else {
 }
-var15 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:nullable AModule(AModule)>*/;
-if (var15 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 139);
+{
+{ /* Inline modelbuilder#AModule#mmodule (var_nmodule) on <var_nmodule:nullable AModule(AModule)> */
+var27 = var_nmodule->attrs[COLOR_modelbuilder__AModule___mmodule].val; /* _mmodule on <var_nmodule:nullable AModule(AModule)> */
+var25 = var27;
+RET_LABEL26:(void)0;
+}
+}
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 166);
 show_backtrace(1);
 }
-((void (*)(val*, val*))(var_mmodules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_mmodules, var15) /* add on <var_mmodules:ArraySet[MModule]>*/;
-CONTINUE_label: (void)0;
-((void (*)(val*))(var9->class->vft[COLOR_abstract_collection__Iterator__next]))(var9) /* next on <var9:Iterator[nullable Object]>*/;
+{
+array__ArraySet__add(var_mmodules, var25); /* Direct call array#ArraySet#add on <var_mmodules:ArraySet[MModule]>*/
 }
 BREAK_label: (void)0;
-var16 = ((long (*)(val*))(self->class->vft[COLOR_time__Object__get_time]))(self) /* get_time on <self:ModelBuilder>*/;
-var_time1 = var16;
-var17 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-if (varonce18) {
-var19 = varonce18;
-} else {
-var20 = "*** END PARSE: ";
-var21 = 15;
-var22 = string__NativeString__to_s_with_length(var20, var21);
-var19 = var22;
-varonce18 = var19;
-}
-{ /* Inline kernel#Int#- (var_time1,var_time0) */
-var25 = var_time1 - var_time0;
-var23 = var25;
-goto RET_LABEL24;
-RET_LABEL24:(void)0;
+{
+((void (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__next]))(var_14) /* next on <var_14:IndexedIterator[String]>*/;
 }
-if (varonce26) {
-var27 = varonce26;
 } else {
-var28 = " ***";
-var29 = 4;
-var30 = string__NativeString__to_s_with_length(var28, var29);
-var27 = var30;
-varonce26 = var27;
+goto BREAK_label28;
 }
-var31 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var31 = array_instance Array[Object] */
-var32 = 3;
-var33 = NEW_array__NativeArray(var32, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var33)->values[0] = (val*) var19;
-var34 = BOX_kernel__Int(var23); /* autobox from Int to Object */
-((struct instance_array__NativeArray*)var33)->values[1] = (val*) var34;
-((struct instance_array__NativeArray*)var33)->values[2] = (val*) var27;
-((void (*)(val*, val*, long))(var31->class->vft[COLOR_array__Array__with_native]))(var31, var33, var32) /* with_native on <var31:Array[Object]>*/;
-}
-var35 = ((val* (*)(val*))(var31->class->vft[COLOR_string__Object__to_s]))(var31) /* to_s on <var31:Array[Object]>*/;
-var36 = 2;
-((void (*)(val*, val*, long))(var17->class->vft[COLOR_toolcontext__ToolContext__info]))(var17, var35, var36) /* info on <var17:ToolContext>*/;
-var37 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-((void (*)(val*))(var37->class->vft[COLOR_toolcontext__ToolContext__check_errors]))(var37) /* check_errors on <var37:ToolContext>*/;
-var38 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var39 = ((val* (*)(val*))(var38->class->vft[COLOR_modelbuilder__ToolContext__opt_only_parse]))(var38) /* opt_only_parse on <var38:ToolContext>*/;
-var40 = ((val* (*)(val*))(var39->class->vft[COLOR_opts__Option__value]))(var39) /* value on <var39:OptionBool>*/;
-var41 = ((struct instance_kernel__Bool*)var40)->value; /* autounbox from nullable Object to Bool */;
-if (var41){
-var42 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-if (varonce43) {
-var44 = varonce43;
+}
+BREAK_label28: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_14) on <var_14:IndexedIterator[String]> */
+RET_LABEL29:(void)0;
+}
+}
+{
+{ /* Inline time#Object#get_time (self) on <self:ModelBuilder> */
+var32 = kernel_Any_Any_get_time_0(self);
+var30 = var32;
+goto RET_LABEL31;
+RET_LABEL31:(void)0;
+}
+}
+var_time1 = var30;
+{
+{ /* 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", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var33 = var35;
+RET_LABEL34:(void)0;
+}
+}
+if (varonce36) {
+var37 = varonce36;
+} else {
+var38 = "*** END PARSE: ";
+var39 = 15;
+var40 = string__NativeString__to_s_with_length(var38, var39);
+var37 = var40;
+varonce36 = var37;
+}
+{
+{ /* Inline kernel#Int#- (var_time1,var_time0) on <var_time1:Int> */
+/* Covariant cast for argument 0 (i) <var_time0:Int> isa OTHER */
+/* <var_time0:Int> isa OTHER */
+var43 = 1; /* easy <var_time0:Int> isa OTHER*/
+if (unlikely(!var43)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
+show_backtrace(1);
+}
+var44 = var_time1 - var_time0;
+var41 = var44;
+goto RET_LABEL42;
+RET_LABEL42:(void)0;
+}
+}
+if (varonce45) {
+var46 = varonce45;
+} else {
+var47 = " ***";
+var48 = 4;
+var49 = string__NativeString__to_s_with_length(var47, var48);
+var46 = var49;
+varonce45 = var46;
+}
+var50 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var50 = array_instance Array[Object] */
+var51 = 3;
+var52 = NEW_array__NativeArray(var51, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var52)->values[0] = (val*) var37;
+var53 = BOX_kernel__Int(var41); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var52)->values[1] = (val*) var53;
+((struct instance_array__NativeArray*)var52)->values[2] = (val*) var46;
+{
+((void (*)(val*, val*, long))(var50->class->vft[COLOR_array__Array__with_native]))(var50, var52, var51) /* with_native on <var50:Array[Object]>*/;
+}
+}
+{
+var54 = ((val* (*)(val*))(var50->class->vft[COLOR_string__Object__to_s]))(var50) /* to_s on <var50:Array[Object]>*/;
+}
+var55 = 2;
+{
+toolcontext__ToolContext__info(var33, var54, var55); /* Direct call toolcontext#ToolContext#info on <var33:ToolContext>*/
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var58 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var58 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var56 = var58;
+RET_LABEL57:(void)0;
+}
+}
+{
+toolcontext__ToolContext__check_errors(var56); /* Direct call toolcontext#ToolContext#check_errors on <var56:ToolContext>*/
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var61 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var61 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var59 = var61;
+RET_LABEL60:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ToolContext#opt_only_parse (var59) on <var59:ToolContext> */
+var64 = var59->attrs[COLOR_modelbuilder__ToolContext___opt_only_parse].val; /* _opt_only_parse on <var59:ToolContext> */
+if (unlikely(var64 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_only_parse");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 39);
+show_backtrace(1);
+}
+var62 = var64;
+RET_LABEL63:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var62) on <var62:OptionBool> */
+var67 = var62->attrs[COLOR_opts__Option___value].val; /* _value on <var62:OptionBool> */
+var65 = var67;
+RET_LABEL66:(void)0;
+}
+}
+var68 = ((struct instance_kernel__Bool*)var65)->value; /* autounbox from nullable Object to Bool */;
+if (var68){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var71 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var71 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var69 = var71;
+RET_LABEL70:(void)0;
+}
+}
+if (varonce72) {
+var73 = varonce72;
 } else {
-var45 = "*** ONLY PARSE...";
-var46 = 17;
-var47 = string__NativeString__to_s_with_length(var45, var46);
-var44 = var47;
-varonce43 = var44;
+var74 = "*** ONLY PARSE...";
+var75 = 17;
+var76 = string__NativeString__to_s_with_length(var74, var75);
+var73 = var76;
+varonce72 = var73;
+}
+var77 = 1;
+{
+toolcontext__ToolContext__info(var69, var73, var77); /* Direct call toolcontext#ToolContext#info on <var69:ToolContext>*/
+}
+var78 = 0;
+{
+{ /* Inline kernel#Object#exit (self,var78) on <self:ModelBuilder> */
+exit(var78);
+RET_LABEL79:(void)0;
+}
 }
-var48 = 1;
-((void (*)(val*, val*, long))(var42->class->vft[COLOR_toolcontext__ToolContext__info]))(var42, var44, var48) /* info on <var42:ToolContext>*/;
-var49 = 0;
-((void (*)(val*, long))(self->class->vft[COLOR_kernel__Object__exit]))(self, var49) /* exit on <self:ModelBuilder>*/;
 } else {
 }
-var50 = ((val* (*)(val*))(var_mmodules->class->vft[COLOR_array__Collection__to_a]))(var_mmodules) /* to_a on <var_mmodules:ArraySet[MModule]>*/;
-var = var50;
+{
+var80 = array__Collection__to_a(var_mmodules);
+}
+var = var80;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -763,151 +1530,273 @@ val* var_anode /* var anode: ANode */;
 val* var_mmodule /* var mmodule: MModule */;
 val* var_name /* var name: String */;
 val* var1 /* : Model */;
-val* var2 /* : nullable Array[MClass] */;
+val* var3 /* : Model */;
+val* var4 /* : nullable Array[MClass] */;
 val* var_classes /* var classes: nullable Array[MClass] */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
 val* var5 /* : null */;
-val* var6 /* : null */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : null */;
+val* var9 /* : null */;
 val* var_res /* var res: nullable MClass */;
-val* var7 /* : Iterator[nullable Object] */;
-short int var8 /* : Bool */;
-val* var9 /* : nullable Object */;
-val* var_mclass /* var mclass: MClass */;
-val* var10 /* : POSetElement[MModule] */;
-val* var11 /* : MModule */;
+val* var_ /* var : Array[MClass] */;
+val* var10 /* : ArrayIterator[nullable Object] */;
+val* var_11 /* var : ArrayIterator[MClass] */;
 short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-val* var14 /* : MModule */;
-val* var15 /* : MVisibility */;
-short int var16 /* : Bool */;
-short int var17 /* : Bool */;
-val* var18 /* : null */;
-short int var19 /* : Bool */;
-static val* varonce;
-val* var20 /* : String */;
-char* var21 /* : NativeString */;
-long var22 /* : Int */;
-val* var23 /* : String */;
-static val* varonce24;
-val* var25 /* : String */;
-char* var26 /* : NativeString */;
-long var27 /* : Int */;
-val* var28 /* : String */;
-val* var29 /* : String */;
-static val* varonce30;
-val* var31 /* : String */;
-char* var32 /* : NativeString */;
-long var33 /* : Int */;
-val* var34 /* : String */;
-val* var35 /* : String */;
-val* var36 /* : Array[Object] */;
-long var37 /* : Int */;
-val* var38 /* : NativeArray[Object] */;
-val* var39 /* : String */;
-val* var40 /* : null */;
+val* var13 /* : nullable Object */;
+val* var_mclass /* var mclass: MClass */;
+val* var14 /* : POSetElement[MModule] */;
+val* var16 /* : POSetElement[MModule] */;
+val* var17 /* : MModule */;
+val* var19 /* : MModule */;
+short int var20 /* : Bool */;
+short int var21 /* : Bool */;
+val* var22 /* : MModule */;
+val* var24 /* : MModule */;
+val* var25 /* : MVisibility */;
+val* var27 /* : MVisibility */;
+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 */;
+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 */;
+val* var45 /* : FlatString */;
+val* var46 /* : String */;
+static val* varonce47;
+val* var48 /* : String */;
+char* var49 /* : NativeString */;
+long var50 /* : Int */;
+val* var51 /* : FlatString */;
+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;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_model__Model__get_mclasses_by_name]))(var1, var_name) /* get_mclasses_by_name on <var1:Model>*/;
-var_classes = var2;
-var3 = NULL;
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = model__Model__get_mclasses_by_name(var1, var_name);
+}
+var_classes = var4;
+var5 = NULL;
 if (var_classes == NULL) {
-var4 = 1; /* is null */
+var6 = 1; /* is null */
 } else {
-var4 = 0; /* arg is null but recv is not */
+var6 = 0; /* arg is null but recv is not */
 }
-if (var4){
-var5 = NULL;
-var = var5;
+if (0) {
+var7 = array__Array___61d_61d(var_classes, var5);
+var6 = var7;
+}
+if (var6){
+var8 = NULL;
+var = var8;
 goto RET_LABEL;
 } else {
 }
-var6 = NULL;
-var_res = var6;
-var7 = ((val* (*)(val*))(var_classes->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_classes) /* iterator on <var_classes:nullable Array[MClass](Array[MClass])>*/;
+var9 = NULL;
+var_res = var9;
+var_ = var_classes;
+{
+var10 = array__AbstractArrayRead__iterator(var_);
+}
+var_11 = var10;
 for(;;) {
-var8 = ((short int (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var7) /* is_ok on <var7:Iterator[nullable Object]>*/;
-if(!var8) break;
-var9 = ((val* (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__item]))(var7) /* item on <var7:Iterator[nullable Object]>*/;
-var_mclass = var9;
-var10 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__in_importation]))(var_mmodule) /* in_importation on <var_mmodule:MModule>*/;
-var11 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
-var12 = ((short int (*)(val*, val*))(var10->class->vft[COLOR_poset__POSetElement___60d_61d]))(var10, var11) /* <= on <var10:POSetElement[MModule]>*/;
-var13 = !var12;
-if (var13){
-goto CONTINUE_label;
-} else {
-}
-var14 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__intro_mmodule]))(var_mclass) /* intro_mmodule on <var_mclass:MClass>*/;
-var15 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__visibility]))(var_mclass) /* visibility on <var_mclass:MClass>*/;
-var16 = ((short int (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__is_visible]))(var_mmodule, var14, var15) /* is_visible on <var_mmodule:MModule>*/;
-var17 = !var16;
-if (var17){
-goto CONTINUE_label;
+{
+var12 = array__ArrayIterator__is_ok(var_11);
+}
+if (var12){
+{
+var13 = array__ArrayIterator__item(var_11);
+}
+var_mclass = var13;
+{
+{ /* Inline mmodule#MModule#in_importation (var_mmodule) on <var_mmodule:MModule> */
+var16 = var_mmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mmodule:MModule> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
+show_backtrace(1);
+}
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+{
+{ /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
+var19 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
+if (unlikely(var19 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 347);
+show_backtrace(1);
+}
+var17 = var19;
+RET_LABEL18:(void)0;
+}
+}
+{
+var20 = poset__POSetElement___60d_61d(var14, var17);
+}
+var21 = !var20;
+if (var21){
+goto BREAK_label;
 } else {
 }
-var18 = NULL;
+{
+{ /* Inline model#MClass#intro_mmodule (var_mclass) on <var_mclass:MClass> */
+var24 = var_mclass->attrs[COLOR_model__MClass___intro_mmodule].val; /* _intro_mmodule on <var_mclass:MClass> */
+if (unlikely(var24 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mmodule");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 347);
+show_backtrace(1);
+}
+var22 = var24;
+RET_LABEL23:(void)0;
+}
+}
+{
+{ /* Inline model#MClass#visibility (var_mclass) on <var_mclass:MClass> */
+var27 = var_mclass->attrs[COLOR_model__MClass___visibility].val; /* _visibility on <var_mclass:MClass> */
+if (unlikely(var27 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _visibility");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 375);
+show_backtrace(1);
+}
+var25 = var27;
+RET_LABEL26:(void)0;
+}
+}
+{
+var28 = mmodule__MModule__is_visible(var_mmodule, var22, var25);
+}
+var29 = !var28;
+if (var29){
+goto BREAK_label;
+} else {
+}
+var30 = NULL;
 if (var_res == NULL) {
-var19 = 1; /* is null */
+var31 = 1; /* is null */
 } else {
-var19 = 0; /* arg is null but recv is not */
+var31 = 0; /* arg is null but recv is not */
 }
-if (var19){
+if (0) {
+{ /* Inline kernel#Object#== (var_res,var30) on <var_res:nullable MClass> */
+var_other = var30;
+{
+{ /* 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 = var34;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
+}
+var31 = var32;
+}
+if (var31){
 var_res = var_mclass;
 } else {
 if (varonce) {
-var20 = varonce;
+var37 = varonce;
 } else {
-var21 = "Ambigous class name \'";
-var22 = 21;
-var23 = string__NativeString__to_s_with_length(var21, var22);
-var20 = var23;
-varonce = var20;
+var38 = "Ambigous class name \'";
+var39 = 21;
+var40 = string__NativeString__to_s_with_length(var38, var39);
+var37 = var40;
+varonce = var37;
 }
-if (varonce24) {
-var25 = varonce24;
+if (varonce41) {
+var42 = varonce41;
 } else {
-var26 = "\'; conflict between ";
-var27 = 20;
-var28 = string__NativeString__to_s_with_length(var26, var27);
-var25 = var28;
-varonce24 = var25;
+var43 = "\'; conflict between ";
+var44 = 20;
+var45 = string__NativeString__to_s_with_length(var43, var44);
+var42 = var45;
+varonce41 = var42;
 }
-var29 = ((val* (*)(val*))(var_mclass->class->vft[COLOR_model__MClass__full_name]))(var_mclass) /* full_name on <var_mclass:MClass>*/;
-if (varonce30) {
-var31 = varonce30;
+{
+var46 = model__MClass__full_name(var_mclass);
+}
+if (varonce47) {
+var48 = varonce47;
 } else {
-var32 = " and ";
-var33 = 5;
-var34 = string__NativeString__to_s_with_length(var32, var33);
-var31 = var34;
-varonce30 = var31;
+var49 = " and ";
+var50 = 5;
+var51 = string__NativeString__to_s_with_length(var49, var50);
+var48 = var51;
+varonce47 = var48;
 }
-var35 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MClass__full_name]))(var_res) /* full_name on <var_res:nullable MClass(MClass)>*/;
-var36 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var36 = array_instance Array[Object] */
-var37 = 6;
-var38 = NEW_array__NativeArray(var37, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var38)->values[0] = (val*) var20;
-((struct instance_array__NativeArray*)var38)->values[1] = (val*) var_name;
-((struct instance_array__NativeArray*)var38)->values[2] = (val*) var25;
-((struct instance_array__NativeArray*)var38)->values[3] = (val*) var29;
-((struct instance_array__NativeArray*)var38)->values[4] = (val*) var31;
-((struct instance_array__NativeArray*)var38)->values[5] = (val*) var35;
-((void (*)(val*, val*, long))(var36->class->vft[COLOR_array__Array__with_native]))(var36, var38, var37) /* with_native on <var36:Array[Object]>*/;
+{
+var52 = model__MClass__full_name(var_res);
 }
-var39 = ((val* (*)(val*))(var36->class->vft[COLOR_string__Object__to_s]))(var36) /* to_s on <var36:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var39) /* error on <self:ModelBuilder>*/;
-var40 = NULL;
-var = var40;
-goto RET_LABEL;
+var53 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var53 = array_instance Array[Object] */
+var54 = 6;
+var55 = NEW_array__NativeArray(var54, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var55)->values[0] = (val*) var37;
+((struct instance_array__NativeArray*)var55)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var55)->values[2] = (val*) var42;
+((struct instance_array__NativeArray*)var55)->values[3] = (val*) var46;
+((struct instance_array__NativeArray*)var55)->values[4] = (val*) var48;
+((struct instance_array__NativeArray*)var55)->values[5] = (val*) var52;
+{
+((void (*)(val*, val*, long))(var53->class->vft[COLOR_array__Array__with_native]))(var53, var55, var54) /* with_native on <var53:Array[Object]>*/;
+}
+}
+{
+var56 = ((val* (*)(val*))(var53->class->vft[COLOR_string__Object__to_s]))(var53) /* to_s on <var53:Array[Object]>*/;
 }
-CONTINUE_label: (void)0;
-((void (*)(val*))(var7->class->vft[COLOR_abstract_collection__Iterator__next]))(var7) /* next on <var7:Iterator[nullable Object]>*/;
+{
+modelbuilder__ModelBuilder__error(self, var_anode, var56); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
+}
+var57 = NULL;
+var = var57;
+goto RET_LABEL;
 }
 BREAK_label: (void)0;
+{
+array__ArrayIterator__next(var_11); /* Direct call array#ArrayIterator#next on <var_11:ArrayIterator[MClass]>*/
+}
+} else {
+goto BREAK_label58;
+}
+}
+BREAK_label58: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_11) on <var_11:ArrayIterator[MClass]> */
+RET_LABEL59:(void)0;
+}
+}
 var = var_res;
 goto RET_LABEL;
 RET_LABEL:;
@@ -930,293 +1819,978 @@ val* var_mmodule /* var mmodule: MModule */;
 val* var_mtype /* var mtype: MType */;
 val* var_name /* var name: String */;
 val* var1 /* : Model */;
-val* var2 /* : nullable Array[MProperty] */;
+val* var3 /* : Model */;
+val* var4 /* : nullable Array[MProperty] */;
 val* var_props /* var props: nullable Array[MProperty] */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
 val* var5 /* : null */;
-val* var6 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
-val* var7 /* : nullable Object */;
-val* var_cache /* var cache: nullable MProperty */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
 val* var8 /* : null */;
-short int var9 /* : Bool */;
-val* var10 /* : null */;
+val* var9 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+val* var11 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+val* var12 /* : nullable Object */;
+val* var_cache /* var cache: nullable MProperty */;
+val* var13 /* : null */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+val* var20 /* : null */;
 val* var_res /* var res: nullable MProperty */;
-val* var11 /* : null */;
+val* var21 /* : null */;
 val* var_ress /* var ress: nullable Array[MProperty] */;
-val* var12 /* : Iterator[nullable Object] */;
-short int var13 /* : Bool */;
-val* var14 /* : nullable Object */;
+val* var_ /* var : Array[MProperty] */;
+val* var22 /* : ArrayIterator[nullable Object] */;
+val* var_23 /* var : ArrayIterator[MProperty] */;
+short int var24 /* : Bool */;
+val* var25 /* : nullable Object */;
 val* var_mprop /* var mprop: MProperty */;
-short int var15 /* : Bool */;
-short int var16 /* : Bool */;
-val* var17 /* : MClassDef */;
-val* var18 /* : MModule */;
-val* var19 /* : MVisibility */;
-short int var20 /* : Bool */;
-short int var21 /* : Bool */;
-val* var22 /* : null */;
-short int var23 /* : Bool */;
-val* var24 /* : MClassDef */;
-val* var25 /* : MClassType */;
-val* var_restype /* var restype: MClassType */;
-val* var26 /* : MClassDef */;
-val* var27 /* : MClassType */;
-val* var_mproptype /* var mproptype: MClassType */;
-val* var28 /* : null */;
-short int var29 /* : Bool */;
-val* var30 /* : null */;
-short int var31 /* : Bool */;
-val* var32 /* : null */;
-short int var33 /* : Bool */;
-val* var34 /* : Array[MProperty] */;
-val* var35 /* : null */;
-short int var36 /* : Bool */;
-val* var37 /* : MClassDef */;
-val* var38 /* : MClassType */;
-val* var_restype39 /* var restype: MClassType */;
-val* var40 /* : Iterator[nullable Object] */;
+short int var26 /* : Bool */;
+short int var27 /* : Bool */;
+val* var28 /* : MClassDef */;
+val* var30 /* : MClassDef */;
+val* var31 /* : MModule */;
+val* var33 /* : MModule */;
+val* var34 /* : MVisibility */;
+val* var36 /* : MVisibility */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
 short int var41 /* : Bool */;
-val* var42 /* : nullable Object */;
-val* var_mprop43 /* var mprop: MProperty */;
-val* var44 /* : MClassDef */;
-val* var45 /* : MClassType */;
-val* var_mproptype46 /* var mproptype: MClassType */;
-val* var47 /* : null */;
+int cltype;
+int idtype;
+short int var_42 /* var : Bool */;
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+short int var_46 /* var : Bool */;
+short int var47 /* : Bool */;
 short int var48 /* : Bool */;
-short int var49 /* : Bool */;
+int cltype49;
+int idtype50;
+short int var51 /* : Bool */;
+short int var_52 /* var : Bool */;
+val* var53 /* : MClassDef */;
+val* var55 /* : MClassDef */;
+val* var56 /* : MClass */;
+val* var58 /* : MClass */;
+val* var59 /* : MClass */;
+val* var61 /* : MClass */;
+short int var62 /* : Bool */;
+short int var63 /* : Bool */;
+short int var65 /* : Bool */;
+short int var66 /* : Bool */;
+short int var67 /* : Bool */;
+val* var68 /* : null */;
+short int var69 /* : Bool */;
+short int var70 /* : Bool */;
+val* var_other72 /* var other: nullable Object */;
+short int var73 /* : Bool */;
+short int var75 /* : Bool */;
+short int var76 /* : Bool */;
+short int var77 /* : Bool */;
+short int var78 /* : Bool */;
+short int var79 /* : Bool */;
+int cltype80;
+int idtype81;
+short int var_82 /* var : Bool */;
+short int var83 /* : Bool */;
+int cltype84;
+int idtype85;
+short int var_86 /* var : Bool */;
+short int var87 /* : Bool */;
+short int var89 /* : Bool */;
+short int var_90 /* var : Bool */;
+short int var91 /* : Bool */;
+short int var93 /* : Bool */;
+val* var94 /* : MClassDef */;
+val* var96 /* : MClassDef */;
+val* var97 /* : MClassType */;
+val* var99 /* : MClassType */;
+val* var_restype /* var restype: MClassType */;
+val* var100 /* : MClassDef */;
+val* var102 /* : MClassDef */;
+val* var103 /* : MClassType */;
+val* var105 /* : MClassType */;
+val* var_mproptype /* var mproptype: MClassType */;
+val* var106 /* : null */;
+short int var107 /* : Bool */;
+val* var108 /* : null */;
+short int var109 /* : Bool */;
+short int var110 /* : Bool */;
+val* var111 /* : Array[MProperty] */;
+short int var114 /* : Bool */;
+short int var115 /* : Bool */;
+val* var116 /* : null */;
+short int var117 /* : Bool */;
+short int var118 /* : Bool */;
+short int var120 /* : Bool */;
+short int var121 /* : Bool */;
+short int var122 /* : Bool */;
+short int var_123 /* var : Bool */;
+short int var124 /* : Bool */;
+int cltype125;
+int idtype126;
+short int var_127 /* var : Bool */;
+short int var128 /* : Bool */;
+short int var130 /* : Bool */;
+val* var131 /* : MClassDef */;
+val* var133 /* : MClassDef */;
+val* var134 /* : MClassType */;
+val* var136 /* : MClassType */;
+val* var_restype137 /* var restype: MClassType */;
+val* var138 /* : Array[MProperty] */;
+val* var_ress2 /* var ress2: Array[MProperty] */;
+val* var_139 /* var : Array[MProperty] */;
+val* var140 /* : ArrayIterator[nullable Object] */;
+val* var_141 /* var : ArrayIterator[MProperty] */;
+short int var142 /* : Bool */;
+val* var143 /* : nullable Object */;
+val* var_mprop144 /* var mprop: MProperty */;
+val* var145 /* : MClassDef */;
+val* var147 /* : MClassDef */;
+val* var148 /* : MClassType */;
+val* var150 /* : MClassType */;
+val* var_mproptype151 /* var mproptype: MClassType */;
+val* var152 /* : null */;
+short int var153 /* : Bool */;
+short int var154 /* : Bool */;
+short int var155 /* : Bool */;
+short int var156 /* : Bool */;
+int cltype157;
+int idtype158;
+short int var159 /* : Bool */;
+short int var_160 /* var : Bool */;
+short int var161 /* : Bool */;
+short int var163 /* : Bool */;
+short int var164 /* : Bool */;
+short int var167 /* : Bool */;
+val* var168 /* : null */;
+val* var169 /* : null */;
+short int var170 /* : Bool */;
+short int var171 /* : Bool */;
+short int var173 /* : Bool */;
+short int var174 /* : Bool */;
+short int var175 /* : Bool */;
+long var176 /* : Int */;
+long var178 /* : Int */;
+long var179 /* : Int */;
+short int var180 /* : Bool */;
+short int var182 /* : Bool */;
+int cltype183;
+int idtype184;
+const char* var_class_name;
+short int var185 /* : Bool */;
+val* var186 /* : Array[String] */;
+val* var_s /* var s: Array[String] */;
+val* var_187 /* var : Array[MProperty] */;
+val* var188 /* : ArrayIterator[nullable Object] */;
+val* var_189 /* var : ArrayIterator[MProperty] */;
+short int var190 /* : Bool */;
+val* var191 /* : nullable Object */;
+val* var_mprop192 /* var mprop: MProperty */;
+val* var193 /* : String */;
 static val* varonce;
-val* var50 /* : String */;
-char* var51 /* : NativeString */;
-long var52 /* : Int */;
-val* var53 /* : String */;
-static val* varonce54;
-val* var55 /* : String */;
-char* var56 /* : NativeString */;
-long var57 /* : Int */;
-val* var58 /* : String */;
-static val* varonce59;
-val* var60 /* : String */;
-char* var61 /* : NativeString */;
-long var62 /* : Int */;
-val* var63 /* : String */;
-val* var64 /* : String */;
-static val* varonce65;
-val* var66 /* : String */;
-char* var67 /* : NativeString */;
-long var68 /* : Int */;
-val* var69 /* : String */;
-val* var70 /* : String */;
-val* var71 /* : Array[Object] */;
-long var72 /* : Int */;
-val* var73 /* : NativeArray[Object] */;
-val* var74 /* : String */;
-val* var75 /* : null */;
-val* var77 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+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 */;
+static val* varonce210;
+val* var211 /* : String */;
+char* var212 /* : NativeString */;
+long var213 /* : Int */;
+val* var214 /* : FlatString */;
+val* var215 /* : String */;
+val* var216 /* : Array[Object] */;
+long var217 /* : Int */;
+val* var218 /* : NativeArray[Object] */;
+val* var219 /* : String */;
+val* var220 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+val* var222 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
 var_anode = p0;
 var_mmodule = p1;
 var_mtype = p2;
 var_name = p3;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_model__Model__get_mproperties_by_name]))(var1, var_name) /* get_mproperties_by_name on <var1:Model>*/;
-var_props = var2;
-var3 = NULL;
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = model__Model__get_mproperties_by_name(var1, var_name);
+}
+var_props = var4;
+var5 = NULL;
 if (var_props == NULL) {
-var4 = 1; /* is null */
+var6 = 1; /* is null */
 } else {
-var4 = 0; /* arg is null but recv is not */
+var6 = 0; /* arg is null but recv is not */
 }
-if (var4){
-var5 = NULL;
-var = var5;
+if (0) {
+var7 = array__Array___61d_61d(var_props, var5);
+var6 = var7;
+}
+if (var6){
+var8 = NULL;
+var = var8;
 goto RET_LABEL;
 } else {
 }
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache]))(self) /* try_get_mproperty_by_name2_cache on <self:ModelBuilder>*/;
-var7 = ((val* (*)(val*, val*, val*, val*))(var6->class->vft[COLOR_more_collections__HashMap3___91d_93d]))(var6, var_mmodule, var_mtype, var_name) /* [] on <var6:HashMap3[MModule, MType, String, nullable MProperty]>*/;
-var_cache = var7;
-var8 = NULL;
+{
+{ /* Inline modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache (self) on <self:ModelBuilder> */
+var11 = self->attrs[COLOR_modelbuilder__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _try_get_mproperty_by_name2_cache");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 291);
+show_backtrace(1);
+}
+var9 = var11;
+RET_LABEL10:(void)0;
+}
+}
+{
+var12 = more_collections__HashMap3___91d_93d(var9, var_mmodule, var_mtype, var_name);
+}
+var_cache = var12;
+var13 = NULL;
 if (var_cache == NULL) {
-var9 = 0; /* is null */
+var14 = 0; /* is null */
 } else {
-var9 = 1; /* arg is null and recv is not */
+var14 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_cache,var13) on <var_cache:nullable MProperty> */
+var_other = var13;
+{
+var18 = ((short int (*)(val*, val*))(var_cache->class->vft[COLOR_kernel__Object___61d_61d]))(var_cache, var_other) /* == on <var_cache:nullable MProperty(MProperty)>*/;
+var17 = var18;
+}
+var19 = !var17;
+var15 = var19;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
+}
+var14 = var15;
 }
-if (var9){
+if (var14){
 var = var_cache;
 goto RET_LABEL;
 } else {
 }
-var10 = NULL;
-var_res = var10;
-var11 = NULL;
-var_ress = var11;
-var12 = ((val* (*)(val*))(var_props->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_props) /* iterator on <var_props:nullable Array[MProperty](Array[MProperty])>*/;
+var20 = NULL;
+var_res = var20;
+var21 = NULL;
+var_ress = var21;
+var_ = var_props;
+{
+var22 = array__AbstractArrayRead__iterator(var_);
+}
+var_23 = var22;
 for(;;) {
-var13 = ((short int (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var12) /* is_ok on <var12:Iterator[nullable Object]>*/;
-if(!var13) break;
-var14 = ((val* (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__item]))(var12) /* item on <var12:Iterator[nullable Object]>*/;
-var_mprop = var14;
-var15 = ((short int (*)(val*, val*, val*))(var_mtype->class->vft[COLOR_model__MType__has_mproperty]))(var_mtype, var_mmodule, var_mprop) /* has_mproperty on <var_mtype:MType>*/;
-var16 = !var15;
-if (var16){
-goto CONTINUE_label;
-} else {
+{
+var24 = array__ArrayIterator__is_ok(var_23);
 }
-var17 = ((val* (*)(val*))(var_mprop->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_mprop) /* intro_mclassdef on <var_mprop:MProperty>*/;
-var18 = ((val* (*)(val*))(var17->class->vft[COLOR_model__MClassDef__mmodule]))(var17) /* mmodule on <var17:MClassDef>*/;
-var19 = ((val* (*)(val*))(var_mprop->class->vft[COLOR_model__MProperty__visibility]))(var_mprop) /* visibility on <var_mprop:MProperty>*/;
-var20 = ((short int (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__is_visible]))(var_mmodule, var18, var19) /* is_visible on <var_mmodule:MModule>*/;
-var21 = !var20;
-if (var21){
-goto CONTINUE_label;
-} else {
+if (var24){
+{
+var25 = array__ArrayIterator__item(var_23);
 }
-var22 = NULL;
-if (var_res == NULL) {
-var23 = 1; /* is null */
-} else {
-var23 = 0; /* arg is null but recv is not */
+var_mprop = var25;
+{
+var26 = model__MType__has_mproperty(var_mtype, var_mmodule, var_mprop);
 }
-if (var23){
-var_res = var_mprop;
-} else {
-var24 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_res) /* intro_mclassdef on <var_res:nullable MProperty(MProperty)>*/;
-var25 = ((val* (*)(val*))(var24->class->vft[COLOR_model__MClassDef__bound_mtype]))(var24) /* bound_mtype on <var24:MClassDef>*/;
-var_restype = var25;
-var26 = ((val* (*)(val*))(var_mprop->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_mprop) /* intro_mclassdef on <var_mprop:MProperty>*/;
-var27 = ((val* (*)(val*))(var26->class->vft[COLOR_model__MClassDef__bound_mtype]))(var26) /* bound_mtype on <var26:MClassDef>*/;
-var_mproptype = var27;
-var28 = NULL;
-var29 = ((short int (*)(val*, val*, val*, val*))(var_restype->class->vft[COLOR_model__MType__is_subtype]))(var_restype, var_mmodule, var28, var_mproptype) /* is_subtype on <var_restype:MClassType>*/;
-if (var29){
-} else {
-var30 = NULL;
-var31 = ((short int (*)(val*, val*, val*, val*))(var_mproptype->class->vft[COLOR_model__MType__is_subtype]))(var_mproptype, var_mmodule, var30, var_restype) /* is_subtype on <var_mproptype:MClassType>*/;
-if (var31){
-var_res = var_mprop;
-} else {
-var32 = NULL;
-if (var_ress == NULL) {
-var33 = 1; /* is null */
+var27 = !var26;
+if (var27){
+goto BREAK_label;
 } else {
-var33 = 0; /* arg is null but recv is not */
 }
-if (var33){
-var34 = NEW_array__Array(&type_array__Arraymodel__MProperty);
-((void (*)(val*))(var34->class->vft[COLOR_array__Array__init]))(var34) /* init on <var34:Array[MProperty]>*/;
-var_ress = var34;
-} else {
+{
+{ /* Inline model#MProperty#intro_mclassdef (var_mprop) on <var_mprop:MProperty> */
+var30 = var_mprop->attrs[COLOR_model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty> */
+if (unlikely(var30 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1615);
+show_backtrace(1);
 }
-((void (*)(val*, val*))(var_ress->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_ress, var_mprop) /* add on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
+var28 = var30;
+RET_LABEL29:(void)0;
 }
 }
+{
+{ /* Inline model#MClassDef#mmodule (var28) on <var28:MClassDef> */
+var33 = var28->attrs[COLOR_model__MClassDef___mmodule].val; /* _mmodule on <var28:MClassDef> */
+if (unlikely(var33 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 489);
+show_backtrace(1);
 }
-CONTINUE_label: (void)0;
-((void (*)(val*))(var12->class->vft[COLOR_abstract_collection__Iterator__next]))(var12) /* next on <var12:Iterator[nullable Object]>*/;
+var31 = var33;
+RET_LABEL32:(void)0;
 }
-BREAK_label: (void)0;
-var35 = NULL;
-if (var_ress == NULL) {
-var36 = 0; /* is null */
-} else {
-var36 = 1; /* arg is null and recv is not */
 }
-if (var36){
-if (var_res == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 217);
+{
+{ /* Inline model#MProperty#visibility (var_mprop) on <var_mprop:MProperty> */
+var36 = var_mprop->attrs[COLOR_model__MProperty___visibility].val; /* _visibility on <var_mprop:MProperty> */
+if (unlikely(var36 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _visibility");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1630);
 show_backtrace(1);
-} else {
-var37 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_res) /* intro_mclassdef on <var_res:nullable MProperty>*/;
 }
-var38 = ((val* (*)(val*))(var37->class->vft[COLOR_model__MClassDef__bound_mtype]))(var37) /* bound_mtype on <var37:MClassDef>*/;
-var_restype39 = var38;
-var40 = ((val* (*)(val*))(var_ress->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_ress) /* iterator on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
-for(;;) {
-var41 = ((short int (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var40) /* is_ok on <var40:Iterator[nullable Object]>*/;
-if(!var41) break;
-var42 = ((val* (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__item]))(var40) /* item on <var40:Iterator[nullable Object]>*/;
-var_mprop43 = var42;
-var44 = ((val* (*)(val*))(var_mprop43->class->vft[COLOR_model__MProperty__intro_mclassdef]))(var_mprop43) /* intro_mclassdef on <var_mprop43:MProperty>*/;
-var45 = ((val* (*)(val*))(var44->class->vft[COLOR_model__MClassDef__bound_mtype]))(var44) /* bound_mtype on <var44:MClassDef>*/;
-var_mproptype46 = var45;
-var47 = NULL;
-var48 = ((short int (*)(val*, val*, val*, val*))(var_restype39->class->vft[COLOR_model__MType__is_subtype]))(var_restype39, var_mmodule, var47, var_mproptype46) /* is_subtype on <var_restype39:MClassType>*/;
-var49 = !var48;
-if (var49){
-if (varonce) {
-var50 = varonce;
-} else {
-var51 = "Ambigous property name \'";
-var52 = 24;
-var53 = string__NativeString__to_s_with_length(var51, var52);
-var50 = var53;
-varonce = var50;
+var34 = var36;
+RET_LABEL35:(void)0;
+}
+}
+{
+var37 = mmodule__MModule__is_visible(var_mmodule, var31, var34);
 }
-if (varonce54) {
-var55 = varonce54;
+var38 = !var37;
+if (var38){
+goto BREAK_label;
 } else {
-var56 = "\' for ";
-var57 = 6;
-var58 = string__NativeString__to_s_with_length(var56, var57);
-var55 = var58;
-varonce54 = var55;
 }
-if (varonce59) {
-var60 = varonce59;
+/* <var_mprop:MProperty> isa MMethod */
+cltype = type_model__MMethod.color;
+idtype = type_model__MMethod.id;
+if(cltype >= var_mprop->type->table_size) {
+var41 = 0;
 } else {
-var61 = "; conflict between ";
-var62 = 19;
-var63 = string__NativeString__to_s_with_length(var61, var62);
-var60 = var63;
-varonce59 = var60;
+var41 = var_mprop->type->type_table[cltype] == idtype;
 }
-var64 = ((val* (*)(val*))(var_mprop43->class->vft[COLOR_model__MProperty__full_name]))(var_mprop43) /* full_name on <var_mprop43:MProperty>*/;
-if (varonce65) {
-var66 = varonce65;
+var_42 = var41;
+if (var41){
+{
+{ /* Inline model#MMethod#is_new (var_mprop) on <var_mprop:MProperty(MMethod)> */
+var45 = var_mprop->attrs[COLOR_model__MMethod___is_new].s; /* _is_new on <var_mprop:MProperty(MMethod)> */
+var43 = var45;
+RET_LABEL44:(void)0;
+}
+}
+var40 = var43;
+} else {
+var40 = var_42;
+}
+var_46 = var40;
+if (var40){
+/* <var_mtype:MType> isa MClassType */
+cltype49 = type_model__MClassType.color;
+idtype50 = type_model__MClassType.id;
+if(cltype49 >= var_mtype->type->table_size) {
+var48 = 0;
+} else {
+var48 = var_mtype->type->type_table[cltype49] == idtype50;
+}
+var51 = !var48;
+var_52 = var51;
+if (var51){
+var47 = var_52;
+} else {
+{
+{ /* Inline model#MProperty#intro_mclassdef (var_mprop) on <var_mprop:MProperty(MMethod)> */
+var55 = var_mprop->attrs[COLOR_model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty(MMethod)> */
+if (unlikely(var55 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1615);
+show_backtrace(1);
+}
+var53 = var55;
+RET_LABEL54:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#mclass (var53) on <var53:MClassDef> */
+var58 = var53->attrs[COLOR_model__MClassDef___mclass].val; /* _mclass on <var53:MClassDef> */
+if (unlikely(var58 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 492);
+show_backtrace(1);
+}
+var56 = var58;
+RET_LABEL57:(void)0;
+}
+}
+{
+{ /* Inline model#MClassType#mclass (var_mtype) on <var_mtype:MType(MClassType)> */
+var61 = var_mtype->attrs[COLOR_model__MClassType___mclass].val; /* _mclass on <var_mtype:MType(MClassType)> */
+if (unlikely(var61 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 986);
+show_backtrace(1);
+}
+var59 = var61;
+RET_LABEL60:(void)0;
+}
+}
+{
+{ /* Inline kernel#Object#!= (var56,var59) on <var56:MClass> */
+var_other = var59;
+{
+var66 = ((short int (*)(val*, val*))(var56->class->vft[COLOR_kernel__Object___61d_61d]))(var56, var_other) /* == on <var56:MClass>*/;
+var65 = var66;
+}
+var67 = !var65;
+var63 = var67;
+goto RET_LABEL64;
+RET_LABEL64:(void)0;
+}
+var62 = var63;
+}
+var47 = var62;
+}
+var39 = var47;
+} else {
+var39 = var_46;
+}
+if (var39){
+goto BREAK_label;
 } else {
-var67 = " and ";
-var68 = 5;
-var69 = string__NativeString__to_s_with_length(var67, var68);
-var66 = var69;
-varonce65 = var66;
 }
+var68 = NULL;
 if (var_res == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 221);
-show_backtrace(1);
-} else {
-var70 = ((val* (*)(val*))(var_res->class->vft[COLOR_model__MProperty__full_name]))(var_res) /* full_name on <var_res:nullable MProperty>*/;
-}
-var71 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var71 = array_instance Array[Object] */
-var72 = 8;
-var73 = NEW_array__NativeArray(var72, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var73)->values[0] = (val*) var50;
-((struct instance_array__NativeArray*)var73)->values[1] = (val*) var_name;
-((struct instance_array__NativeArray*)var73)->values[2] = (val*) var55;
-((struct instance_array__NativeArray*)var73)->values[3] = (val*) var_mtype;
-((struct instance_array__NativeArray*)var73)->values[4] = (val*) var60;
-((struct instance_array__NativeArray*)var73)->values[5] = (val*) var64;
-((struct instance_array__NativeArray*)var73)->values[6] = (val*) var66;
-((struct instance_array__NativeArray*)var73)->values[7] = (val*) var70;
-((void (*)(val*, val*, long))(var71->class->vft[COLOR_array__Array__with_native]))(var71, var73, var72) /* with_native on <var71:Array[Object]>*/;
-}
-var74 = ((val* (*)(val*))(var71->class->vft[COLOR_string__Object__to_s]))(var71) /* to_s on <var71:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var74) /* error on <self:ModelBuilder>*/;
-var75 = NULL;
-var = var75;
-goto RET_LABEL;
+var69 = 1; /* is null */
+} else {
+var69 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_res,var68) on <var_res:nullable MProperty> */
+var_other72 = var68;
+{
+{ /* Inline kernel#Object#is_same_instance (var_res,var_other72) on <var_res:nullable MProperty(MProperty)> */
+var75 = var_res == var_other72;
+var73 = var75;
+goto RET_LABEL74;
+RET_LABEL74:(void)0;
+}
+}
+var70 = var73;
+goto RET_LABEL71;
+RET_LABEL71:(void)0;
+}
+var69 = var70;
+}
+if (var69){
+var_res = var_mprop;
+goto BREAK_label;
+} else {
+}
+/* <var_res:nullable MProperty(MProperty)> isa MMethod */
+cltype80 = type_model__MMethod.color;
+idtype81 = type_model__MMethod.id;
+if(cltype80 >= var_res->type->table_size) {
+var79 = 0;
+} else {
+var79 = var_res->type->type_table[cltype80] == idtype81;
+}
+var_82 = var79;
+if (var79){
+/* <var_mprop:MProperty> isa MMethod */
+cltype84 = type_model__MMethod.color;
+idtype85 = type_model__MMethod.id;
+if(cltype84 >= var_mprop->type->table_size) {
+var83 = 0;
+} else {
+var83 = var_mprop->type->type_table[cltype84] == idtype85;
+}
+var78 = var83;
+} else {
+var78 = var_82;
+}
+var_86 = var78;
+if (var78){
+{
+{ /* Inline model#MMethod#is_init (var_res) on <var_res:nullable MProperty(MMethod)> */
+var89 = var_res->attrs[COLOR_model__MMethod___is_init].s; /* _is_init on <var_res:nullable MProperty(MMethod)> */
+var87 = var89;
+RET_LABEL88:(void)0;
+}
+}
+var77 = var87;
+} else {
+var77 = var_86;
+}
+var_90 = var77;
+if (var77){
+{
+{ /* Inline model#MMethod#is_init (var_mprop) on <var_mprop:MProperty(MMethod)> */
+var93 = var_mprop->attrs[COLOR_model__MMethod___is_init].s; /* _is_init on <var_mprop:MProperty(MMethod)> */
+var91 = var93;
+RET_LABEL92:(void)0;
+}
+}
+var76 = var91;
+} else {
+var76 = var_90;
+}
+if (var76){
+{
+{ /* Inline model#MProperty#intro_mclassdef (var_res) on <var_res:nullable MProperty(MMethod)> */
+var96 = var_res->attrs[COLOR_model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_res:nullable MProperty(MMethod)> */
+if (unlikely(var96 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1615);
+show_backtrace(1);
+}
+var94 = var96;
+RET_LABEL95:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#bound_mtype (var94) on <var94:MClassDef> */
+var99 = var94->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var94:MClassDef> */
+if (unlikely(var99 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
+show_backtrace(1);
+}
+var97 = var99;
+RET_LABEL98:(void)0;
+}
+}
+var_restype = var97;
+{
+{ /* Inline model#MProperty#intro_mclassdef (var_mprop) on <var_mprop:MProperty(MMethod)> */
+var102 = var_mprop->attrs[COLOR_model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop:MProperty(MMethod)> */
+if (unlikely(var102 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1615);
+show_backtrace(1);
+}
+var100 = var102;
+RET_LABEL101:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#bound_mtype (var100) on <var100:MClassDef> */
+var105 = var100->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var100:MClassDef> */
+if (unlikely(var105 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
+show_backtrace(1);
+}
+var103 = var105;
+RET_LABEL104:(void)0;
+}
+}
+var_mproptype = var103;
+var106 = NULL;
+{
+var107 = model__MType__is_subtype(var_mproptype, var_mmodule, var106, var_restype);
+}
+if (var107){
+var_res = var_mprop;
+goto BREAK_label;
+} else {
+}
+} else {
+}
+var108 = NULL;
+if (var_ress == NULL) {
+var109 = 1; /* is null */
+} else {
+var109 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var110 = array__Array___61d_61d(var_ress, var108);
+var109 = var110;
+}
+if (var109){
+var111 = NEW_array__Array(&type_array__Arraymodel__MProperty);
+{
+((void (*)(val*))(var111->class->vft[COLOR_kernel__Object__init]))(var111) /* init on <var111:Array[MProperty]>*/;
+}
+var_ress = var111;
+{
+array__Array__add(var_ress, var_res); /* Direct call array#Array#add on <var_ress:nullable Array[MProperty](Array[MProperty])>*/
+}
+} else {
+}
+{
+array__Array__add(var_ress, var_mprop); /* Direct call array#Array#add on <var_ress:nullable Array[MProperty](Array[MProperty])>*/
+}
+BREAK_label: (void)0;
+{
+array__ArrayIterator__next(var_23); /* Direct call array#ArrayIterator#next on <var_23:ArrayIterator[MProperty]>*/
+}
+} else {
+goto BREAK_label112;
+}
+}
+BREAK_label112: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_23) on <var_23:ArrayIterator[MProperty]> */
+RET_LABEL113:(void)0;
+}
+}
+var116 = NULL;
+if (var_ress == NULL) {
+var117 = 0; /* is null */
+} else {
+var117 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_ress,var116) on <var_ress:nullable Array[MProperty]> */
+var_other = var116;
+{
+var121 = ((short int (*)(val*, val*))(var_ress->class->vft[COLOR_kernel__Object___61d_61d]))(var_ress, var_other) /* == on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
+var120 = var121;
+}
+var122 = !var120;
+var118 = var122;
+goto RET_LABEL119;
+RET_LABEL119:(void)0;
+}
+var117 = var118;
+}
+var_123 = var117;
+if (var117){
+/* <var_res:nullable MProperty> isa MMethod */
+cltype125 = type_model__MMethod.color;
+idtype126 = type_model__MMethod.id;
+if(var_res == NULL) {
+var124 = 0;
+} else {
+if(cltype125 >= var_res->type->table_size) {
+var124 = 0;
+} else {
+var124 = var_res->type->type_table[cltype125] == idtype126;
+}
+}
+var115 = var124;
+} else {
+var115 = var_123;
+}
+var_127 = var115;
+if (var115){
+{
+{ /* Inline model#MMethod#is_init (var_res) on <var_res:nullable MProperty(MMethod)> */
+var130 = var_res->attrs[COLOR_model__MMethod___is_init].s; /* _is_init on <var_res:nullable MProperty(MMethod)> */
+var128 = var130;
+RET_LABEL129:(void)0;
+}
+}
+var114 = var128;
+} else {
+var114 = var_127;
+}
+if (var114){
+{
+{ /* Inline model#MProperty#intro_mclassdef (var_res) on <var_res:nullable MProperty(MMethod)> */
+var133 = var_res->attrs[COLOR_model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_res:nullable MProperty(MMethod)> */
+if (unlikely(var133 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1615);
+show_backtrace(1);
+}
+var131 = var133;
+RET_LABEL132:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#bound_mtype (var131) on <var131:MClassDef> */
+var136 = var131->attrs[COLOR_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", "model/model.nit", 495);
+show_backtrace(1);
+}
+var134 = var136;
+RET_LABEL135:(void)0;
+}
+}
+var_restype137 = var134;
+var138 = NEW_array__Array(&type_array__Arraymodel__MProperty);
+{
+((void (*)(val*))(var138->class->vft[COLOR_kernel__Object__init]))(var138) /* init on <var138:Array[MProperty]>*/;
+}
+var_ress2 = var138;
+var_139 = var_ress;
+{
+var140 = array__AbstractArrayRead__iterator(var_139);
+}
+var_141 = var140;
+for(;;) {
+{
+var142 = array__ArrayIterator__is_ok(var_141);
+}
+if (var142){
+{
+var143 = array__ArrayIterator__item(var_141);
+}
+var_mprop144 = var143;
+{
+{ /* Inline model#MProperty#intro_mclassdef (var_mprop144) on <var_mprop144:MProperty> */
+var147 = var_mprop144->attrs[COLOR_model__MProperty___intro_mclassdef].val; /* _intro_mclassdef on <var_mprop144:MProperty> */
+if (unlikely(var147 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro_mclassdef");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 1615);
+show_backtrace(1);
+}
+var145 = var147;
+RET_LABEL146:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#bound_mtype (var145) on <var145:MClassDef> */
+var150 = var145->attrs[COLOR_model__MClassDef___bound_mtype].val; /* _bound_mtype on <var145:MClassDef> */
+if (unlikely(var150 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
+PRINT_ERROR(" (%s:%d)\n", "model/model.nit", 495);
+show_backtrace(1);
+}
+var148 = var150;
+RET_LABEL149:(void)0;
+}
+}
+var_mproptype151 = var148;
+var152 = NULL;
+{
+var153 = model__MType__is_subtype(var_restype137, var_mmodule, var152, var_mproptype151);
+}
+var154 = !var153;
+if (var154){
+{
+array__Array__add(var_ress2, var_mprop144); /* Direct call array#Array#add on <var_ress2:Array[MProperty]>*/
+}
+} else {
+/* <var_mprop144:MProperty> isa MMethod */
+cltype157 = type_model__MMethod.color;
+idtype158 = type_model__MMethod.id;
+if(cltype157 >= var_mprop144->type->table_size) {
+var156 = 0;
+} else {
+var156 = var_mprop144->type->type_table[cltype157] == idtype158;
+}
+var159 = !var156;
+var_160 = var159;
+if (var159){
+var155 = var_160;
+} else {
+{
+{ /* Inline model#MMethod#is_init (var_mprop144) on <var_mprop144:MProperty(MMethod)> */
+var163 = var_mprop144->attrs[COLOR_model__MMethod___is_init].s; /* _is_init on <var_mprop144:MProperty(MMethod)> */
+var161 = var163;
+RET_LABEL162:(void)0;
+}
+}
+var164 = !var161;
+var155 = var164;
+}
+if (var155){
+{
+array__Array__add(var_ress2, var_mprop144); /* Direct call array#Array#add on <var_ress2:Array[MProperty]>*/
+}
+} else {
+}
+}
+{
+array__ArrayIterator__next(var_141); /* Direct call array#ArrayIterator#next on <var_141:ArrayIterator[MProperty]>*/
+}
+} else {
+goto BREAK_label165;
+}
+}
+BREAK_label165: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_141) on <var_141:ArrayIterator[MProperty]> */
+RET_LABEL166:(void)0;
+}
+}
+{
+var167 = array__AbstractArrayRead__is_empty(var_ress2);
+}
+if (var167){
+var168 = NULL;
+var_ress = var168;
+} else {
+var_ress = var_ress2;
+{
+array__Array__add(var_ress, var_res); /* Direct call array#Array#add on <var_ress:nullable Array[MProperty](Array[MProperty])>*/
+}
+}
 } else {
 }
-CONTINUE_label76: (void)0;
-((void (*)(val*))(var40->class->vft[COLOR_abstract_collection__Iterator__next]))(var40) /* next on <var40:Iterator[nullable Object]>*/;
+var169 = NULL;
+if (var_ress == NULL) {
+var170 = 0; /* is null */
+} else {
+var170 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_ress,var169) on <var_ress:nullable Array[MProperty]> */
+var_other = var169;
+{
+var174 = ((short int (*)(val*, val*))(var_ress->class->vft[COLOR_kernel__Object___61d_61d]))(var_ress, var_other) /* == on <var_ress:nullable Array[MProperty](Array[MProperty])>*/;
+var173 = var174;
+}
+var175 = !var173;
+var171 = var175;
+goto RET_LABEL172;
+RET_LABEL172:(void)0;
+}
+var170 = var171;
+}
+if (var170){
+{
+{ /* Inline array#AbstractArrayRead#length (var_ress) on <var_ress:nullable Array[MProperty](Array[MProperty])> */
+var178 = var_ress->attrs[COLOR_array__AbstractArrayRead___length].l; /* _length on <var_ress:nullable Array[MProperty](Array[MProperty])> */
+var176 = var178;
+RET_LABEL177:(void)0;
+}
+}
+var179 = 1;
+{
+{ /* Inline kernel#Int#> (var176,var179) on <var176:Int> */
+/* Covariant cast for argument 0 (i) <var179:Int> isa OTHER */
+/* <var179:Int> isa OTHER */
+var182 = 1; /* easy <var179:Int> isa OTHER*/
+if (unlikely(!var182)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 373);
+show_backtrace(1);
+}
+var185 = var176 > var179;
+var180 = var185;
+goto RET_LABEL181;
+RET_LABEL181:(void)0;
+}
+}
+if (unlikely(!var180)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 281);
+show_backtrace(1);
+}
+var186 = NEW_array__Array(&type_array__Arraystring__String);
+{
+((void (*)(val*))(var186->class->vft[COLOR_kernel__Object__init]))(var186) /* init on <var186:Array[String]>*/;
+}
+var_s = var186;
+var_187 = var_ress;
+{
+var188 = array__AbstractArrayRead__iterator(var_187);
+}
+var_189 = var188;
+for(;;) {
+{
+var190 = array__ArrayIterator__is_ok(var_189);
+}
+if (var190){
+{
+var191 = array__ArrayIterator__item(var_189);
+}
+var_mprop192 = var191;
+{
+var193 = model__MProperty__full_name(var_mprop192);
+}
+{
+array__Array__add(var_s, var193); /* Direct call array#Array#add on <var_s:Array[String]>*/
+}
+{
+array__ArrayIterator__next(var_189); /* Direct call array#ArrayIterator#next on <var_189:ArrayIterator[MProperty]>*/
 }
-BREAK_label76: (void)0;
 } else {
+goto BREAK_label194;
+}
+}
+BREAK_label194: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_189) on <var_189:ArrayIterator[MProperty]> */
+RET_LABEL195:(void)0;
+}
+}
+if (varonce) {
+var196 = varonce;
+} else {
+var197 = "Ambigous property name \'";
+var198 = 24;
+var199 = string__NativeString__to_s_with_length(var197, var198);
+var196 = var199;
+varonce = var196;
+}
+if (varonce200) {
+var201 = varonce200;
+} else {
+var202 = "\' for ";
+var203 = 6;
+var204 = string__NativeString__to_s_with_length(var202, var203);
+var201 = var204;
+varonce200 = var201;
+}
+if (varonce205) {
+var206 = varonce205;
+} else {
+var207 = "; conflict between ";
+var208 = 19;
+var209 = string__NativeString__to_s_with_length(var207, var208);
+var206 = var209;
+varonce205 = var206;
+}
+if (varonce210) {
+var211 = varonce210;
+} else {
+var212 = " and ";
+var213 = 5;
+var214 = string__NativeString__to_s_with_length(var212, var213);
+var211 = var214;
+varonce210 = var211;
+}
+{
+var215 = string__Collection__join(var_s, var211);
+}
+var216 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var216 = array_instance Array[Object] */
+var217 = 6;
+var218 = NEW_array__NativeArray(var217, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var218)->values[0] = (val*) var196;
+((struct instance_array__NativeArray*)var218)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var218)->values[2] = (val*) var201;
+((struct instance_array__NativeArray*)var218)->values[3] = (val*) var_mtype;
+((struct instance_array__NativeArray*)var218)->values[4] = (val*) var206;
+((struct instance_array__NativeArray*)var218)->values[5] = (val*) var215;
+{
+((void (*)(val*, val*, long))(var216->class->vft[COLOR_array__Array__with_native]))(var216, var218, var217) /* with_native on <var216:Array[Object]>*/;
+}
+}
+{
+var219 = ((val* (*)(val*))(var216->class->vft[COLOR_string__Object__to_s]))(var216) /* to_s on <var216:Array[Object]>*/;
+}
+{
+modelbuilder__ModelBuilder__error(self, var_anode, var219); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache (self) on <self:ModelBuilder> */
+var222 = self->attrs[COLOR_modelbuilder__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
+if (unlikely(var222 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _try_get_mproperty_by_name2_cache");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 291);
+show_backtrace(1);
+}
+var220 = var222;
+RET_LABEL221:(void)0;
+}
+}
+{
+more_collections__HashMap3___91d_93d_61d(var220, var_mmodule, var_mtype, var_name, var_res); /* Direct call more_collections#HashMap3#[]= on <var220:HashMap3[MModule, MType, String, nullable MProperty]>*/
 }
-var77 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache]))(self) /* try_get_mproperty_by_name2_cache on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*, val*, val*))(var77->class->vft[COLOR_more_collections__HashMap3___91d_93d_61d]))(var77, var_mmodule, var_mtype, var_name, var_res) /* []= on <var77:HashMap3[MModule, MType, String, nullable MProperty]>*/;
 var = var_res;
 goto RET_LABEL;
 RET_LABEL:;
@@ -1235,10 +2809,10 @@ return var;
 val* modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache(val* self) {
 val* var /* : HashMap3[MModule, MType, String, nullable MProperty] */;
 val* var1 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
-var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dtry_get_mproperty_by_name2_cache].val; /* @try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @try_get_mproperty_by_name2_cache");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 231);
+var1 = self->attrs[COLOR_modelbuilder__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", "modelbuilder.nit", 291);
 show_backtrace(1);
 }
 var = var1;
@@ -1249,20 +2823,20 @@ return var;
 val* VIRTUAL_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache(val* self) {
 val* var /* : HashMap3[MModule, MType, String, nullable MProperty] */;
 val* var1 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
-var1 = modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : HashMap3[MModule, MType, String, nullable MProperty] */;
+{ /* Inline modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___try_get_mproperty_by_name2_cache].val; /* _try_get_mproperty_by_name2_cache on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _try_get_mproperty_by_name2_cache");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 291);
+show_backtrace(1);
 }
-/* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache= for (self: ModelBuilder, HashMap3[MModule, MType, String, nullable MProperty]) */
-void modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dtry_get_mproperty_by_name2_cache].val = p0; /* @try_get_mproperty_by_name2_cache on <self:ModelBuilder> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ModelBuilder#try_get_mproperty_by_name2_cache= for (self: Object, HashMap3[MModule, MType, String, nullable MProperty]) */
-void VIRTUAL_modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__try_get_mproperty_by_name2_cache_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#ModelBuilder#try_get_mproperty_by_name for (self: ModelBuilder, ANode, MClassDef, String): nullable MProperty */
 val* modelbuilder__ModelBuilder__try_get_mproperty_by_name(val* self, val* p0, val* p1, val* p2) {
@@ -1271,15 +2845,41 @@ val* var_anode /* var anode: ANode */;
 val* var_mclassdef /* var mclassdef: MClassDef */;
 val* var_name /* var name: String */;
 val* var1 /* : MModule */;
-val* var2 /* : MClassType */;
-val* var3 /* : nullable MProperty */;
+val* var3 /* : MModule */;
+val* var4 /* : MClassType */;
+val* var6 /* : MClassType */;
+val* var7 /* : nullable MProperty */;
 var_anode = p0;
 var_mclassdef = p1;
 var_name = p2;
-var1 = ((val* (*)(val*))(var_mclassdef->class->vft[COLOR_model__MClassDef__mmodule]))(var_mclassdef) /* mmodule on <var_mclassdef:MClassDef>*/;
-var2 = ((val* (*)(val*))(var_mclassdef->class->vft[COLOR_model__MClassDef__bound_mtype]))(var_mclassdef) /* bound_mtype on <var_mclassdef:MClassDef>*/;
-var3 = ((val* (*)(val*, val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__try_get_mproperty_by_name2]))(self, var_anode, var1, var2, var_name) /* try_get_mproperty_by_name2 on <self:ModelBuilder>*/;
-var = var3;
+{
+{ /* Inline model#MClassDef#mmodule (var_mclassdef) on <var_mclassdef:MClassDef> */
+var3 = var_mclassdef->attrs[COLOR_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", "model/model.nit", 489);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+{ /* Inline model#MClassDef#bound_mtype (var_mclassdef) on <var_mclassdef:MClassDef> */
+var6 = var_mclassdef->attrs[COLOR_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", "model/model.nit", 495);
+show_backtrace(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+{
+var7 = modelbuilder__ModelBuilder__try_get_mproperty_by_name2(self, var_anode, var1, var4, var_name);
+}
+var = var7;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
@@ -1297,10 +2897,10 @@ return var;
 val* modelbuilder__ModelBuilder__paths(val* self) {
 val* var /* : Array[String] */;
 val* var1 /* : Array[String] */;
-var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dpaths].val; /* @paths on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @paths");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 240);
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___paths].val; /* _paths on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 300);
 show_backtrace(1);
 }
 var = var1;
@@ -1311,397 +2911,333 @@ return var;
 val* VIRTUAL_modelbuilder__ModelBuilder__paths(val* self) {
 val* var /* : Array[String] */;
 val* var1 /* : Array[String] */;
-var1 = modelbuilder__ModelBuilder__paths(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : Array[String] */;
+{ /* Inline modelbuilder#ModelBuilder#paths (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___paths].val; /* _paths on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 300);
+show_backtrace(1);
 }
-/* method modelbuilder#ModelBuilder#paths= for (self: ModelBuilder, Array[String]) */
-void modelbuilder__ModelBuilder__paths_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dpaths].val = p0; /* @paths on <self:ModelBuilder> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ModelBuilder#paths= for (self: Object, Array[String]) */
-void VIRTUAL_modelbuilder__ModelBuilder__paths_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__paths_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
-/* method modelbuilder#ModelBuilder#get_mmodule_by_name for (self: ModelBuilder, ANode, nullable MModule, String): nullable MModule */
-val* modelbuilder__ModelBuilder__get_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
-val* var /* : nullable MModule */;
+/* method modelbuilder#ModelBuilder#search_mmodule_by_name for (self: ModelBuilder, ANode, nullable MGroup, String): nullable ModulePath */
+val* modelbuilder__ModelBuilder__search_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable ModulePath */;
 val* var_anode /* var anode: ANode */;
-val* var_mmodule /* var mmodule: nullable MModule */;
+val* var_mgroup /* var mgroup: nullable MGroup */;
 val* var_name /* var name: String */;
-val* var1 /* : Array[String] */;
-val* var_tries /* var tries: Array[String] */;
-val* var2 /* : null */;
+val* var_c /* var c: nullable MGroup */;
+val* var1 /* : null */;
+short int var2 /* : Bool */;
 short int var3 /* : Bool */;
-val* var4 /* : nullable MGroup */;
-val* var_mgroup /* var mgroup: nullable MGroup */;
-val* var5 /* : null */;
+val* var_other /* var other: nullable Object */;
+short int var5 /* : Bool */;
 short int var6 /* : Bool */;
-val* var7 /* : nullable String */;
+short int var7 /* : Bool */;
+val* var8 /* : nullable String */;
+val* var10 /* : nullable String */;
 val* var_dirname /* var dirname: nullable String */;
-val* var8 /* : null */;
-short int var9 /* : Bool */;
+val* var11 /* : null */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
 static val* varonce;
-val* var10 /* : String */;
-char* var11 /* : NativeString */;
-long var12 /* : Int */;
-val* var13 /* : String */;
-short int var14 /* : Bool */;
-static val* varonce15;
-val* var16 /* : String */;
-char* var17 /* : NativeString */;
-long var18 /* : Int */;
-val* var19 /* : String */;
+val* var14 /* : String */;
+char* var15 /* : NativeString */;
+long var16 /* : Int */;
+val* var17 /* : FlatString */;
+short int var18 /* : Bool */;
+static val* varonce19;
 val* var20 /* : String */;
-val* var21 /* : String */;
-static val* varonce22;
-val* var23 /* : String */;
-char* var24 /* : NativeString */;
-long var25 /* : Int */;
-val* var26 /* : String */;
+char* var21 /* : NativeString */;
+long var22 /* : Int */;
+val* var23 /* : FlatString */;
+val* var24 /* : String */;
+val* var25 /* : String */;
+static val* varonce26;
 val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : FlatString */;
+val* var31 /* : String */;
 val* var_try_file /* var try_file: String */;
-short int var28 /* : Bool */;
-val* var29 /* : String */;
-val* var30 /* : nullable AModule */;
-val* var_res /* var res: nullable AModule */;
-val* var31 /* : null */;
 short int var32 /* : Bool */;
-val* var33 /* : null */;
-val* var34 /* : nullable MModule */;
-static val* varonce35;
-val* var36 /* : String */;
-char* var37 /* : NativeString */;
-long var38 /* : Int */;
-val* var39 /* : String */;
-val* var40 /* : String */;
-val* var41 /* : String */;
-static val* varonce42;
-val* var43 /* : String */;
-char* var44 /* : NativeString */;
-long var45 /* : Int */;
-val* var46 /* : String */;
+val* var33 /* : String */;
+val* var34 /* : nullable ModulePath */;
+val* var_res /* var res: nullable ModulePath */;
+val* var35 /* : null */;
+short int var36 /* : Bool */;
+short int var37 /* : Bool */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
+short int var41 /* : Bool */;
+static val* varonce42;
+val* var43 /* : String */;
+char* var44 /* : NativeString */;
+long var45 /* : Int */;
+val* var46 /* : FlatString */;
 val* var47 /* : String */;
 val* var48 /* : String */;
 static val* varonce49;
 val* var50 /* : String */;
 char* var51 /* : NativeString */;
 long var52 /* : Int */;
-val* var53 /* : String */;
+val* var53 /* : FlatString */;
 val* var54 /* : String */;
-short int var55 /* : Bool */;
+val* var55 /* : String */;
 static val* varonce56;
 val* var57 /* : String */;
 char* var58 /* : NativeString */;
 long var59 /* : Int */;
-val* var60 /* : String */;
+val* var60 /* : FlatString */;
 val* var61 /* : String */;
-val* var62 /* : String */;
-val* var63 /* : nullable MGroup */;
-val* var64 /* : String */;
-val* var65 /* : nullable AModule */;
-val* var_res66 /* var res: nullable AModule */;
-val* var67 /* : null */;
+short int var62 /* : Bool */;
+val* var63 /* : String */;
+val* var64 /* : nullable ModulePath */;
+val* var_res65 /* var res: nullable ModulePath */;
+val* var66 /* : null */;
+short int var67 /* : Bool */;
 short int var68 /* : Bool */;
-val* var69 /* : null */;
-val* var70 /* : nullable MModule */;
-val* var71 /* : nullable MGroup */;
-val* var72 /* : Array[String] */;
+short int var70 /* : Bool */;
+short int var71 /* : Bool */;
+short int var72 /* : Bool */;
+val* var73 /* : nullable MGroup */;
+val* var75 /* : nullable MGroup */;
+val* var76 /* : Array[String] */;
+val* var78 /* : Array[String] */;
 val* var_lookpaths /* var lookpaths: Array[String] */;
-short int var73 /* : Bool */;
-val* var74 /* : null */;
-short int var75 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var76 /* : nullable MGroup */;
-val* var77 /* : null */;
-short int var78 /* : Bool */;
-val* var79 /* : nullable MGroup */;
-val* var80 /* : MProject */;
-val* var81 /* : nullable MGroup */;
-val* var82 /* : nullable String */;
-val* var_dirname83 /* var dirname: nullable String */;
-val* var84 /* : null */;
+val* var79 /* : null */;
+short int var80 /* : Bool */;
+short int var81 /* : Bool */;
+short int var83 /* : Bool */;
+short int var84 /* : Bool */;
 short int var85 /* : Bool */;
-static val* varonce86;
-val* var87 /* : String */;
-char* var88 /* : NativeString */;
-long var89 /* : Int */;
-val* var90 /* : String */;
-val* var91 /* : String */;
-val* var92 /* : String */;
-short int var93 /* : Bool */;
-short int var94 /* : Bool */;
-short int var95 /* : Bool */;
-short int var_96 /* var : Bool */;
+val* var86 /* : MProject */;
+val* var88 /* : MProject */;
+val* var89 /* : nullable MGroup */;
+val* var91 /* : nullable MGroup */;
+val* var92 /* : nullable String */;
+val* var94 /* : nullable String */;
+val* var_dirname95 /* var dirname: nullable String */;
+val* var96 /* : null */;
 short int var97 /* : Bool */;
-val* var98 /* : Array[nullable Object] */;
-val* var99 /* : null */;
-val* var_candidate /* var candidate: nullable String */;
-val* var100 /* : Iterator[nullable Object] */;
+short int var98 /* : Bool */;
+short int var100 /* : Bool */;
 short int var101 /* : Bool */;
-val* var102 /* : nullable Object */;
-val* var_dirname103 /* var dirname: String */;
-static val* varonce104;
-val* var105 /* : String */;
-char* var106 /* : NativeString */;
-long var107 /* : Int */;
+short int var102 /* : Bool */;
+static val* varonce103;
+val* var104 /* : String */;
+char* var105 /* : NativeString */;
+long var106 /* : Int */;
+val* var107 /* : FlatString */;
 val* var108 /* : String */;
 val* var109 /* : String */;
-val* var110 /* : String */;
-static val* varonce111;
-val* var112 /* : String */;
-char* var113 /* : NativeString */;
-long var114 /* : Int */;
-val* var115 /* : String */;
-val* var116 /* : String */;
-val* var117 /* : String */;
-val* var_try_file118 /* var try_file: String */;
+short int var110 /* : Bool */;
+short int var111 /* : Bool */;
+short int var112 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var113 /* : Bool */;
+val* var114 /* : Array[nullable Object] */;
+val* var115 /* : Location */;
+val* var116 /* : nullable ModulePath */;
+val* var_candidate /* var candidate: nullable ModulePath */;
+val* var117 /* : null */;
+short int var118 /* : Bool */;
 short int var119 /* : Bool */;
-val* var120 /* : null */;
-short int var121 /* : Bool */;
+val* var_other121 /* var other: nullable Object */;
 short int var122 /* : Bool */;
-val* var123 /* : String */;
-val* var_abs_candidate /* var abs_candidate: String */;
-val* var124 /* : String */;
-val* var_abs_try_file /* var abs_try_file: String */;
-short int var125 /* : Bool */;
-static val* varonce126;
-val* var127 /* : String */;
-char* var128 /* : NativeString */;
-long var129 /* : Int */;
-val* var130 /* : String */;
-static val* varonce131;
-val* var132 /* : String */;
-char* var133 /* : NativeString */;
-long var134 /* : Int */;
-val* var135 /* : String */;
-static val* varonce136;
-val* var137 /* : String */;
-char* var138 /* : NativeString */;
-long var139 /* : Int */;
-val* var140 /* : String */;
-val* var141 /* : Array[Object] */;
-long var142 /* : Int */;
-val* var143 /* : NativeArray[Object] */;
+short int var124 /* : Bool */;
+val* var125 /* : null */;
+short int var126 /* : Bool */;
+short int var127 /* : Bool */;
+short int var129 /* : Bool */;
+short int var130 /* : Bool */;
+short int var131 /* : Bool */;
+static val* varonce132;
+val* var133 /* : String */;
+char* var134 /* : NativeString */;
+long var135 /* : Int */;
+val* var136 /* : FlatString */;
+static val* varonce137;
+val* var138 /* : String */;
+char* var139 /* : NativeString */;
+long var140 /* : Int */;
+val* var141 /* : FlatString */;
+val* var142 /* : String */;
 val* var144 /* : String */;
 static val* varonce145;
 val* var146 /* : String */;
 char* var147 /* : NativeString */;
 long var148 /* : Int */;
-val* var149 /* : String */;
-val* var150 /* : String */;
+val* var149 /* : FlatString */;
+static val* varonce150;
 val* var151 /* : String */;
-static val* varonce152;
-val* var153 /* : String */;
-char* var154 /* : NativeString */;
-long var155 /* : Int */;
-val* var156 /* : String */;
-val* var157 /* : String */;
-val* var158 /* : String */;
-static val* varonce159;
-val* var160 /* : String */;
-char* var161 /* : NativeString */;
-long var162 /* : Int */;
-val* var163 /* : String */;
-val* var164 /* : String */;
-val* var165 /* : String */;
-short int var166 /* : Bool */;
-val* var167 /* : null */;
-short int var168 /* : Bool */;
-short int var169 /* : Bool */;
-val* var170 /* : String */;
-val* var_abs_candidate171 /* var abs_candidate: String */;
-val* var172 /* : String */;
-val* var_abs_try_file173 /* var abs_try_file: String */;
-short int var174 /* : Bool */;
-static val* varonce175;
-val* var176 /* : String */;
-char* var177 /* : NativeString */;
-long var178 /* : Int */;
+char* var152 /* : NativeString */;
+long var153 /* : Int */;
+val* var154 /* : FlatString */;
+val* var155 /* : String */;
+val* var156 /* : Array[Object] */;
+long var157 /* : Int */;
+val* var158 /* : NativeArray[Object] */;
+val* var159 /* : String */;
+static val* varonce160;
+val* var161 /* : String */;
+char* var162 /* : NativeString */;
+long var163 /* : Int */;
+val* var164 /* : FlatString */;
+static val* varonce165;
+val* var166 /* : String */;
+char* var167 /* : NativeString */;
+long var168 /* : Int */;
+val* var169 /* : FlatString */;
+static val* varonce170;
+val* var171 /* : String */;
+char* var172 /* : NativeString */;
+long var173 /* : Int */;
+val* var174 /* : FlatString */;
+val* var175 /* : String */;
+val* var176 /* : Array[Object] */;
+long var177 /* : Int */;
+val* var178 /* : NativeArray[Object] */;
 val* var179 /* : String */;
-static val* varonce180;
-val* var181 /* : String */;
-char* var182 /* : NativeString */;
-long var183 /* : Int */;
-val* var184 /* : String */;
-static val* varonce185;
-val* var186 /* : String */;
-char* var187 /* : NativeString */;
-long var188 /* : Int */;
-val* var189 /* : String */;
-val* var190 /* : Array[Object] */;
-long var191 /* : Int */;
-val* var192 /* : NativeArray[Object] */;
-val* var193 /* : String */;
-val* var195 /* : null */;
-short int var196 /* : Bool */;
-val* var197 /* : null */;
-short int var198 /* : Bool */;
-static val* varonce199;
-val* var200 /* : String */;
-char* var201 /* : NativeString */;
-long var202 /* : Int */;
-val* var203 /* : String */;
-static val* varonce204;
-val* var205 /* : String */;
-char* var206 /* : NativeString */;
-long var207 /* : Int */;
-val* var208 /* : String */;
-static val* varonce209;
-val* var210 /* : String */;
-char* var211 /* : NativeString */;
-long var212 /* : Int */;
-val* var213 /* : String */;
-static val* varonce214;
-val* var215 /* : String */;
-char* var216 /* : NativeString */;
-long var217 /* : Int */;
-val* var218 /* : String */;
-val* var219 /* : String */;
-val* var220 /* : Array[Object] */;
-long var221 /* : Int */;
-val* var222 /* : NativeArray[Object] */;
-val* var223 /* : String */;
-static val* varonce224;
-val* var225 /* : String */;
-char* var226 /* : NativeString */;
-long var227 /* : Int */;
-val* var228 /* : String */;
-static val* varonce229;
-val* var230 /* : String */;
-char* var231 /* : NativeString */;
-long var232 /* : Int */;
-val* var233 /* : String */;
-static val* varonce234;
-val* var235 /* : String */;
-char* var236 /* : NativeString */;
-long var237 /* : Int */;
-val* var238 /* : String */;
-val* var239 /* : String */;
-val* var240 /* : Array[Object] */;
-long var241 /* : Int */;
-val* var242 /* : NativeArray[Object] */;
-val* var243 /* : String */;
-val* var244 /* : null */;
-val* var245 /* : nullable AModule */;
-val* var_res246 /* var res: nullable AModule */;
-val* var247 /* : null */;
-short int var248 /* : Bool */;
-val* var249 /* : null */;
-val* var250 /* : nullable MModule */;
+val* var180 /* : null */;
 var_anode = p0;
-var_mmodule = p1;
+var_mgroup = p1;
 var_name = p2;
-var1 = NEW_array__Array(&type_array__Arraystring__String);
-((void (*)(val*))(var1->class->vft[COLOR_array__Array__init]))(var1) /* init on <var1:Array[String]>*/;
-var_tries = var1;
-var2 = NULL;
-if (var_mmodule == NULL) {
-var3 = 0; /* is null */
-} else {
-var3 = 1; /* arg is null and recv is not */
-}
-if (var3){
-var4 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__mgroup]))(var_mmodule) /* mgroup on <var_mmodule:nullable MModule(MModule)>*/;
-var_mgroup = var4;
+var_c = var_mgroup;
 for(;;) {
-var5 = NULL;
-if (var_mgroup == NULL) {
-var6 = 0; /* is null */
+var1 = NULL;
+if (var_c == NULL) {
+var2 = 0; /* is null */
 } else {
-var6 = 1; /* arg is null and recv is not */
+var2 = 1; /* arg is null and recv is not */
 }
-if (!var6) break;
-var7 = ((val* (*)(val*))(var_mgroup->class->vft[COLOR_mproject__MGroup__filepath]))(var_mgroup) /* filepath on <var_mgroup:nullable MGroup(MGroup)>*/;
-var_dirname = var7;
-var8 = NULL;
+if (0) {
+{ /* Inline kernel#Object#!= (var_c,var1) on <var_c:nullable MGroup> */
+var_other = var1;
+{
+var6 = ((short int (*)(val*, val*))(var_c->class->vft[COLOR_kernel__Object___61d_61d]))(var_c, var_other) /* == on <var_c:nullable MGroup(MGroup)>*/;
+var5 = var6;
+}
+var7 = !var5;
+var3 = var7;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+var2 = var3;
+}
+if (var2){
+{
+{ /* Inline mproject#MGroup#filepath (var_c) on <var_c:nullable MGroup(MGroup)> */
+var10 = var_c->attrs[COLOR_mproject__MGroup___filepath].val; /* _filepath on <var_c:nullable MGroup(MGroup)> */
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+var_dirname = var8;
+var11 = NULL;
 if (var_dirname == NULL) {
-var9 = 1; /* is null */
+var12 = 1; /* is null */
 } else {
-var9 = 0; /* arg is null but recv is not */
+var12 = 0; /* arg is null but recv is not */
 }
-if (var9){
+if (0) {
+var13 = string__FlatString___61d_61d(var_dirname, var11);
+var12 = var13;
+}
+if (var12){
 goto BREAK_label;
 } else {
 }
 if (varonce) {
-var10 = varonce;
+var14 = varonce;
 } else {
-var11 = ".nit";
-var12 = 4;
-var13 = string__NativeString__to_s_with_length(var11, var12);
-var10 = var13;
-varonce = var10;
+var15 = ".nit";
+var16 = 4;
+var17 = string__NativeString__to_s_with_length(var15, var16);
+var14 = var17;
+varonce = var14;
 }
-var14 = ((short int (*)(val*, val*))(var_dirname->class->vft[COLOR_string__AbstractString__has_suffix]))(var_dirname, var10) /* has_suffix on <var_dirname:nullable String(String)>*/;
-if (var14){
+{
+var18 = string__Text__has_suffix(var_dirname, var14);
+}
+if (var18){
 goto BREAK_label;
 } else {
 }
-if (varonce15) {
-var16 = varonce15;
+if (varonce19) {
+var20 = varonce19;
 } else {
-var17 = "/";
-var18 = 1;
-var19 = string__NativeString__to_s_with_length(var17, var18);
-var16 = var19;
-varonce15 = var16;
+var21 = "/";
+var22 = 1;
+var23 = string__NativeString__to_s_with_length(var21, var22);
+var20 = var23;
+varonce19 = var20;
 }
-var20 = ((val* (*)(val*, val*))(var_dirname->class->vft[COLOR_string__String___43d]))(var_dirname, var16) /* + on <var_dirname:nullable String(String)>*/;
-var21 = ((val* (*)(val*, val*))(var20->class->vft[COLOR_string__String___43d]))(var20, var_name) /* + on <var20:String>*/;
-if (varonce22) {
-var23 = varonce22;
-} else {
-var24 = ".nit";
-var25 = 4;
-var26 = string__NativeString__to_s_with_length(var24, var25);
-var23 = var26;
-varonce22 = var23;
-}
-var27 = ((val* (*)(val*, val*))(var21->class->vft[COLOR_string__String___43d]))(var21, var23) /* + on <var21:String>*/;
-var_try_file = var27;
-((void (*)(val*, val*))(var_tries->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_tries, var_try_file) /* add on <var_tries:Array[String]>*/;
-var28 = ((short int (*)(val*))(var_try_file->class->vft[COLOR_file__String__file_exists]))(var_try_file) /* file_exists on <var_try_file:String>*/;
-if (var28){
-var29 = ((val* (*)(val*))(var_try_file->class->vft[COLOR_file__String__simplify_path]))(var_try_file) /* simplify_path on <var_try_file:String>*/;
-var30 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var29) /* load_module on <self:ModelBuilder>*/;
-var_res = var30;
-var31 = NULL;
-if (var_res == NULL) {
-var32 = 1; /* is null */
+{
+var24 = string__FlatString___43d(var_dirname, var20);
+}
+{
+var25 = string__FlatString___43d(var24, var_name);
+}
+if (varonce26) {
+var27 = varonce26;
 } else {
-var32 = 0; /* arg is null but recv is not */
+var28 = ".nit";
+var29 = 4;
+var30 = string__NativeString__to_s_with_length(var28, var29);
+var27 = var30;
+varonce26 = var27;
+}
+{
+var31 = string__FlatString___43d(var25, var27);
+}
+var_try_file = var31;
+{
+var32 = file__String__file_exists(var_try_file);
 }
 if (var32){
-var33 = NULL;
-var = var33;
-goto RET_LABEL;
+{
+var33 = file__String__simplify_path(var_try_file);
+}
+{
+var34 = modelbuilder__ModelBuilder__identify_file(self, var33);
+}
+var_res = var34;
+var35 = NULL;
+if (var_res == NULL) {
+var36 = 0; /* is null */
 } else {
+var36 = 1; /* arg is null and recv is not */
 }
-var34 = ((val* (*)(val*))(var_res->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_res) /* mmodule on <var_res:nullable AModule(AModule)>*/;
-if (var34 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 272);
+if (0) {
+{ /* Inline kernel#Object#!= (var_res,var35) on <var_res:nullable ModulePath> */
+var_other = var35;
+{
+var40 = ((short int (*)(val*, val*))(var_res->class->vft[COLOR_kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable ModulePath(ModulePath)>*/;
+var39 = var40;
+}
+var41 = !var39;
+var37 = var41;
+goto RET_LABEL38;
+RET_LABEL38:(void)0;
+}
+var36 = var37;
+}
+if (unlikely(!var36)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 322);
 show_backtrace(1);
 }
-var = var34;
+var = var_res;
 goto RET_LABEL;
 } else {
 }
-if (varonce35) {
-var36 = varonce35;
-} else {
-var37 = "/";
-var38 = 1;
-var39 = string__NativeString__to_s_with_length(var37, var38);
-var36 = var39;
-varonce35 = var36;
-}
-var40 = ((val* (*)(val*, val*))(var_dirname->class->vft[COLOR_string__String___43d]))(var_dirname, var36) /* + on <var_dirname:nullable String(String)>*/;
-var41 = ((val* (*)(val*, val*))(var40->class->vft[COLOR_string__String___43d]))(var40, var_name) /* + on <var40:String>*/;
 if (varonce42) {
 var43 = varonce42;
 } else {
@@ -1711,697 +3247,818 @@ var46 = string__NativeString__to_s_with_length(var44, var45);
 var43 = var46;
 varonce42 = var43;
 }
-var47 = ((val* (*)(val*, val*))(var41->class->vft[COLOR_string__String___43d]))(var41, var43) /* + on <var41:String>*/;
-var48 = ((val* (*)(val*, val*))(var47->class->vft[COLOR_string__String___43d]))(var47, var_name) /* + on <var47:String>*/;
+{
+var47 = string__FlatString___43d(var_dirname, var43);
+}
+{
+var48 = string__FlatString___43d(var47, var_name);
+}
 if (varonce49) {
 var50 = varonce49;
 } else {
-var51 = ".nit";
-var52 = 4;
+var51 = "/";
+var52 = 1;
 var53 = string__NativeString__to_s_with_length(var51, var52);
 var50 = var53;
 varonce49 = var50;
 }
-var54 = ((val* (*)(val*, val*))(var48->class->vft[COLOR_string__String___43d]))(var48, var50) /* + on <var48:String>*/;
-var_try_file = var54;
-var55 = ((short int (*)(val*))(var_try_file->class->vft[COLOR_file__String__file_exists]))(var_try_file) /* file_exists on <var_try_file:String>*/;
-if (var55){
+{
+var54 = string__FlatString___43d(var48, var50);
+}
+{
+var55 = string__FlatString___43d(var54, var_name);
+}
 if (varonce56) {
 var57 = varonce56;
 } else {
-var58 = "/";
-var59 = 1;
+var58 = ".nit";
+var59 = 4;
 var60 = string__NativeString__to_s_with_length(var58, var59);
 var57 = var60;
 varonce56 = var57;
 }
-var61 = ((val* (*)(val*, val*))(var_dirname->class->vft[COLOR_string__String___43d]))(var_dirname, var57) /* + on <var_dirname:nullable String(String)>*/;
-var62 = ((val* (*)(val*, val*))(var61->class->vft[COLOR_string__String___43d]))(var61, var_name) /* + on <var61:String>*/;
-var63 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mgroup]))(self, var62) /* get_mgroup on <self:ModelBuilder>*/;
-var_mgroup = var63;
-var64 = ((val* (*)(val*))(var_try_file->class->vft[COLOR_file__String__simplify_path]))(var_try_file) /* simplify_path on <var_try_file:String>*/;
-var65 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var64) /* load_module on <self:ModelBuilder>*/;
-var_res66 = var65;
-var67 = NULL;
-if (var_res66 == NULL) {
-var68 = 1; /* is null */
-} else {
-var68 = 0; /* arg is null but recv is not */
+{
+var61 = string__FlatString___43d(var55, var57);
 }
-if (var68){
-var69 = NULL;
-var = var69;
-goto RET_LABEL;
+var_try_file = var61;
+{
+var62 = file__String__file_exists(var_try_file);
+}
+if (var62){
+{
+var63 = file__String__simplify_path(var_try_file);
+}
+{
+var64 = modelbuilder__ModelBuilder__identify_file(self, var63);
+}
+var_res65 = var64;
+var66 = NULL;
+if (var_res65 == NULL) {
+var67 = 0; /* is null */
 } else {
+var67 = 1; /* arg is null and recv is not */
 }
-var70 = ((val* (*)(val*))(var_res66->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_res66) /* mmodule on <var_res66:nullable AModule(AModule)>*/;
-if (var70 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 281);
+if (0) {
+{ /* Inline kernel#Object#!= (var_res65,var66) on <var_res65:nullable ModulePath> */
+var_other = var66;
+{
+var71 = ((short int (*)(val*, val*))(var_res65->class->vft[COLOR_kernel__Object___61d_61d]))(var_res65, var_other) /* == on <var_res65:nullable ModulePath(ModulePath)>*/;
+var70 = var71;
+}
+var72 = !var70;
+var68 = var72;
+goto RET_LABEL69;
+RET_LABEL69:(void)0;
+}
+var67 = var68;
+}
+if (unlikely(!var67)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 330);
 show_backtrace(1);
 }
-var = var70;
+var = var_res65;
 goto RET_LABEL;
 } else {
 }
-var71 = ((val* (*)(val*))(var_mgroup->class->vft[COLOR_mproject__MGroup__parent]))(var_mgroup) /* parent on <var_mgroup:nullable MGroup(MGroup)>*/;
-var_mgroup = var71;
-CONTINUE_label: (void)0;
+{
+{ /* Inline mproject#MGroup#parent (var_c) on <var_c:nullable MGroup(MGroup)> */
+var75 = var_c->attrs[COLOR_mproject__MGroup___parent].val; /* _parent on <var_c:nullable MGroup(MGroup)> */
+var73 = var75;
+RET_LABEL74:(void)0;
 }
-BREAK_label: (void)0;
-} else {
 }
-var72 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__paths]))(self) /* paths on <self:ModelBuilder>*/;
-var_lookpaths = var72;
-var74 = NULL;
-if (var_mmodule == NULL) {
-var75 = 0; /* is null */
+var_c = var73;
 } else {
-var75 = 1; /* arg is null and recv is not */
+goto BREAK_label;
 }
-var_ = var75;
-if (var75){
-var76 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__mgroup]))(var_mmodule) /* mgroup on <var_mmodule:nullable MModule(MModule)>*/;
-var77 = NULL;
-if (var76 == NULL) {
-var78 = 0; /* is null */
-} else {
-var78 = 1; /* arg is null and recv is not */
 }
-var73 = var78;
-} else {
-var73 = var_;
+BREAK_label: (void)0;
+{
+{ /* Inline modelbuilder#ModelBuilder#paths (self) on <self:ModelBuilder> */
+var78 = self->attrs[COLOR_modelbuilder__ModelBuilder___paths].val; /* _paths on <self:ModelBuilder> */
+if (unlikely(var78 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 300);
+show_backtrace(1);
+}
+var76 = var78;
+RET_LABEL77:(void)0;
 }
-if (var73){
-var79 = ((val* (*)(val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__mgroup]))(var_mmodule) /* mgroup on <var_mmodule:nullable MModule(MModule)>*/;
-if (var79 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 294);
+}
+var_lookpaths = var76;
+var79 = NULL;
+if (var_mgroup == NULL) {
+var80 = 0; /* is null */
+} else {
+var80 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mgroup,var79) on <var_mgroup:nullable MGroup> */
+var_other = var79;
+{
+var84 = ((short int (*)(val*, val*))(var_mgroup->class->vft[COLOR_kernel__Object___61d_61d]))(var_mgroup, var_other) /* == on <var_mgroup:nullable MGroup(MGroup)>*/;
+var83 = var84;
+}
+var85 = !var83;
+var81 = var85;
+goto RET_LABEL82;
+RET_LABEL82:(void)0;
+}
+var80 = var81;
+}
+if (var80){
+{
+{ /* Inline mproject#MGroup#mproject (var_mgroup) on <var_mgroup:nullable MGroup(MGroup)> */
+var88 = var_mgroup->attrs[COLOR_mproject__MGroup___mproject].val; /* _mproject on <var_mgroup:nullable MGroup(MGroup)> */
+if (unlikely(var88 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproject");
+PRINT_ERROR(" (%s:%d)\n", "model/mproject.nit", 60);
 show_backtrace(1);
-} else {
-var80 = ((val* (*)(val*))(var79->class->vft[COLOR_mproject__MGroup__mproject]))(var79) /* mproject on <var79:nullable MGroup>*/;
 }
-var81 = ((val* (*)(val*))(var80->class->vft[COLOR_mproject__MProject__root]))(var80) /* root on <var80:MProject>*/;
-if (var81 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Receiver is null");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 294);
+var86 = var88;
+RET_LABEL87:(void)0;
+}
+}
+{
+{ /* Inline mproject#MProject#root (var86) on <var86:MProject> */
+var91 = var86->attrs[COLOR_mproject__MProject___root].val; /* _root on <var86:MProject> */
+var89 = var91;
+RET_LABEL90:(void)0;
+}
+}
+if (var89 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 343);
 show_backtrace(1);
 } else {
-var82 = ((val* (*)(val*))(var81->class->vft[COLOR_mproject__MGroup__filepath]))(var81) /* filepath on <var81:nullable MGroup>*/;
+{ /* Inline mproject#MGroup#filepath (var89) on <var89:nullable MGroup> */
+if (unlikely(var89 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "model/mproject.nit", 83);
+show_backtrace(1);
 }
-var_dirname83 = var82;
-var84 = NULL;
-if (var_dirname83 == NULL) {
-var85 = 0; /* is null */
-} else {
-var85 = 1; /* arg is null and recv is not */
+var94 = var89->attrs[COLOR_mproject__MGroup___filepath].val; /* _filepath on <var89:nullable MGroup> */
+var92 = var94;
+RET_LABEL93:(void)0;
 }
-if (var85){
-if (varonce86) {
-var87 = varonce86;
-} else {
-var88 = "..";
-var89 = 2;
-var90 = string__NativeString__to_s_with_length(var88, var89);
-var87 = var90;
-varonce86 = var87;
 }
-var91 = ((val* (*)(val*, val*))(var_dirname83->class->vft[COLOR_file__String__join_path]))(var_dirname83, var87) /* join_path on <var_dirname83:nullable String(String)>*/;
-var92 = ((val* (*)(val*))(var91->class->vft[COLOR_file__String__simplify_path]))(var91) /* simplify_path on <var91:String>*/;
-var_dirname83 = var92;
-var94 = ((short int (*)(val*, val*))(var_lookpaths->class->vft[COLOR_abstract_collection__Collection__has]))(var_lookpaths, var_dirname83) /* has on <var_lookpaths:Array[String]>*/;
-var95 = !var94;
-var_96 = var95;
-if (var95){
-var97 = ((short int (*)(val*))(var_dirname83->class->vft[COLOR_file__String__file_exists]))(var_dirname83) /* file_exists on <var_dirname83:nullable String(String)>*/;
-var93 = var97;
+var_dirname95 = var92;
+var96 = NULL;
+if (var_dirname95 == NULL) {
+var97 = 0; /* is null */
 } else {
-var93 = var_96;
+var97 = 1; /* arg is null and recv is not */
 }
-if (var93){
-var98 = ((val* (*)(val*))(var_lookpaths->class->vft[COLOR_array__Collection__to_a]))(var_lookpaths) /* to_a on <var_lookpaths:Array[String]>*/;
-var_lookpaths = var98;
-((void (*)(val*, val*))(var_lookpaths->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_lookpaths, var_dirname83) /* add on <var_lookpaths:Array[String]>*/;
-} else {
+if (0) {
+{ /* Inline kernel#Object#!= (var_dirname95,var96) on <var_dirname95:nullable String> */
+var_other = var96;
+{
+var101 = ((short int (*)(val*, val*))(var_dirname95->class->vft[COLOR_kernel__Object___61d_61d]))(var_dirname95, var_other) /* == on <var_dirname95:nullable String(String)>*/;
+var100 = var101;
 }
-} else {
+var102 = !var100;
+var98 = var102;
+goto RET_LABEL99;
+RET_LABEL99:(void)0;
 }
-} else {
+var97 = var98;
 }
-var99 = NULL;
-var_candidate = var99;
-var100 = ((val* (*)(val*))(var_lookpaths->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_lookpaths) /* iterator on <var_lookpaths:Array[String]>*/;
-for(;;) {
-var101 = ((short int (*)(val*))(var100->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var100) /* is_ok on <var100:Iterator[nullable Object]>*/;
-if(!var101) break;
-var102 = ((val* (*)(val*))(var100->class->vft[COLOR_abstract_collection__Iterator__item]))(var100) /* item on <var100:Iterator[nullable Object]>*/;
-var_dirname103 = var102;
-if (varonce104) {
-var105 = varonce104;
-} else {
-var106 = "/";
-var107 = 1;
-var108 = string__NativeString__to_s_with_length(var106, var107);
-var105 = var108;
-varonce104 = var105;
-}
-var109 = ((val* (*)(val*, val*))(var_dirname103->class->vft[COLOR_string__String___43d]))(var_dirname103, var105) /* + on <var_dirname103:String>*/;
-var110 = ((val* (*)(val*, val*))(var109->class->vft[COLOR_string__String___43d]))(var109, var_name) /* + on <var109:String>*/;
-if (varonce111) {
-var112 = varonce111;
+if (var97){
+if (varonce103) {
+var104 = varonce103;
 } else {
-var113 = ".nit";
-var114 = 4;
-var115 = string__NativeString__to_s_with_length(var113, var114);
-var112 = var115;
-varonce111 = var112;
+var105 = "..";
+var106 = 2;
+var107 = string__NativeString__to_s_with_length(var105, var106);
+var104 = var107;
+varonce103 = var104;
 }
-var116 = ((val* (*)(val*, val*))(var110->class->vft[COLOR_string__String___43d]))(var110, var112) /* + on <var110:String>*/;
-var117 = ((val* (*)(val*))(var116->class->vft[COLOR_file__String__simplify_path]))(var116) /* simplify_path on <var116:String>*/;
-var_try_file118 = var117;
-((void (*)(val*, val*))(var_tries->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_tries, var_try_file118) /* add on <var_tries:Array[String]>*/;
-var119 = ((short int (*)(val*))(var_try_file118->class->vft[COLOR_file__String__file_exists]))(var_try_file118) /* file_exists on <var_try_file118:String>*/;
-if (var119){
-var120 = NULL;
-if (var_candidate == NULL) {
-var121 = 1; /* is null */
-} else {
-var121 = 0; /* arg is null but recv is not */
+{
+var108 = file__String__join_path(var_dirname95, var104);
 }
-if (var121){
-var_candidate = var_try_file118;
+{
+var109 = file__String__simplify_path(var108);
+}
+var_dirname95 = var109;
+{
+var111 = array__AbstractArrayRead__has(var_lookpaths, var_dirname95);
+}
+var112 = !var111;
+var_ = var112;
+if (var112){
+{
+var113 = file__String__file_exists(var_dirname95);
+}
+var110 = var113;
 } else {
-var122 = ((short int (*)(val*, val*))(var_candidate->class->vft[COLOR_kernel__Object___33d_61d]))(var_candidate, var_try_file118) /* != on <var_candidate:nullable String(String)>*/;
-if (var122){
-var123 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_candidate) /* module_absolute_path on <self:ModelBuilder>*/;
-var_abs_candidate = var123;
-var124 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_try_file118) /* module_absolute_path on <self:ModelBuilder>*/;
-var_abs_try_file = var124;
-var125 = ((short int (*)(val*, val*))(var_abs_candidate->class->vft[COLOR_kernel__Object___33d_61d]))(var_abs_candidate, var_abs_try_file) /* != on <var_abs_candidate:String>*/;
-if (var125){
-if (varonce126) {
-var127 = varonce126;
+var110 = var_;
+}
+if (var110){
+{
+var114 = array__Collection__to_a(var_lookpaths);
+}
+var_lookpaths = var114;
+{
+array__Array__add(var_lookpaths, var_dirname95); /* Direct call array#Array#add on <var_lookpaths:Array[String]>*/
+}
 } else {
-var128 = "Error: conflicting module file for ";
-var129 = 35;
-var130 = string__NativeString__to_s_with_length(var128, var129);
-var127 = var130;
-varonce126 = var127;
 }
-if (varonce131) {
-var132 = varonce131;
 } else {
-var133 = ": ";
-var134 = 2;
-var135 = string__NativeString__to_s_with_length(var133, var134);
-var132 = var135;
-varonce131 = var132;
 }
-if (varonce136) {
-var137 = varonce136;
 } else {
-var138 = " ";
-var139 = 1;
-var140 = string__NativeString__to_s_with_length(var138, var139);
-var137 = var140;
-varonce136 = var137;
 }
-var141 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var141 = array_instance Array[Object] */
-var142 = 6;
-var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var143)->values[0] = (val*) var127;
-((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_name;
-((struct instance_array__NativeArray*)var143)->values[2] = (val*) var132;
-((struct instance_array__NativeArray*)var143)->values[3] = (val*) var_candidate;
-((struct instance_array__NativeArray*)var143)->values[4] = (val*) var137;
-((struct instance_array__NativeArray*)var143)->values[5] = (val*) var_try_file118;
-((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
+{
+var115 = ((val* (*)(val*))(var_anode->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_anode) /* hot_location on <var_anode:ANode>*/;
 }
-var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var144) /* error on <self:ModelBuilder>*/;
-} else {
+{
+var116 = modelbuilder__ModelBuilder__search_module_in_paths(self, var115, var_name, var_lookpaths);
 }
+var_candidate = var116;
+var117 = NULL;
+if (var_candidate == NULL) {
+var118 = 1; /* is null */
 } else {
+var118 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_candidate,var117) on <var_candidate:nullable ModulePath> */
+var_other121 = var117;
+{
+{ /* Inline kernel#Object#is_same_instance (var_candidate,var_other121) on <var_candidate:nullable ModulePath(ModulePath)> */
+var124 = var_candidate == var_other121;
+var122 = var124;
+goto RET_LABEL123;
+RET_LABEL123:(void)0;
+}
+}
+var119 = var122;
+goto RET_LABEL120;
+RET_LABEL120:(void)0;
+}
+var118 = var119;
+}
+if (var118){
+var125 = NULL;
+if (var_mgroup == NULL) {
+var126 = 0; /* is null */
+} else {
+var126 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mgroup,var125) on <var_mgroup:nullable MGroup> */
+var_other = var125;
+{
+var130 = ((short int (*)(val*, val*))(var_mgroup->class->vft[COLOR_kernel__Object___61d_61d]))(var_mgroup, var_other) /* == on <var_mgroup:nullable MGroup(MGroup)>*/;
+var129 = var130;
+}
+var131 = !var129;
+var127 = var131;
+goto RET_LABEL128;
+RET_LABEL128:(void)0;
+}
+var126 = var127;
+}
+if (var126){
+if (varonce132) {
+var133 = varonce132;
+} else {
+var134 = "Error: cannot find module ";
+var135 = 26;
+var136 = string__NativeString__to_s_with_length(var134, var135);
+var133 = var136;
+varonce132 = var133;
+}
+if (varonce137) {
+var138 = varonce137;
+} else {
+var139 = " from ";
+var140 = 6;
+var141 = string__NativeString__to_s_with_length(var139, var140);
+var138 = var141;
+varonce137 = var138;
+}
+{
+{ /* Inline mproject#MGroup#name (var_mgroup) on <var_mgroup:nullable MGroup(MGroup)> */
+var144 = var_mgroup->attrs[COLOR_mproject__MGroup___name].val; /* _name on <var_mgroup:nullable MGroup(MGroup)> */
+if (unlikely(var144 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "model/mproject.nit", 56);
+show_backtrace(1);
+}
+var142 = var144;
+RET_LABEL143:(void)0;
 }
-} else {
 }
 if (varonce145) {
 var146 = varonce145;
 } else {
-var147 = "/";
-var148 = 1;
+var147 = ". tried ";
+var148 = 8;
 var149 = string__NativeString__to_s_with_length(var147, var148);
 var146 = var149;
 varonce145 = var146;
 }
-var150 = ((val* (*)(val*, val*))(var_dirname103->class->vft[COLOR_string__String___43d]))(var_dirname103, var146) /* + on <var_dirname103:String>*/;
-var151 = ((val* (*)(val*, val*))(var150->class->vft[COLOR_string__String___43d]))(var150, var_name) /* + on <var150:String>*/;
-if (varonce152) {
-var153 = varonce152;
-} else {
-var154 = "/";
-var155 = 1;
-var156 = string__NativeString__to_s_with_length(var154, var155);
-var153 = var156;
-varonce152 = var153;
-}
-var157 = ((val* (*)(val*, val*))(var151->class->vft[COLOR_string__String___43d]))(var151, var153) /* + on <var151:String>*/;
-var158 = ((val* (*)(val*, val*))(var157->class->vft[COLOR_string__String___43d]))(var157, var_name) /* + on <var157:String>*/;
-if (varonce159) {
-var160 = varonce159;
-} else {
-var161 = ".nit";
-var162 = 4;
-var163 = string__NativeString__to_s_with_length(var161, var162);
-var160 = var163;
-varonce159 = var160;
-}
-var164 = ((val* (*)(val*, val*))(var158->class->vft[COLOR_string__String___43d]))(var158, var160) /* + on <var158:String>*/;
-var165 = ((val* (*)(val*))(var164->class->vft[COLOR_file__String__simplify_path]))(var164) /* simplify_path on <var164:String>*/;
-var_try_file118 = var165;
-var166 = ((short int (*)(val*))(var_try_file118->class->vft[COLOR_file__String__file_exists]))(var_try_file118) /* file_exists on <var_try_file118:String>*/;
-if (var166){
-var167 = NULL;
-if (var_candidate == NULL) {
-var168 = 1; /* is null */
+if (varonce150) {
+var151 = varonce150;
 } else {
-var168 = 0; /* arg is null but recv is not */
+var152 = ", ";
+var153 = 2;
+var154 = string__NativeString__to_s_with_length(var152, var153);
+var151 = var154;
+varonce150 = var151;
 }
-if (var168){
-var_candidate = var_try_file118;
-} else {
-var169 = ((short int (*)(val*, val*))(var_candidate->class->vft[COLOR_kernel__Object___33d_61d]))(var_candidate, var_try_file118) /* != on <var_candidate:nullable String(String)>*/;
-if (var169){
-var170 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_candidate) /* module_absolute_path on <self:ModelBuilder>*/;
-var_abs_candidate171 = var170;
-var172 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_try_file118) /* module_absolute_path on <self:ModelBuilder>*/;
-var_abs_try_file173 = var172;
-var174 = ((short int (*)(val*, val*))(var_abs_candidate171->class->vft[COLOR_kernel__Object___33d_61d]))(var_abs_candidate171, var_abs_try_file173) /* != on <var_abs_candidate171:String>*/;
-if (var174){
-if (varonce175) {
-var176 = varonce175;
-} else {
-var177 = "Error: conflicting module file for ";
-var178 = 35;
-var179 = string__NativeString__to_s_with_length(var177, var178);
-var176 = var179;
-varonce175 = var176;
+{
+var155 = string__Collection__join(var_lookpaths, var151);
 }
-if (varonce180) {
-var181 = varonce180;
-} else {
-var182 = ": ";
-var183 = 2;
-var184 = string__NativeString__to_s_with_length(var182, var183);
-var181 = var184;
-varonce180 = var181;
+var156 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var156 = array_instance Array[Object] */
+var157 = 6;
+var158 = NEW_array__NativeArray(var157, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var158)->values[0] = (val*) var133;
+((struct instance_array__NativeArray*)var158)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var158)->values[2] = (val*) var138;
+((struct instance_array__NativeArray*)var158)->values[3] = (val*) var142;
+((struct instance_array__NativeArray*)var158)->values[4] = (val*) var146;
+((struct instance_array__NativeArray*)var158)->values[5] = (val*) var155;
+{
+((void (*)(val*, val*, long))(var156->class->vft[COLOR_array__Array__with_native]))(var156, var158, var157) /* with_native on <var156:Array[Object]>*/;
 }
-if (varonce185) {
-var186 = varonce185;
-} else {
-var187 = " ";
-var188 = 1;
-var189 = string__NativeString__to_s_with_length(var187, var188);
-var186 = var189;
-varonce185 = var186;
 }
-var190 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var190 = array_instance Array[Object] */
-var191 = 6;
-var192 = NEW_array__NativeArray(var191, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var192)->values[0] = (val*) var176;
-((struct instance_array__NativeArray*)var192)->values[1] = (val*) var_name;
-((struct instance_array__NativeArray*)var192)->values[2] = (val*) var181;
-((struct instance_array__NativeArray*)var192)->values[3] = (val*) var_candidate;
-((struct instance_array__NativeArray*)var192)->values[4] = (val*) var186;
-((struct instance_array__NativeArray*)var192)->values[5] = (val*) var_try_file118;
-((void (*)(val*, val*, long))(var190->class->vft[COLOR_array__Array__with_native]))(var190, var192, var191) /* with_native on <var190:Array[Object]>*/;
+{
+var159 = ((val* (*)(val*))(var156->class->vft[COLOR_string__Object__to_s]))(var156) /* to_s on <var156:Array[Object]>*/;
 }
-var193 = ((val* (*)(val*))(var190->class->vft[COLOR_string__Object__to_s]))(var190) /* to_s on <var190:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var193) /* error on <self:ModelBuilder>*/;
-} else {
+{
+modelbuilder__ModelBuilder__error(self, var_anode, var159); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
 }
 } else {
+if (varonce160) {
+var161 = varonce160;
+} else {
+var162 = "Error: cannot find module ";
+var163 = 26;
+var164 = string__NativeString__to_s_with_length(var162, var163);
+var161 = var164;
+varonce160 = var161;
 }
+if (varonce165) {
+var166 = varonce165;
+} else {
+var167 = ". tried ";
+var168 = 8;
+var169 = string__NativeString__to_s_with_length(var167, var168);
+var166 = var169;
+varonce165 = var166;
 }
+if (varonce170) {
+var171 = varonce170;
 } else {
+var172 = ", ";
+var173 = 2;
+var174 = string__NativeString__to_s_with_length(var172, var173);
+var171 = var174;
+varonce170 = var171;
 }
-CONTINUE_label194: (void)0;
-((void (*)(val*))(var100->class->vft[COLOR_abstract_collection__Iterator__next]))(var100) /* next on <var100:Iterator[nullable Object]>*/;
+{
+var175 = string__Collection__join(var_lookpaths, var171);
 }
-BREAK_label194: (void)0;
-var195 = NULL;
-if (var_candidate == NULL) {
-var196 = 1; /* is null */
-} else {
-var196 = 0; /* arg is null but recv is not */
+var176 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var176 = array_instance Array[Object] */
+var177 = 4;
+var178 = NEW_array__NativeArray(var177, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var178)->values[0] = (val*) var161;
+((struct instance_array__NativeArray*)var178)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var178)->values[2] = (val*) var166;
+((struct instance_array__NativeArray*)var178)->values[3] = (val*) var175;
+{
+((void (*)(val*, val*, long))(var176->class->vft[COLOR_array__Array__with_native]))(var176, var178, var177) /* with_native on <var176:Array[Object]>*/;
 }
-if (var196){
-var197 = NULL;
-if (var_mmodule == NULL) {
-var198 = 0; /* is null */
-} else {
-var198 = 1; /* arg is null and recv is not */
-}
-if (var198){
-if (varonce199) {
-var200 = varonce199;
-} else {
-var201 = "Error: cannot find module ";
-var202 = 26;
-var203 = string__NativeString__to_s_with_length(var201, var202);
-var200 = var203;
-varonce199 = var200;
-}
-if (varonce204) {
-var205 = varonce204;
-} else {
-var206 = " from ";
-var207 = 6;
-var208 = string__NativeString__to_s_with_length(var206, var207);
-var205 = var208;
-varonce204 = var205;
-}
-if (varonce209) {
-var210 = varonce209;
-} else {
-var211 = ". tried ";
-var212 = 8;
-var213 = string__NativeString__to_s_with_length(var211, var212);
-var210 = var213;
-varonce209 = var210;
-}
-if (varonce214) {
-var215 = varonce214;
-} else {
-var216 = ", ";
-var217 = 2;
-var218 = string__NativeString__to_s_with_length(var216, var217);
-var215 = var218;
-varonce214 = var215;
-}
-var219 = ((val* (*)(val*, val*))(var_tries->class->vft[COLOR_string__Collection__join]))(var_tries, var215) /* join on <var_tries:Array[String]>*/;
-var220 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var220 = array_instance Array[Object] */
-var221 = 6;
-var222 = NEW_array__NativeArray(var221, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var222)->values[0] = (val*) var200;
-((struct instance_array__NativeArray*)var222)->values[1] = (val*) var_name;
-((struct instance_array__NativeArray*)var222)->values[2] = (val*) var205;
-((struct instance_array__NativeArray*)var222)->values[3] = (val*) var_mmodule;
-((struct instance_array__NativeArray*)var222)->values[4] = (val*) var210;
-((struct instance_array__NativeArray*)var222)->values[5] = (val*) var219;
-((void (*)(val*, val*, long))(var220->class->vft[COLOR_array__Array__with_native]))(var220, var222, var221) /* with_native on <var220:Array[Object]>*/;
-}
-var223 = ((val* (*)(val*))(var220->class->vft[COLOR_string__Object__to_s]))(var220) /* to_s on <var220:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var223) /* error on <self:ModelBuilder>*/;
-} else {
-if (varonce224) {
-var225 = varonce224;
-} else {
-var226 = "Error: cannot find module ";
-var227 = 26;
-var228 = string__NativeString__to_s_with_length(var226, var227);
-var225 = var228;
-varonce224 = var225;
-}
-if (varonce229) {
-var230 = varonce229;
-} else {
-var231 = ". tried ";
-var232 = 8;
-var233 = string__NativeString__to_s_with_length(var231, var232);
-var230 = var233;
-varonce229 = var230;
-}
-if (varonce234) {
-var235 = varonce234;
-} else {
-var236 = ", ";
-var237 = 2;
-var238 = string__NativeString__to_s_with_length(var236, var237);
-var235 = var238;
-varonce234 = var235;
-}
-var239 = ((val* (*)(val*, val*))(var_tries->class->vft[COLOR_string__Collection__join]))(var_tries, var235) /* join on <var_tries:Array[String]>*/;
-var240 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var240 = array_instance Array[Object] */
-var241 = 4;
-var242 = NEW_array__NativeArray(var241, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var242)->values[0] = (val*) var225;
-((struct instance_array__NativeArray*)var242)->values[1] = (val*) var_name;
-((struct instance_array__NativeArray*)var242)->values[2] = (val*) var230;
-((struct instance_array__NativeArray*)var242)->values[3] = (val*) var239;
-((void (*)(val*, val*, long))(var240->class->vft[COLOR_array__Array__with_native]))(var240, var242, var241) /* with_native on <var240:Array[Object]>*/;
-}
-var243 = ((val* (*)(val*))(var240->class->vft[COLOR_string__Object__to_s]))(var240) /* to_s on <var240:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_anode, var243) /* error on <self:ModelBuilder>*/;
-}
-var244 = NULL;
-var = var244;
-goto RET_LABEL;
-} else {
 }
-var245 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module]))(self, var_candidate) /* load_module on <self:ModelBuilder>*/;
-var_res246 = var245;
-var247 = NULL;
-if (var_res246 == NULL) {
-var248 = 1; /* is null */
-} else {
-var248 = 0; /* arg is null but recv is not */
+{
+var179 = ((val* (*)(val*))(var176->class->vft[COLOR_string__Object__to_s]))(var176) /* to_s on <var176:Array[Object]>*/;
 }
-if (var248){
-var249 = NULL;
-var = var249;
+{
+modelbuilder__ModelBuilder__error(self, var_anode, var179); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
+}
+}
+var180 = NULL;
+var = var180;
 goto RET_LABEL;
 } else {
 }
-var250 = ((val* (*)(val*))(var_res246->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_res246) /* mmodule on <var_res246:nullable AModule(AModule)>*/;
-if (var250 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 344);
-show_backtrace(1);
-}
-var = var250;
+var = var_candidate;
 goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method modelbuilder#ModelBuilder#get_mmodule_by_name for (self: Object, ANode, nullable MModule, String): nullable MModule */
-val* VIRTUAL_modelbuilder__ModelBuilder__get_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
-val* var /* : nullable MModule */;
-val* var1 /* : nullable MModule */;
-var1 = modelbuilder__ModelBuilder__get_mmodule_by_name(self, p0, p1, p2);
+/* method modelbuilder#ModelBuilder#search_mmodule_by_name for (self: Object, ANode, nullable MGroup, String): nullable ModulePath */
+val* VIRTUAL_modelbuilder__ModelBuilder__search_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable ModulePath */;
+val* var1 /* : nullable ModulePath */;
+var1 = modelbuilder__ModelBuilder__search_mmodule_by_name(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___64didentified_files].val; /* @identified_files on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @identified_files");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 347);
-show_backtrace(1);
+/* method modelbuilder#ModelBuilder#get_mmodule_by_name for (self: ModelBuilder, ANode, nullable MGroup, String): nullable MModule */
+val* modelbuilder__ModelBuilder__get_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable MModule */;
+val* var_anode /* var anode: ANode */;
+val* var_mgroup /* var mgroup: nullable MGroup */;
+val* var_name /* var name: String */;
+val* var1 /* : nullable ModulePath */;
+val* var_path /* var path: nullable ModulePath */;
+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* var10 /* : String */;
+val* var12 /* : String */;
+val* var13 /* : nullable AModule */;
+val* var_res /* var res: nullable AModule */;
+val* var14 /* : null */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+val* var21 /* : null */;
+val* var22 /* : nullable MModule */;
+val* var24 /* : nullable MModule */;
+var_anode = p0;
+var_mgroup = p1;
+var_name = p2;
+{
+var1 = modelbuilder__ModelBuilder__search_mmodule_by_name(self, var_anode, var_mgroup, var_name);
 }
-var = var1;
-RET_LABEL:;
-return var;
+var_path = var1;
+var2 = NULL;
+if (var_path == NULL) {
+var3 = 1; /* is null */
+} else {
+var3 = 0; /* arg is null but recv is not */
 }
-/* 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] */;
-var1 = modelbuilder__ModelBuilder__identified_files(self);
-var = var1;
-RET_LABEL:;
-return var;
+if (0) {
+{ /* Inline kernel#Object#== (var_path,var2) on <var_path:nullable ModulePath> */
+var_other = var2;
+{
+{ /* Inline kernel#Object#is_same_instance (var_path,var_other) on <var_path:nullable ModulePath(ModulePath)> */
+var8 = var_path == var_other;
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
 }
-/* method modelbuilder#ModelBuilder#identified_files= for (self: ModelBuilder, HashMap[String, nullable ModulePath]) */
-void modelbuilder__ModelBuilder__identified_files_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64didentified_files].val = p0; /* @identified_files on <self:ModelBuilder> */
-RET_LABEL:;
 }
-/* method modelbuilder#ModelBuilder#identified_files= for (self: Object, HashMap[String, nullable ModulePath]) */
-void VIRTUAL_modelbuilder__ModelBuilder__identified_files_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__identified_files_61d(self, p0);
+var4 = var6;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
+}
+var3 = var4;
+}
+if (var3){
+var9 = NULL;
+var = var9;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModulePath#filepath (var_path) on <var_path:nullable ModulePath(ModulePath)> */
+var12 = var_path->attrs[COLOR_modelbuilder__ModulePath___filepath].val; /* _filepath on <var_path:nullable ModulePath(ModulePath)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _filepath");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 773);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+{
+var13 = modelbuilder__ModelBuilder__load_module(self, var10);
+}
+var_res = var13;
+var14 = NULL;
+if (var_res == NULL) {
+var15 = 1; /* is null */
+} else {
+var15 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_res,var14) on <var_res:nullable AModule> */
+var_other = var14;
+{
+{ /* Inline kernel#Object#is_same_instance (var_res,var_other) on <var_res:nullable AModule(AModule)> */
+var20 = var_res == var_other;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
+}
+var15 = var16;
+}
+if (var15){
+var21 = NULL;
+var = var21;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#AModule#mmodule (var_res) on <var_res:nullable AModule(AModule)> */
+var24 = var_res->attrs[COLOR_modelbuilder__AModule___mmodule].val; /* _mmodule on <var_res:nullable AModule(AModule)> */
+var22 = var24;
+RET_LABEL23:(void)0;
+}
+}
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 376);
+show_backtrace(1);
+}
+var = var22;
+goto RET_LABEL;
 RET_LABEL:;
+return var;
 }
-/* method modelbuilder#ModelBuilder#identify_file for (self: ModelBuilder, String): nullable ModulePath */
-val* modelbuilder__ModelBuilder__identify_file(val* self, val* p0) {
+/* method modelbuilder#ModelBuilder#get_mmodule_by_name for (self: Object, ANode, nullable MGroup, String): nullable MModule */
+val* VIRTUAL_modelbuilder__ModelBuilder__get_mmodule_by_name(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable MModule */;
+val* var1 /* : nullable MModule */;
+var1 = modelbuilder__ModelBuilder__get_mmodule_by_name(self, p0, p1, p2);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#search_module_in_paths for (self: ModelBuilder, nullable Location, String, Collection[String]): nullable ModulePath */
+val* modelbuilder__ModelBuilder__search_module_in_paths(val* self, val* p0, val* p1, val* p2) {
 val* var /* : nullable ModulePath */;
-val* var_path /* var path: String */;
-short int var1 /* : Bool */;
-short int var2 /* : Bool */;
-val* var3 /* : ToolContext */;
-val* var4 /* : null */;
+val* var_location /* var location: nullable Location */;
+val* var_name /* var name: String */;
+val* var_lookpaths /* var lookpaths: Collection[String] */;
+val* var1 /* : null */;
+val* var_candidate /* var candidate: nullable String */;
+val* var_ /* var : Collection[String] */;
+val* var2 /* : Iterator[nullable Object] */;
+val* var_3 /* var : Iterator[String] */;
+short int var4 /* : Bool */;
+val* var5 /* : nullable Object */;
+val* var_dirname /* var dirname: String */;
 static val* varonce;
-val* var5 /* : String */;
-char* var6 /* : NativeString */;
-long var7 /* : Int */;
-val* var8 /* : String */;
-static val* varonce9;
+val* var6 /* : String */;
+char* var7 /* : NativeString */;
+long var8 /* : Int */;
+val* var9 /* : FlatString */;
 val* var10 /* : String */;
-char* var11 /* : NativeString */;
-long var12 /* : Int */;
+val* var11 /* : String */;
+static val* varonce12;
 val* var13 /* : String */;
-val* var14 /* : Array[Object] */;
+char* var14 /* : NativeString */;
 long var15 /* : Int */;
-val* var16 /* : NativeArray[Object] */;
+val* var16 /* : FlatString */;
 val* var17 /* : String */;
-val* var18 /* : null */;
-static val* varonce19;
-val* var20 /* : String */;
-char* var21 /* : NativeString */;
-long var22 /* : Int */;
-val* var23 /* : String */;
-val* var24 /* : String */;
-val* var_pn /* var pn: String */;
-val* var25 /* : String */;
-val* var_rp /* var rp: String */;
-val* var26 /* : HashMap[String, nullable ModulePath] */;
+val* var18 /* : String */;
+val* var_try_file /* var try_file: String */;
+short int var19 /* : Bool */;
+val* var20 /* : null */;
+short int var21 /* : Bool */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var26 /* : Bool */;
 short int var27 /* : Bool */;
-val* var28 /* : HashMap[String, nullable ModulePath] */;
-val* var29 /* : nullable Object */;
-static val* varonce30;
-val* var31 /* : String */;
-char* var32 /* : NativeString */;
-long var33 /* : Int */;
-val* var34 /* : String */;
-val* var35 /* : String */;
-val* var36 /* : String */;
-val* var_mgrouppath /* var mgrouppath: String */;
-val* var37 /* : nullable MGroup */;
-val* var_mgroup /* var mgroup: nullable MGroup */;
-val* var38 /* : null */;
-short int var39 /* : Bool */;
-val* var40 /* : MProject */;
-val* var41 /* : Model */;
-val* var_mproject /* var mproject: MProject */;
-val* var42 /* : MGroup */;
-val* var43 /* : null */;
-val* var44 /* : ToolContext */;
+short int var28 /* : Bool */;
+val* var29 /* : String */;
+val* var_abs_candidate /* var abs_candidate: String */;
+val* var30 /* : String */;
+val* var_abs_try_file /* var abs_try_file: String */;
+short int var31 /* : Bool */;
+short int var32 /* : Bool */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
+short int var36 /* : Bool */;
+val* var37 /* : ToolContext */;
+val* var39 /* : ToolContext */;
+static val* varonce40;
+val* var41 /* : String */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : FlatString */;
 static val* varonce45;
 val* var46 /* : String */;
 char* var47 /* : NativeString */;
 long var48 /* : Int */;
-val* var49 /* : String */;
+val* var49 /* : FlatString */;
 static val* varonce50;
 val* var51 /* : String */;
 char* var52 /* : NativeString */;
 long var53 /* : Int */;
-val* var54 /* : String */;
+val* var54 /* : FlatString */;
 val* var55 /* : Array[Object] */;
 long var56 /* : Int */;
 val* var57 /* : NativeArray[Object] */;
 val* var58 /* : String */;
-long var59 /* : Int */;
-val* var60 /* : ModulePath */;
-val* var_res /* var res: ModulePath */;
-val* var61 /* : HashMap[String, nullable ModulePath] */;
-var_path = p0;
-var1 = ((short int (*)(val*))(var_path->class->vft[COLOR_file__String__file_exists]))(var_path) /* file_exists on <var_path:String>*/;
-var2 = !var1;
-if (var2){
-var3 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var4 = NULL;
+static val* varonce59;
+val* var60 /* : String */;
+char* var61 /* : NativeString */;
+long var62 /* : Int */;
+val* var63 /* : FlatString */;
+val* var64 /* : String */;
+val* var65 /* : String */;
+static val* varonce66;
+val* var67 /* : String */;
+char* var68 /* : NativeString */;
+long var69 /* : Int */;
+val* var70 /* : FlatString */;
+val* var71 /* : String */;
+val* var72 /* : String */;
+static val* varonce73;
+val* var74 /* : String */;
+char* var75 /* : NativeString */;
+long var76 /* : Int */;
+val* var77 /* : FlatString */;
+val* var78 /* : String */;
+val* var79 /* : String */;
+short int var80 /* : Bool */;
+val* var81 /* : null */;
+short int var82 /* : Bool */;
+short int var83 /* : Bool */;
+short int var84 /* : Bool */;
+short int var85 /* : Bool */;
+short int var87 /* : Bool */;
+short int var88 /* : Bool */;
+short int var89 /* : Bool */;
+val* var90 /* : String */;
+val* var_abs_candidate91 /* var abs_candidate: String */;
+val* var92 /* : String */;
+val* var_abs_try_file93 /* var abs_try_file: String */;
+short int var94 /* : Bool */;
+short int var95 /* : Bool */;
+short int var97 /* : Bool */;
+short int var98 /* : Bool */;
+short int var99 /* : Bool */;
+val* var100 /* : ToolContext */;
+val* var102 /* : ToolContext */;
+static val* varonce103;
+val* var104 /* : String */;
+char* var105 /* : NativeString */;
+long var106 /* : Int */;
+val* var107 /* : FlatString */;
+static val* varonce108;
+val* var109 /* : String */;
+char* var110 /* : NativeString */;
+long var111 /* : Int */;
+val* var112 /* : FlatString */;
+static val* varonce113;
+val* var114 /* : String */;
+char* var115 /* : NativeString */;
+long var116 /* : Int */;
+val* var117 /* : FlatString */;
+val* var118 /* : Array[Object] */;
+long var119 /* : Int */;
+val* var120 /* : NativeArray[Object] */;
+val* var121 /* : String */;
+val* var123 /* : null */;
+short int var124 /* : Bool */;
+short int var125 /* : Bool */;
+val* var126 /* : null */;
+val* var127 /* : nullable ModulePath */;
+var_location = p0;
+var_name = p1;
+var_lookpaths = p2;
+var1 = NULL;
+var_candidate = var1;
+var_ = var_lookpaths;
+{
+var2 = ((val* (*)(val*))(var_->class->vft[COLOR_abstract_collection__Collection__iterator]))(var_) /* iterator on <var_:Collection[String]>*/;
+}
+var_3 = var2;
+for(;;) {
+{
+var4 = ((short int (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_3) /* is_ok on <var_3:Iterator[String]>*/;
+}
+if (var4){
+{
+var5 = ((val* (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__item]))(var_3) /* item on <var_3:Iterator[String]>*/;
+}
+var_dirname = var5;
 if (varonce) {
-var5 = varonce;
+var6 = varonce;
 } else {
-var6 = "Error: `";
-var7 = 8;
-var8 = string__NativeString__to_s_with_length(var6, var7);
-var5 = var8;
-varonce = var5;
+var7 = "/";
+var8 = 1;
+var9 = string__NativeString__to_s_with_length(var7, var8);
+var6 = var9;
+varonce = var6;
 }
-if (varonce9) {
-var10 = varonce9;
-} else {
-var11 = "` does not exists";
-var12 = 17;
-var13 = string__NativeString__to_s_with_length(var11, var12);
-var10 = var13;
-varonce9 = var10;
-}
-var14 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var14 = array_instance Array[Object] */
-var15 = 3;
-var16 = NEW_array__NativeArray(var15, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var16)->values[0] = (val*) var5;
-((struct instance_array__NativeArray*)var16)->values[1] = (val*) var_path;
-((struct instance_array__NativeArray*)var16)->values[2] = (val*) var10;
-((void (*)(val*, val*, long))(var14->class->vft[COLOR_array__Array__with_native]))(var14, var16, var15) /* with_native on <var14:Array[Object]>*/;
-}
-var17 = ((val* (*)(val*))(var14->class->vft[COLOR_string__Object__to_s]))(var14) /* to_s on <var14:Array[Object]>*/;
-((void (*)(val*, val*, val*))(var3->class->vft[COLOR_toolcontext__ToolContext__error]))(var3, var4, var17) /* error on <var3:ToolContext>*/;
-var18 = NULL;
-var = var18;
-goto RET_LABEL;
-} else {
+{
+var10 = string__FlatString___43d(var_dirname, var6);
 }
-if (varonce19) {
-var20 = varonce19;
+{
+var11 = string__FlatString___43d(var10, var_name);
+}
+if (varonce12) {
+var13 = varonce12;
 } else {
-var21 = ".nit";
-var22 = 4;
-var23 = string__NativeString__to_s_with_length(var21, var22);
-var20 = var23;
-varonce19 = var20;
+var14 = ".nit";
+var15 = 4;
+var16 = string__NativeString__to_s_with_length(var14, var15);
+var13 = var16;
+varonce12 = var13;
 }
-var24 = ((val* (*)(val*, val*))(var_path->class->vft[COLOR_file__String__basename]))(var_path, var20) /* basename on <var_path:String>*/;
-var_pn = var24;
-var25 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_path) /* module_absolute_path on <self:ModelBuilder>*/;
-var_rp = var25;
-var26 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__identified_files]))(self) /* identified_files on <self:ModelBuilder>*/;
-var27 = ((short int (*)(val*, val*))(var26->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var26, var_rp) /* has_key on <var26:HashMap[String, nullable ModulePath]>*/;
-if (var27){
-var28 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__identified_files]))(self) /* identified_files on <self:ModelBuilder>*/;
-var29 = ((val* (*)(val*, val*))(var28->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var28, var_rp) /* [] on <var28:HashMap[String, nullable ModulePath]>*/;
-var = var29;
-goto RET_LABEL;
+{
+var17 = string__FlatString___43d(var11, var13);
+}
+{
+var18 = file__String__simplify_path(var17);
+}
+var_try_file = var18;
+{
+var19 = file__String__file_exists(var_try_file);
+}
+if (var19){
+var20 = NULL;
+if (var_candidate == NULL) {
+var21 = 1; /* is null */
 } else {
+var21 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var22 = string__FlatString___61d_61d(var_candidate, var20);
+var21 = var22;
 }
-if (varonce30) {
-var31 = varonce30;
+if (var21){
+var_candidate = var_try_file;
 } else {
-var32 = "..";
-var33 = 2;
-var34 = string__NativeString__to_s_with_length(var32, var33);
-var31 = var34;
-varonce30 = var31;
+{
+{ /* Inline kernel#Object#!= (var_candidate,var_try_file) on <var_candidate:nullable String(String)> */
+var_other = var_try_file;
+{
+var27 = ((short int (*)(val*, val*))(var_candidate->class->vft[COLOR_kernel__Object___61d_61d]))(var_candidate, var_other) /* == on <var_candidate:nullable String(String)>*/;
+var26 = var27;
 }
-var35 = ((val* (*)(val*, val*))(var_path->class->vft[COLOR_file__String__join_path]))(var_path, var31) /* join_path on <var_path:String>*/;
-var36 = ((val* (*)(val*))(var35->class->vft[COLOR_file__String__simplify_path]))(var35) /* simplify_path on <var35:String>*/;
-var_mgrouppath = var36;
-var37 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mgroup]))(self, var_mgrouppath) /* get_mgroup on <self:ModelBuilder>*/;
-var_mgroup = var37;
-var38 = NULL;
-if (var_mgroup == NULL) {
-var39 = 1; /* is null */
+var28 = !var26;
+var24 = var28;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
+}
+var23 = var24;
+}
+if (var23){
+{
+var29 = modelbuilder__ModelBuilder__module_absolute_path(self, var_candidate);
+}
+var_abs_candidate = var29;
+{
+var30 = modelbuilder__ModelBuilder__module_absolute_path(self, var_try_file);
+}
+var_abs_try_file = var30;
+{
+{ /* Inline kernel#Object#!= (var_abs_candidate,var_abs_try_file) on <var_abs_candidate:String> */
+var_other = var_abs_try_file;
+{
+var35 = ((short int (*)(val*, val*))(var_abs_candidate->class->vft[COLOR_kernel__Object___61d_61d]))(var_abs_candidate, var_other) /* == on <var_abs_candidate:String>*/;
+var34 = var35;
+}
+var36 = !var34;
+var32 = var36;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
+}
+var31 = var32;
+}
+if (var31){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var39 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var39 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var37 = var39;
+RET_LABEL38:(void)0;
+}
+}
+if (varonce40) {
+var41 = varonce40;
 } else {
-var39 = 0; /* arg is null but recv is not */
+var42 = "Error: conflicting module file for ";
+var43 = 35;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
 }
-if (var39){
-var40 = NEW_mproject__MProject(&type_mproject__MProject);
-var41 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var40->class->vft[COLOR_mproject__MProject__init]))(var40, var_pn, var41) /* init on <var40:MProject>*/;
-var_mproject = var40;
-var42 = NEW_mproject__MGroup(&type_mproject__MGroup);
-var43 = NULL;
-((void (*)(val*, val*, val*, val*))(var42->class->vft[COLOR_mproject__MGroup__init]))(var42, var_pn, var_mproject, var43) /* init on <var42:MGroup>*/;
-var_mgroup = var42;
-((void (*)(val*, val*))(var_mgroup->class->vft[COLOR_mproject__MGroup__filepath_61d]))(var_mgroup, var_path) /* filepath= on <var_mgroup:nullable MGroup(MGroup)>*/;
-((void (*)(val*, val*))(var_mproject->class->vft[COLOR_mproject__MProject__root_61d]))(var_mproject, var_mgroup) /* root= on <var_mproject:MProject>*/;
-var44 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
 if (varonce45) {
 var46 = varonce45;
 } else {
-var47 = "found project `";
-var48 = 15;
+var47 = ": ";
+var48 = 2;
 var49 = string__NativeString__to_s_with_length(var47, var48);
 var46 = var49;
 varonce45 = var46;
@@ -2409,869 +4066,2551 @@ varonce45 = var46;
 if (varonce50) {
 var51 = varonce50;
 } else {
-var52 = "` at ";
-var53 = 5;
+var52 = " ";
+var53 = 1;
 var54 = string__NativeString__to_s_with_length(var52, var53);
 var51 = var54;
 varonce50 = var51;
 }
 var55 = NEW_array__Array(&type_array__Arraykernel__Object);
 { /* var55 = array_instance Array[Object] */
-var56 = 4;
+var56 = 6;
 var57 = NEW_array__NativeArray(var56, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var57)->values[0] = (val*) var46;
-((struct instance_array__NativeArray*)var57)->values[1] = (val*) var_pn;
-((struct instance_array__NativeArray*)var57)->values[2] = (val*) var51;
-((struct instance_array__NativeArray*)var57)->values[3] = (val*) var_path;
+((struct instance_array__NativeArray*)var57)->values[0] = (val*) var41;
+((struct instance_array__NativeArray*)var57)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var57)->values[2] = (val*) var46;
+((struct instance_array__NativeArray*)var57)->values[3] = (val*) var_candidate;
+((struct instance_array__NativeArray*)var57)->values[4] = (val*) var51;
+((struct instance_array__NativeArray*)var57)->values[5] = (val*) var_try_file;
+{
 ((void (*)(val*, val*, long))(var55->class->vft[COLOR_array__Array__with_native]))(var55, var57, var56) /* with_native on <var55:Array[Object]>*/;
 }
+}
+{
 var58 = ((val* (*)(val*))(var55->class->vft[COLOR_string__Object__to_s]))(var55) /* to_s on <var55:Array[Object]>*/;
-var59 = 2;
-((void (*)(val*, val*, long))(var44->class->vft[COLOR_toolcontext__ToolContext__info]))(var44, var58, var59) /* info on <var44:ToolContext>*/;
+}
+{
+toolcontext__ToolContext__error(var37, var_location, var58); /* Direct call toolcontext#ToolContext#error on <var37:ToolContext>*/
+}
 } else {
 }
-var60 = NEW_modelbuilder__ModulePath(&type_modelbuilder__ModulePath);
-((void (*)(val*, val*, val*, val*))(var60->class->vft[COLOR_modelbuilder__ModulePath__init]))(var60, var_pn, var_path, var_mgroup) /* init on <var60:ModulePath>*/;
-var_res = var60;
-var61 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__identified_files]))(self) /* identified_files on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var61->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var61, var_rp, var_res) /* []= on <var61:HashMap[String, nullable ModulePath]>*/;
-var = var_res;
+} else {
+}
+}
+} else {
+}
+if (varonce59) {
+var60 = varonce59;
+} else {
+var61 = "/";
+var62 = 1;
+var63 = string__NativeString__to_s_with_length(var61, var62);
+var60 = var63;
+varonce59 = var60;
+}
+{
+var64 = string__FlatString___43d(var_dirname, var60);
+}
+{
+var65 = string__FlatString___43d(var64, var_name);
+}
+if (varonce66) {
+var67 = varonce66;
+} else {
+var68 = "/";
+var69 = 1;
+var70 = string__NativeString__to_s_with_length(var68, var69);
+var67 = var70;
+varonce66 = var67;
+}
+{
+var71 = string__FlatString___43d(var65, var67);
+}
+{
+var72 = string__FlatString___43d(var71, var_name);
+}
+if (varonce73) {
+var74 = varonce73;
+} else {
+var75 = ".nit";
+var76 = 4;
+var77 = string__NativeString__to_s_with_length(var75, var76);
+var74 = var77;
+varonce73 = var74;
+}
+{
+var78 = string__FlatString___43d(var72, var74);
+}
+{
+var79 = file__String__simplify_path(var78);
+}
+var_try_file = var79;
+{
+var80 = file__String__file_exists(var_try_file);
+}
+if (var80){
+var81 = NULL;
+if (var_candidate == NULL) {
+var82 = 1; /* is null */
+} else {
+var82 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var83 = string__FlatString___61d_61d(var_candidate, var81);
+var82 = var83;
+}
+if (var82){
+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;
+{
+var88 = ((short int (*)(val*, val*))(var_candidate->class->vft[COLOR_kernel__Object___61d_61d]))(var_candidate, var_other) /* == on <var_candidate:nullable String(String)>*/;
+var87 = var88;
+}
+var89 = !var87;
+var85 = var89;
+goto RET_LABEL86;
+RET_LABEL86:(void)0;
+}
+var84 = var85;
+}
+if (var84){
+{
+var90 = modelbuilder__ModelBuilder__module_absolute_path(self, var_candidate);
+}
+var_abs_candidate91 = var90;
+{
+var92 = modelbuilder__ModelBuilder__module_absolute_path(self, var_try_file);
+}
+var_abs_try_file93 = var92;
+{
+{ /* Inline kernel#Object#!= (var_abs_candidate91,var_abs_try_file93) on <var_abs_candidate91:String> */
+var_other = var_abs_try_file93;
+{
+var98 = ((short int (*)(val*, val*))(var_abs_candidate91->class->vft[COLOR_kernel__Object___61d_61d]))(var_abs_candidate91, var_other) /* == on <var_abs_candidate91:String>*/;
+var97 = var98;
+}
+var99 = !var97;
+var95 = var99;
+goto RET_LABEL96;
+RET_LABEL96:(void)0;
+}
+var94 = var95;
+}
+if (var94){
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var102 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var102 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var100 = var102;
+RET_LABEL101:(void)0;
+}
+}
+if (varonce103) {
+var104 = varonce103;
+} else {
+var105 = "Error: conflicting module file for ";
+var106 = 35;
+var107 = string__NativeString__to_s_with_length(var105, var106);
+var104 = var107;
+varonce103 = var104;
+}
+if (varonce108) {
+var109 = varonce108;
+} else {
+var110 = ": ";
+var111 = 2;
+var112 = string__NativeString__to_s_with_length(var110, var111);
+var109 = var112;
+varonce108 = var109;
+}
+if (varonce113) {
+var114 = varonce113;
+} else {
+var115 = " ";
+var116 = 1;
+var117 = string__NativeString__to_s_with_length(var115, var116);
+var114 = var117;
+varonce113 = var114;
+}
+var118 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var118 = array_instance Array[Object] */
+var119 = 6;
+var120 = NEW_array__NativeArray(var119, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var120)->values[0] = (val*) var104;
+((struct instance_array__NativeArray*)var120)->values[1] = (val*) var_name;
+((struct instance_array__NativeArray*)var120)->values[2] = (val*) var109;
+((struct instance_array__NativeArray*)var120)->values[3] = (val*) var_candidate;
+((struct instance_array__NativeArray*)var120)->values[4] = (val*) var114;
+((struct instance_array__NativeArray*)var120)->values[5] = (val*) var_try_file;
+{
+((void (*)(val*, val*, long))(var118->class->vft[COLOR_array__Array__with_native]))(var118, var120, var119) /* with_native on <var118:Array[Object]>*/;
+}
+}
+{
+var121 = ((val* (*)(val*))(var118->class->vft[COLOR_string__Object__to_s]))(var118) /* to_s on <var118:Array[Object]>*/;
+}
+{
+toolcontext__ToolContext__error(var100, var_location, var121); /* Direct call toolcontext#ToolContext#error on <var100:ToolContext>*/
+}
+} else {
+}
+} else {
+}
+}
+} else {
+}
+{
+((void (*)(val*))(var_3->class->vft[COLOR_abstract_collection__Iterator__next]))(var_3) /* next on <var_3:Iterator[String]>*/;
+}
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_3) on <var_3:Iterator[String]> */
+RET_LABEL122:(void)0;
+}
+}
+var123 = NULL;
+if (var_candidate == NULL) {
+var124 = 1; /* is null */
+} else {
+var124 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var125 = string__FlatString___61d_61d(var_candidate, var123);
+var124 = var125;
+}
+if (var124){
+var126 = NULL;
+var = var126;
+goto RET_LABEL;
+} else {
+}
+{
+var127 = modelbuilder__ModelBuilder__identify_file(self, var_candidate);
+}
+var = var127;
 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) {
+/* 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__identify_file(self, p0);
+var1 = modelbuilder__ModelBuilder__search_module_in_paths(self, p0, p1, p2);
 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___64dmgroups].val; /* @mgroups on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mgroups");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 383);
+/* 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", "modelbuilder.nit", 416);
 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] */;
-var1 = modelbuilder__ModelBuilder__mgroups(self);
-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", "modelbuilder.nit", 416);
+show_backtrace(1);
 }
-/* method modelbuilder#ModelBuilder#mgroups= for (self: ModelBuilder, HashMap[String, nullable MGroup]) */
-void modelbuilder__ModelBuilder__mgroups_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dmgroups].val = p0; /* @mgroups on <self:ModelBuilder> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ModelBuilder#mgroups= for (self: Object, HashMap[String, nullable MGroup]) */
-void VIRTUAL_modelbuilder__ModelBuilder__mgroups_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__mgroups_61d(self, p0);
+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] */;
-short int var3 /* : Bool */;
-val* var4 /* : HashMap[String, nullable MGroup] */;
-val* var5 /* : nullable Object */;
+/* 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* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : String */;
-val* var10 /* : String */;
-val* var_pn /* var pn: String */;
-static val* varonce11;
-val* var12 /* : String */;
-char* var13 /* : NativeString */;
-long var14 /* : Int */;
-val* var15 /* : String */;
-val* var16 /* : String */;
-val* var17 /* : String */;
-val* var18 /* : String */;
-val* var_mp /* var mp: String */;
+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 var20 /* : Bool */;
-val* var21 /* : null */;
-static val* varonce22;
-val* var23 /* : String */;
-char* var24 /* : NativeString */;
-long var25 /* : Int */;
-val* var26 /* : String */;
-val* var27 /* : String */;
-val* var28 /* : String */;
-val* var_parentpath /* var parentpath: String */;
-val* var29 /* : nullable MGroup */;
-val* var_parent /* var parent: nullable MGroup */;
-val* var30 /* : null */;
+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 */;
-val* var32 /* : MProject */;
-val* var33 /* : Model */;
-val* var_mproject /* var mproject: MProject */;
-val* var34 /* : MGroup */;
-val* var35 /* : null */;
-val* var_mgroup /* var mgroup: nullable Object */;
-val* var36 /* : ToolContext */;
-static val* varonce37;
-val* var38 /* : String */;
-char* var39 /* : NativeString */;
-long var40 /* : Int */;
+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 */;
-static val* varonce42;
-val* var43 /* : String */;
-char* var44 /* : NativeString */;
-long var45 /* : Int */;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : FlatString */;
+val* var45 /* : String */;
 val* var46 /* : String */;
-val* var47 /* : Array[Object] */;
-long var48 /* : Int */;
-val* var49 /* : NativeArray[Object] */;
-val* var50 /* : String */;
-long var51 /* : Int */;
-val* var52 /* : MGroup */;
-val* var53 /* : MProject */;
-val* var54 /* : ToolContext */;
+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 /* : String */;
-val* var60 /* : String */;
-static val* varonce61;
-val* var62 /* : String */;
-char* var63 /* : NativeString */;
-long var64 /* : Int */;
-val* var65 /* : String */;
-val* var66 /* : Array[Object] */;
-long var67 /* : Int */;
-val* var68 /* : NativeArray[Object] */;
-val* var69 /* : String */;
-long var70 /* : Int */;
-val* var71 /* : HashMap[String, nullable MGroup] */;
-var_dirpath = p0;
-var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__module_absolute_path]))(self, var_dirpath) /* module_absolute_path on <self:ModelBuilder>*/;
-var_rdp = var1;
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mgroups]))(self) /* mgroups on <self:ModelBuilder>*/;
-var3 = ((short int (*)(val*, val*))(var2->class->vft[COLOR_abstract_collection__MapRead__has_key]))(var2, var_rdp) /* has_key on <var2:HashMap[String, nullable MGroup]>*/;
-if (var3){
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mgroups]))(self) /* mgroups on <self:ModelBuilder>*/;
-var5 = ((val* (*)(val*, val*))(var4->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var4, var_rdp) /* [] on <var4:HashMap[String, nullable MGroup]>*/;
-var = var5;
-goto RET_LABEL;
-} else {
+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_res129 /* var res: ModulePath */;
+val* var130 /* : Array[ModulePath] */;
+val* var132 /* : Array[ModulePath] */;
+val* var133 /* : HashMap[String, nullable ModulePath] */;
+val* var135 /* : HashMap[String, nullable ModulePath] */;
+var_path = p0;
+{
+var1 = file__String__file_extension(var_path);
 }
 if (varonce) {
-var6 = varonce;
+var2 = varonce;
 } else {
-var7 = ".nit";
-var8 = 4;
-var9 = string__NativeString__to_s_with_length(var7, var8);
-var6 = var9;
-varonce = var6;
+var3 = "nit";
+var4 = 3;
+var5 = string__NativeString__to_s_with_length(var3, var4);
+var2 = var5;
+varonce = var2;
 }
-var10 = ((val* (*)(val*, val*))(var_rdp->class->vft[COLOR_file__String__basename]))(var_rdp, var6) /* basename on <var_rdp:String>*/;
-var_pn = var10;
-if (varonce11) {
-var12 = varonce11;
-} else {
-var13 = ".nit";
-var14 = 4;
-var15 = string__NativeString__to_s_with_length(var13, var14);
-var12 = var15;
-varonce11 = var12;
-}
-var16 = ((val* (*)(val*, val*))(var_pn->class->vft[COLOR_string__String___43d]))(var_pn, var12) /* + on <var_pn:String>*/;
-var17 = ((val* (*)(val*, val*))(var_dirpath->class->vft[COLOR_file__String__join_path]))(var_dirpath, var16) /* join_path on <var_dirpath:String>*/;
-var18 = ((val* (*)(val*))(var17->class->vft[COLOR_file__String__simplify_path]))(var17) /* simplify_path on <var17:String>*/;
-var_mp = var18;
-var19 = ((short int (*)(val*))(var_mp->class->vft[COLOR_file__String__file_exists]))(var_mp) /* file_exists on <var_mp:String>*/;
-var20 = !var19;
-if (var20){
-var21 = NULL;
-var = var21;
+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", "modelbuilder.nit", 300);
+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 {
 }
-if (varonce22) {
-var23 = varonce22;
+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 {
-var24 = "..";
-var25 = 2;
-var26 = string__NativeString__to_s_with_length(var24, var25);
-var23 = var26;
-varonce22 = var23;
+var28 = 1; /* arg is null and recv is not */
 }
-var27 = ((val* (*)(val*, val*))(var_dirpath->class->vft[COLOR_file__String__join_path]))(var_dirpath, var23) /* join_path on <var_dirpath:String>*/;
-var28 = ((val* (*)(val*))(var27->class->vft[COLOR_file__String__simplify_path]))(var27) /* simplify_path on <var27:String>*/;
-var_parentpath = var28;
-var29 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mgroup]))(self, var_parentpath) /* get_mgroup on <self:ModelBuilder>*/;
-var_parent = var29;
-var30 = NULL;
-if (var_parent == NULL) {
-var31 = 1; /* is null */
+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", "model/mproject.nit", 56);
+show_backtrace(1);
+}
+var37 = var39;
+RET_LABEL38:(void)0;
+}
+}
+if (varonce40) {
+var41 = varonce40;
 } else {
-var31 = 0; /* arg is null but recv is not */
+var42 = ".nit";
+var43 = 4;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
 }
-if (var31){
-var32 = NEW_mproject__MProject(&type_mproject__MProject);
-var33 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var32->class->vft[COLOR_mproject__MProject__init]))(var32, var_pn, var33) /* init on <var32:MProject>*/;
-var_mproject = var32;
-var34 = NEW_mproject__MGroup(&type_mproject__MGroup);
-var35 = NULL;
-((void (*)(val*, val*, val*, val*))(var34->class->vft[COLOR_mproject__MGroup__init]))(var34, var_pn, var_mproject, var35) /* init on <var34:MGroup>*/;
-var_mgroup = var34;
-((void (*)(val*, val*))(var_mproject->class->vft[COLOR_mproject__MProject__root_61d]))(var_mproject, var_mgroup) /* root= on <var_mproject:MProject>*/;
-var36 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-if (varonce37) {
-var38 = varonce37;
+{
+var45 = string__FlatString___43d(var37, var41);
+}
+if (var34 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 434);
+show_backtrace(1);
 } else {
-var39 = "found project `";
-var40 = 15;
-var41 = string__NativeString__to_s_with_length(var39, var40);
-var38 = var41;
-varonce37 = var38;
+var46 = file__String__join_path(var34, var45);
 }
-if (varonce42) {
-var43 = varonce42;
+var_owner_path = var46;
+{
+var47 = file__String__file_exists(var_owner_path);
+}
+if (var47){
+var_candidate = var_owner_path;
 } else {
-var44 = "` at ";
-var45 = 5;
-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 = 4;
-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_mproject;
-((struct instance_array__NativeArray*)var49)->values[2] = (val*) var43;
-((struct instance_array__NativeArray*)var49)->values[3] = (val*) var_dirpath;
-((void (*)(val*, val*, long))(var47->class->vft[COLOR_array__Array__with_native]))(var47, var49, var48) /* with_native on <var47:Array[Object]>*/;
+} else {
 }
-var50 = ((val* (*)(val*))(var47->class->vft[COLOR_string__Object__to_s]))(var47) /* to_s on <var47:Array[Object]>*/;
-var51 = 2;
-((void (*)(val*, val*, long))(var36->class->vft[COLOR_toolcontext__ToolContext__info]))(var36, var50, var51) /* info on <var36:ToolContext>*/;
-} else {
-var52 = NEW_mproject__MGroup(&type_mproject__MGroup);
-var53 = ((val* (*)(val*))(var_parent->class->vft[COLOR_mproject__MGroup__mproject]))(var_parent) /* mproject on <var_parent:nullable MGroup(MGroup)>*/;
-((void (*)(val*, val*, val*, val*))(var52->class->vft[COLOR_mproject__MGroup__init]))(var52, var_pn, var53, var_parent) /* init on <var52:MGroup>*/;
-var_mgroup = var52;
-var54 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
+} 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", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var51 = var53;
+RET_LABEL52:(void)0;
+}
+}
+var54 = NULL;
 if (varonce55) {
 var56 = varonce55;
 } else {
-var57 = "found sub group `";
-var58 = 17;
+var57 = "Error: cannot find module `";
+var58 = 27;
 var59 = string__NativeString__to_s_with_length(var57, var58);
 var56 = var59;
 varonce55 = var56;
 }
-var60 = ((val* (*)(val*))(var_mgroup->class->vft[COLOR_mproject__MGroup__full_name]))(var_mgroup) /* full_name on <var_mgroup:nullable Object(MGroup)>*/;
-if (varonce61) {
-var62 = varonce61;
-} else {
-var63 = "` at ";
-var64 = 5;
-var65 = string__NativeString__to_s_with_length(var63, var64);
-var62 = var65;
-varonce61 = var62;
-}
-var66 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var66 = array_instance Array[Object] */
-var67 = 4;
-var68 = NEW_array__NativeArray(var67, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var68)->values[0] = (val*) var56;
-((struct instance_array__NativeArray*)var68)->values[1] = (val*) var60;
-((struct instance_array__NativeArray*)var68)->values[2] = (val*) var62;
-((struct instance_array__NativeArray*)var68)->values[3] = (val*) var_dirpath;
-((void (*)(val*, val*, long))(var66->class->vft[COLOR_array__Array__with_native]))(var66, var68, var67) /* with_native on <var66:Array[Object]>*/;
-}
-var69 = ((val* (*)(val*))(var66->class->vft[COLOR_string__Object__to_s]))(var66) /* to_s on <var66:Array[Object]>*/;
-var70 = 2;
-((void (*)(val*, val*, long))(var54->class->vft[COLOR_toolcontext__ToolContext__info]))(var54, var69, var70) /* info on <var54:ToolContext>*/;
-}
-((void (*)(val*, val*))(var_mgroup->class->vft[COLOR_mproject__MGroup__filepath_61d]))(var_mgroup, var_dirpath) /* filepath= on <var_mgroup:nullable Object(MGroup)>*/;
-var71 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mgroups]))(self) /* mgroups on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var71->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var71, var_rdp, var_mgroup) /* []= on <var71:HashMap[String, nullable MGroup]>*/;
-var = var_mgroup;
+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;
-RET_LABEL:;
-return var;
+} else {
 }
-/* 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;
+var_path = var_candidate;
+} else {
 }
-/* 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 = ((val* (*)(val*))(self->class->vft[COLOR_file__Object__getcwd]))(self) /* getcwd on <self:ModelBuilder>*/;
-var2 = ((val* (*)(val*, val*))(var1->class->vft[COLOR_file__String__join_path]))(var1, var_path) /* join_path on <var1:String>*/;
-var3 = ((val* (*)(val*))(var2->class->vft[COLOR_file__String__simplify_path]))(var2) /* simplify_path on <var2:String>*/;
-var = var3;
+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", "modelbuilder.nit", 416);
+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", "modelbuilder.nit", 416);
+show_backtrace(1);
+}
+var81 = var83;
+RET_LABEL82:(void)0;
+}
+}
+{
+var84 = hash_collection__HashMap___91d_93d(var81, var_rp);
+}
+var = var84;
 goto RET_LABEL;
-RET_LABEL:;
-return var;
+} else {
 }
-/* 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;
+if (varonce85) {
+var86 = varonce85;
+} else {
+var87 = "..";
+var88 = 2;
+var89 = string__NativeString__to_s_with_length(var87, var88);
+var86 = var89;
+varonce85 = var86;
 }
-/* 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 /* : String */;
-short int var6 /* : Bool */;
-val* var7 /* : ToolContext */;
-val* var8 /* : null */;
-static val* varonce9;
+{
+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", "modelbuilder.nit", 103);
+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", "modelbuilder.nit", 106);
+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);
+{
+((void (*)(val*, val*))(var128->class->vft[COLOR_modelbuilder__ModulePath__name_61d]))(var128, var_pn) /* name= on <var128:ModulePath>*/;
+}
+{
+((void (*)(val*, val*))(var128->class->vft[COLOR_modelbuilder__ModulePath__filepath_61d]))(var128, var_path) /* filepath= on <var128:ModulePath>*/;
+}
+{
+((void (*)(val*, val*))(var128->class->vft[COLOR_modelbuilder__ModulePath__mgroup_61d]))(var128, var_mgroup93) /* mgroup= on <var128:ModulePath>*/;
+}
+{
+((void (*)(val*))(var128->class->vft[COLOR_kernel__Object__init]))(var128) /* init on <var128:ModulePath>*/;
+}
+var_res129 = var128;
+{
+{ /* Inline modelbuilder#MGroup#module_paths (var_mgroup93) on <var_mgroup93:nullable MGroup(MGroup)> */
+var132 = var_mgroup93->attrs[COLOR_modelbuilder__MGroup___module_paths].val; /* _module_paths on <var_mgroup93:nullable MGroup(MGroup)> */
+if (unlikely(var132 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _module_paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 786);
+show_backtrace(1);
+}
+var130 = var132;
+RET_LABEL131:(void)0;
+}
+}
+{
+array__Array__add(var130, var_res129); /* Direct call array#Array#add on <var130:Array[ModulePath]>*/
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#identified_files (self) on <self:ModelBuilder> */
+var135 = self->attrs[COLOR_modelbuilder__ModelBuilder___identified_files].val; /* _identified_files on <self:ModelBuilder> */
+if (unlikely(var135 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _identified_files");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 416);
+show_backtrace(1);
+}
+var133 = var135;
+RET_LABEL134:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var133, var_rp, var_res129); /* Direct call hash_collection#HashMap#[]= on <var133:HashMap[String, nullable ModulePath]>*/
+}
+var = var_res129;
+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", "modelbuilder.nit", 471);
+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", "modelbuilder.nit", 471);
+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 /* : String */;
-static val* varonce14;
-val* var15 /* : String */;
-char* var16 /* : NativeString */;
-long var17 /* : Int */;
-val* var18 /* : String */;
-val* var19 /* : Array[Object] */;
-long var20 /* : Int */;
-val* var21 /* : NativeArray[Object] */;
+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* var23 /* : null */;
+val* var_mp /* var mp: String */;
+val* var_dirpath2 /* var dirpath2: String */;
+short int var23 /* : Bool */;
 short int var24 /* : Bool */;
-short int var25 /* : Bool */;
-val* var26 /* : ToolContext */;
-val* var27 /* : null */;
-static val* varonce28;
-val* var29 /* : String */;
-char* var30 /* : NativeString */;
-long var31 /* : Int */;
+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 /* : String */;
-val* var38 /* : Array[Object] */;
-long var39 /* : Int */;
-val* var40 /* : NativeArray[Object] */;
+val* var37 /* : FlatString */;
+val* var38 /* : String */;
+val* var39 /* : null */;
+static val* varonce40;
 val* var41 /* : String */;
-val* var42 /* : null */;
-val* var43 /* : ToolContext */;
-static val* varonce44;
+char* var42 /* : NativeString */;
+long var43 /* : Int */;
+val* var44 /* : FlatString */;
 val* var45 /* : String */;
-char* var46 /* : NativeString */;
-long var47 /* : Int */;
-val* var48 /* : String */;
-val* var49 /* : Array[Object] */;
-long var50 /* : Int */;
-val* var51 /* : NativeArray[Object] */;
-val* var52 /* : String */;
-long var53 /* : Int */;
-val* var54 /* : IFStream */;
-val* var_file /* var file: IFStream */;
-val* var55 /* : Lexer */;
-val* var56 /* : SourceFile */;
-val* var_lexer /* var lexer: Lexer */;
-val* var57 /* : Parser */;
-val* var_parser /* var parser: Parser */;
-val* var58 /* : Start */;
-val* var_tree /* var tree: Start */;
-static val* varonce59;
-val* var60 /* : String */;
-char* var61 /* : NativeString */;
-long var62 /* : Int */;
-val* var63 /* : String */;
-val* var64 /* : String */;
-val* var_mod_name /* var mod_name: String */;
-val* var65 /* : nullable AModule */;
-val* var_nmodule /* var nmodule: nullable AModule */;
-val* var66 /* : null */;
-short int var67 /* : Bool */;
-val* var68 /* : EOF */;
-val* var_neof /* var neof: EOF */;
-short int var69 /* : Bool */;
-int cltype;
-int idtype;
-val* var70 /* : String */;
-val* var71 /* : null */;
-var_filename = p0;
-var1 = ((val* (*)(val*))(var_filename->class->vft[COLOR_file__String__file_extension]))(var_filename) /* file_extension on <var_filename:String>*/;
-if (varonce) {
-var2 = varonce;
-} else {
-var3 = "nit";
-var4 = 3;
-var5 = string__NativeString__to_s_with_length(var3, var4);
-var2 = var5;
-varonce = var2;
+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* var119 /* : IFStream */;
+val* var_s /* var s: IFStream */;
+short int var120 /* : Bool */;
+short int var121 /* : Bool */;
+val* var122 /* : Array[String] */;
+val* var124 /* : Array[String] */;
+val* var125 /* : String */;
+val* var129 /* : HashMap[String, nullable MGroup] */;
+val* var131 /* : HashMap[String, nullable MGroup] */;
+var_dirpath = p0;
+{
+var1 = modelbuilder__ModelBuilder__module_absolute_path(self, var_dirpath);
 }
-if (var1 == NULL) {
-var6 = 1; /* <var2:String> cannot be null */
+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", "modelbuilder.nit", 471);
+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", "modelbuilder.nit", 471);
+show_backtrace(1);
+}
+var6 = var8;
+RET_LABEL7:(void)0;
+}
+}
+{
+var9 = hash_collection__HashMap___91d_93d(var6, var_rdp);
+}
+var = var9;
+goto RET_LABEL;
 } else {
-var6 = ((short int (*)(val*, val*))(var1->class->vft[COLOR_kernel__Object___33d_61d]))(var1, var2) /* != on <var1:nullable String>*/;
 }
-if (var6){
-var7 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var8 = NULL;
-if (varonce9) {
-var10 = varonce9;
+if (varonce) {
+var10 = varonce;
 } else {
-var11 = "Error: file ";
-var12 = 12;
+var11 = ".nit";
+var12 = 4;
 var13 = string__NativeString__to_s_with_length(var11, var12);
 var10 = var13;
-varonce9 = var10;
-}
-if (varonce14) {
-var15 = varonce14;
-} else {
-var16 = " is not a valid nit module.";
-var17 = 27;
-var18 = string__NativeString__to_s_with_length(var16, var17);
-var15 = var18;
-varonce14 = var15;
-}
-var19 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var19 = array_instance Array[Object] */
-var20 = 3;
-var21 = NEW_array__NativeArray(var20, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var21)->values[0] = (val*) var10;
-((struct instance_array__NativeArray*)var21)->values[1] = (val*) var_filename;
-((struct instance_array__NativeArray*)var21)->values[2] = (val*) var15;
-((void (*)(val*, val*, long))(var19->class->vft[COLOR_array__Array__with_native]))(var19, var21, var20) /* with_native on <var19:Array[Object]>*/;
-}
-var22 = ((val* (*)(val*))(var19->class->vft[COLOR_string__Object__to_s]))(var19) /* to_s on <var19:Array[Object]>*/;
-((void (*)(val*, val*, val*))(var7->class->vft[COLOR_toolcontext__ToolContext__error]))(var7, var8, var22) /* error on <var7:ToolContext>*/;
-var23 = NULL;
-var = var23;
-goto RET_LABEL;
+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;
 }
-var24 = ((short int (*)(val*))(var_filename->class->vft[COLOR_file__String__file_exists]))(var_filename) /* file_exists on <var_filename:String>*/;
-var25 = !var24;
-if (var25){
-var26 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var27 = NULL;
-if (varonce28) {
-var29 = varonce28;
+{
+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 {
-var30 = "Error: file ";
-var31 = 12;
-var32 = string__NativeString__to_s_with_length(var30, var31);
-var29 = var32;
-varonce28 = var29;
+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 = " not found.";
-var36 = 11;
+var35 = "";
+var36 = 0;
 var37 = string__NativeString__to_s_with_length(var35, var36);
 var34 = var37;
 varonce33 = var34;
 }
-var38 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var38 = array_instance Array[Object] */
-var39 = 3;
-var40 = NEW_array__NativeArray(var39, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var40)->values[0] = (val*) var29;
-((struct instance_array__NativeArray*)var40)->values[1] = (val*) var_filename;
-((struct instance_array__NativeArray*)var40)->values[2] = (val*) var34;
-((void (*)(val*, val*, long))(var38->class->vft[COLOR_array__Array__with_native]))(var38, var40, var39) /* with_native on <var38:Array[Object]>*/;
-}
-var41 = ((val* (*)(val*))(var38->class->vft[COLOR_string__Object__to_s]))(var38) /* to_s on <var38:Array[Object]>*/;
-((void (*)(val*, val*, val*))(var26->class->vft[COLOR_toolcontext__ToolContext__error]))(var26, var27, var41) /* error on <var26:ToolContext>*/;
-var42 = NULL;
-var = var42;
+{
+var38 = file__String__basename(var_dirpath2, var34);
+}
+var_pn = var38;
+} else {
+var39 = NULL;
+var = var39;
 goto RET_LABEL;
+}
 } else {
 }
-var43 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-if (varonce44) {
-var45 = varonce44;
-} else {
-var46 = "load module ";
-var47 = 12;
-var48 = string__NativeString__to_s_with_length(var46, var47);
-var45 = var48;
-varonce44 = var45;
-}
-var49 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var49 = array_instance Array[Object] */
-var50 = 2;
-var51 = NEW_array__NativeArray(var50, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var51)->values[0] = (val*) var45;
-((struct instance_array__NativeArray*)var51)->values[1] = (val*) var_filename;
-((void (*)(val*, val*, long))(var49->class->vft[COLOR_array__Array__with_native]))(var49, var51, var50) /* with_native on <var49:Array[Object]>*/;
-}
-var52 = ((val* (*)(val*))(var49->class->vft[COLOR_string__Object__to_s]))(var49) /* to_s on <var49:Array[Object]>*/;
-var53 = 2;
-((void (*)(val*, val*, long))(var43->class->vft[COLOR_toolcontext__ToolContext__info]))(var43, var52, var53) /* info on <var43:ToolContext>*/;
-var54 = NEW_file__IFStream(&type_file__IFStream);
-((void (*)(val*, val*))(var54->class->vft[COLOR_file__IFStream__open]))(var54, var_filename) /* open on <var54:IFStream>*/;
-var_file = var54;
-var55 = NEW_lexer__Lexer(&type_lexer__Lexer);
-var56 = NEW_location__SourceFile(&type_location__SourceFile);
-((void (*)(val*, val*, val*))(var56->class->vft[COLOR_location__SourceFile__init]))(var56, var_filename, var_file) /* init on <var56:SourceFile>*/;
-((void (*)(val*, val*))(var55->class->vft[COLOR_lexer__Lexer__init]))(var55, var56) /* init on <var55:Lexer>*/;
-var_lexer = var55;
-var57 = NEW_parser__Parser(&type_parser__Parser);
-((void (*)(val*, val*))(var57->class->vft[COLOR_parser__Parser__init]))(var57, var_lexer) /* init on <var57:Parser>*/;
-var_parser = var57;
-var58 = ((val* (*)(val*))(var_parser->class->vft[COLOR_parser__Parser__parse]))(var_parser) /* parse on <var_parser:Parser>*/;
-var_tree = var58;
-((void (*)(val*))(var_file->class->vft[COLOR_stream__IOS__close]))(var_file) /* close on <var_file:IFStream>*/;
-if (varonce59) {
-var60 = varonce59;
+if (varonce40) {
+var41 = varonce40;
 } else {
-var61 = ".nit";
-var62 = 4;
-var63 = string__NativeString__to_s_with_length(var61, var62);
-var60 = var63;
-varonce59 = var60;
+var42 = "..";
+var43 = 2;
+var44 = string__NativeString__to_s_with_length(var42, var43);
+var41 = var44;
+varonce40 = var41;
 }
-var64 = ((val* (*)(val*, val*))(var_filename->class->vft[COLOR_file__String__basename]))(var_filename, var60) /* basename on <var_filename:String>*/;
-var_mod_name = var64;
-var65 = ((val* (*)(val*))(var_tree->class->vft[COLOR_parser_nodes__Start__n_base]))(var_tree) /* n_base on <var_tree:Start>*/;
-var_nmodule = var65;
-var66 = NULL;
-if (var_nmodule == NULL) {
-var67 = 1; /* is null */
+{
+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 {
-var67 = 0; /* arg is null but recv is not */
+var49 = 0; /* arg is null but recv is not */
 }
-if (var67){
-var68 = ((val* (*)(val*))(var_tree->class->vft[COLOR_parser_nodes__Start__n_eof]))(var_tree) /* n_eof on <var_tree:Start>*/;
-var_neof = var68;
-/* <var_neof:EOF> isa AError */
-cltype = type_parser_nodes__AError.color;
-idtype = type_parser_nodes__AError.id;
-if(cltype >= var_neof->type->table_size) {
-var69 = 0;
+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", "modelbuilder.nit", 103);
+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", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var62 = var64;
+RET_LABEL63:(void)0;
+}
+}
+if (varonce65) {
+var66 = varonce65;
 } else {
-var69 = var_neof->type->type_table[cltype] == idtype;
+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", "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", "modelbuilder.nit", 106);
+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);
+{
+((void (*)(val*))(var118->class->vft[COLOR_kernel__Object__init]))(var118) /* init on <var118:MDoc>*/;
+}
+var_mdoc = var118;
+var119 = NEW_file__IFStream(&type_file__IFStream);
+{
+file__IFStream__open(var119, var_readme); /* Direct call file#IFStream#open on <var119:IFStream>*/
+}
+var_s = var119;
+for(;;) {
+{
+var120 = stream__BufferedIStream__eof(var_s);
+}
+var121 = !var120;
+if (var121){
+{
+{ /* Inline mdoc#MDoc#content (var_mdoc) on <var_mdoc:MDoc> */
+var124 = var_mdoc->attrs[COLOR_mdoc__MDoc___content].val; /* _content on <var_mdoc:MDoc> */
+if (unlikely(var124 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _content");
+PRINT_ERROR(" (%s:%d)\n", "model/mdoc.nit", 22);
+show_backtrace(1);
+}
+var122 = var124;
+RET_LABEL123:(void)0;
+}
+}
+{
+var125 = stream__IStream__read_line(var_s);
+}
+{
+array__Array__add(var122, var125); /* Direct call array#Array#add on <var122:Array[String]>*/
+}
+} else {
+goto BREAK_label;
+}
+}
+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_LABEL126:(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_LABEL127:(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_LABEL128:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#mgroups (self) on <self:ModelBuilder> */
+var131 = self->attrs[COLOR_modelbuilder__ModelBuilder___mgroups].val; /* _mgroups on <self:ModelBuilder> */
+if (unlikely(var131 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroups");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 471);
+show_backtrace(1);
+}
+var129 = var131;
+RET_LABEL130:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var129, var_rdp, var_mgroup); /* Direct call hash_collection#HashMap#[]= on <var129: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 */;
+val* var70 /* : nullable AModule */;
+val* var72 /* : nullable AModule */;
+val* var_nmodule /* var nmodule: nullable AModule */;
+val* var73 /* : null */;
+short int var74 /* : Bool */;
+short int var75 /* : Bool */;
+val* var_other77 /* var other: nullable Object */;
+short int var78 /* : Bool */;
+short int var80 /* : Bool */;
+val* var81 /* : EOF */;
+val* var83 /* : EOF */;
+val* var_neof /* var neof: EOF */;
+short int var84 /* : Bool */;
+int cltype;
+int idtype;
+val* var85 /* : String */;
+val* var87 /* : String */;
+val* var88 /* : 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", "modelbuilder.nit", 106);
+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", "modelbuilder.nit", 106);
+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", "modelbuilder.nit", 106);
+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>*/
+}
+{
+{ /* Inline parser_nodes#Start#n_base (var_tree) on <var_tree:Start> */
+var72 = var_tree->attrs[COLOR_parser_nodes__Start___n_base].val; /* _n_base on <var_tree:Start> */
+var70 = var72;
+RET_LABEL71:(void)0;
+}
+}
+var_nmodule = var70;
+var73 = NULL;
+if (var_nmodule == NULL) {
+var74 = 1; /* is null */
+} else {
+var74 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_nmodule,var73) on <var_nmodule:nullable AModule> */
+var_other77 = var73;
+{
+{ /* Inline kernel#Object#is_same_instance (var_nmodule,var_other77) on <var_nmodule:nullable AModule(AModule)> */
+var80 = var_nmodule == var_other77;
+var78 = var80;
+goto RET_LABEL79;
+RET_LABEL79:(void)0;
+}
+}
+var75 = var78;
+goto RET_LABEL76;
+RET_LABEL76:(void)0;
+}
+var74 = var75;
+}
+if (var74){
+{
+{ /* Inline parser_nodes#Start#n_eof (var_tree) on <var_tree:Start> */
+var83 = var_tree->attrs[COLOR_parser_nodes__Start___n_eof].val; /* _n_eof on <var_tree:Start> */
+if (unlikely(var83 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_eof");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 2073);
+show_backtrace(1);
+}
+var81 = var83;
+RET_LABEL82:(void)0;
+}
+}
+var_neof = var81;
+/* <var_neof:EOF> isa AError */
+cltype = type_parser_nodes__AError.color;
+idtype = type_parser_nodes__AError.id;
+if(cltype >= var_neof->type->table_size) {
+var84 = 0;
+} else {
+var84 = var_neof->type->type_table[cltype] == idtype;
+}
+if (unlikely(!var84)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 562);
+show_backtrace(1);
+}
+{
+{ /* Inline lexer_work#AError#message (var_neof) on <var_neof:EOF(AError)> */
+var87 = var_neof->attrs[COLOR_lexer_work__AError___message].val; /* _message on <var_neof:EOF(AError)> */
+if (unlikely(var87 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _message");
+PRINT_ERROR(" (%s:%d)\n", "parser/lexer_work.nit", 50);
+show_backtrace(1);
+}
+var85 = var87;
+RET_LABEL86:(void)0;
+}
+}
+{
+modelbuilder__ModelBuilder__error(self, var_neof, var85); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
+}
+var88 = NULL;
+var = var88;
+goto RET_LABEL;
+} else {
+}
+var = var_nmodule;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#load_module_ast for (self: Object, String): nullable AModule */
+val* VIRTUAL_modelbuilder__ModelBuilder__load_module_ast(val* self, val* p0) {
+val* var /* : nullable AModule */;
+val* var1 /* : nullable AModule */;
+var1 = modelbuilder__ModelBuilder__load_module_ast(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#load_module for (self: ModelBuilder, String): nullable AModule */
+val* modelbuilder__ModelBuilder__load_module(val* self, val* p0) {
+val* var /* : nullable AModule */;
+val* var_filename /* var filename: String */;
+val* var1 /* : nullable ModulePath */;
+val* var_file /* var file: nullable ModulePath */;
+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* var10 /* : nullable MModule */;
+val* var12 /* : nullable MModule */;
+val* var_mmodule /* var mmodule: nullable MModule */;
+val* var13 /* : null */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+val* var_other17 /* var other: nullable Object */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+val* var21 /* : HashMap[MModule, AModule] */;
+val* var23 /* : HashMap[MModule, AModule] */;
+val* var24 /* : nullable Object */;
+val* var25 /* : String */;
+val* var27 /* : String */;
+val* var28 /* : nullable AModule */;
+val* var_nmodule /* var nmodule: nullable AModule */;
+val* var29 /* : null */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+short int var33 /* : Bool */;
+short int var35 /* : Bool */;
+val* var36 /* : null */;
+val* var37 /* : MGroup */;
+val* var39 /* : MGroup */;
+val* var40 /* : String */;
+val* var42 /* : String */;
+val* var43 /* : nullable MModule */;
+val* var44 /* : null */;
+short int var45 /* : Bool */;
+short int var46 /* : Bool */;
+short int var48 /* : Bool */;
+short int var50 /* : Bool */;
+val* var51 /* : null */;
+var_filename = p0;
+{
+var1 = modelbuilder__ModelBuilder__identify_file(self, var_filename);
+}
+var_file = var1;
+var2 = NULL;
+if (var_file == NULL) {
+var3 = 1; /* is null */
+} else {
+var3 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_file,var2) on <var_file:nullable ModulePath> */
+var_other = var2;
+{
+{ /* Inline kernel#Object#is_same_instance (var_file,var_other) on <var_file:nullable ModulePath(ModulePath)> */
+var8 = var_file == var_other;
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+}
+var4 = var6;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
+}
+var3 = var4;
+}
+if (var3){
+var9 = NULL;
+var = var9;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModulePath#mmodule (var_file) on <var_file:nullable ModulePath(ModulePath)> */
+var12 = var_file->attrs[COLOR_modelbuilder__ModulePath___mmodule].val; /* _mmodule on <var_file:nullable ModulePath(ModulePath)> */
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+var_mmodule = var10;
+var13 = NULL;
+if (var_mmodule == NULL) {
+var14 = 0; /* is null */
+} else {
+var14 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_mmodule,var13) on <var_mmodule:nullable MModule> */
+var_other17 = var13;
+{
+var19 = ((short int (*)(val*, val*))(var_mmodule->class->vft[COLOR_kernel__Object___61d_61d]))(var_mmodule, var_other17) /* == on <var_mmodule:nullable MModule(MModule)>*/;
+var18 = var19;
+}
+var20 = !var18;
+var15 = var20;
+goto RET_LABEL16;
+RET_LABEL16:(void)0;
+}
+var14 = var15;
+}
+if (var14){
+{
+{ /* Inline modelbuilder#ModelBuilder#mmodule2nmodule (self) on <self:ModelBuilder> */
+var23 = self->attrs[COLOR_modelbuilder__ModelBuilder___mmodule2nmodule].val; /* _mmodule2nmodule on <self:ModelBuilder> */
+if (unlikely(var23 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule2nmodule");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 728);
+show_backtrace(1);
+}
+var21 = var23;
+RET_LABEL22:(void)0;
+}
+}
+{
+var24 = hash_collection__HashMap___91d_93d(var21, var_mmodule);
+}
+var = var24;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModulePath#filepath (var_file) on <var_file:nullable ModulePath(ModulePath)> */
+var27 = var_file->attrs[COLOR_modelbuilder__ModulePath___filepath].val; /* _filepath on <var_file:nullable ModulePath(ModulePath)> */
+if (unlikely(var27 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _filepath");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 773);
+show_backtrace(1);
+}
+var25 = var27;
+RET_LABEL26:(void)0;
+}
+}
+{
+var28 = modelbuilder__ModelBuilder__load_module_ast(self, var25);
+}
+var_nmodule = var28;
+var29 = NULL;
+if (var_nmodule == NULL) {
+var30 = 1; /* is null */
+} else {
+var30 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_nmodule,var29) on <var_nmodule:nullable AModule> */
+var_other = var29;
+{
+{ /* Inline kernel#Object#is_same_instance (var_nmodule,var_other) on <var_nmodule:nullable AModule(AModule)> */
+var35 = var_nmodule == var_other;
+var33 = var35;
+goto RET_LABEL34;
+RET_LABEL34:(void)0;
+}
+}
+var31 = var33;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
+}
+var30 = var31;
+}
+if (var30){
+var36 = NULL;
+var = var36;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModulePath#mgroup (var_file) on <var_file:nullable ModulePath(ModulePath)> */
+var39 = var_file->attrs[COLOR_modelbuilder__ModulePath___mgroup].val; /* _mgroup on <var_file:nullable ModulePath(ModulePath)> */
+if (unlikely(var39 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroup");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 776);
+show_backtrace(1);
+}
+var37 = var39;
+RET_LABEL38:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModulePath#name (var_file) on <var_file:nullable ModulePath(ModulePath)> */
+var42 = var_file->attrs[COLOR_modelbuilder__ModulePath___name].val; /* _name on <var_file:nullable ModulePath(ModulePath)> */
+if (unlikely(var42 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 769);
+show_backtrace(1);
+}
+var40 = var42;
+RET_LABEL41:(void)0;
+}
+}
+{
+var43 = modelbuilder__ModelBuilder__build_a_mmodule(self, var37, var40, var_nmodule);
+}
+var_mmodule = var43;
+var44 = NULL;
+if (var_mmodule == NULL) {
+var45 = 1; /* is null */
+} else {
+var45 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mmodule,var44) on <var_mmodule:nullable MModule> */
+var_other = var44;
+{
+{ /* Inline kernel#Object#is_same_instance (var_mmodule,var_other) on <var_mmodule:nullable MModule(MModule)> */
+var50 = var_mmodule == var_other;
+var48 = var50;
+goto RET_LABEL49;
+RET_LABEL49:(void)0;
+}
+}
+var46 = var48;
+goto RET_LABEL47;
+RET_LABEL47:(void)0;
+}
+var45 = var46;
+}
+if (var45){
+var51 = NULL;
+var = var51;
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModulePath#mmodule= (var_file,var_mmodule) on <var_file:nullable ModulePath(ModulePath)> */
+var_file->attrs[COLOR_modelbuilder__ModulePath___mmodule].val = var_mmodule; /* _mmodule on <var_file:nullable ModulePath(ModulePath)> */
+RET_LABEL52:(void)0;
+}
+}
+{
+modelbuilder__ModelBuilder__build_module_importation(self, var_nmodule); /* Direct call modelbuilder#ModelBuilder#build_module_importation on <self:ModelBuilder>*/
+}
+var = var_nmodule;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#load_module for (self: Object, String): nullable AModule */
+val* VIRTUAL_modelbuilder__ModelBuilder__load_module(val* self, val* p0) {
+val* var /* : nullable AModule */;
+val* var1 /* : nullable AModule */;
+var1 = modelbuilder__ModelBuilder__load_module(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ModelBuilder#build_a_mmodule for (self: ModelBuilder, nullable MGroup, String, AModule): nullable MModule */
+val* modelbuilder__ModelBuilder__build_a_mmodule(val* self, val* p0, val* p1, val* p2) {
+val* var /* : nullable MModule */;
+val* var_mgroup /* var mgroup: nullable MGroup */;
+val* var_mod_name /* var mod_name: String */;
+val* var_nmodule /* var nmodule: AModule */;
+val* var1 /* : nullable AModuledecl */;
+val* var3 /* : nullable AModuledecl */;
+val* var_decl /* var decl: nullable AModuledecl */;
+val* var4 /* : null */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var8 /* : Bool */;
+short int var10 /* : Bool */;
+val* var11 /* : AModuleName */;
+val* var13 /* : AModuleName */;
+val* var14 /* : TId */;
+val* var16 /* : TId */;
+val* var17 /* : String */;
+val* var_decl_name /* var decl_name: String */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+val* var_other21 /* var other: nullable Object */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+val* var25 /* : AModuleName */;
+val* var27 /* : AModuleName */;
+static val* varonce;
+val* var28 /* : String */;
+char* var29 /* : NativeString */;
+long var30 /* : Int */;
+val* var31 /* : FlatString */;
+static val* varonce32;
+val* var33 /* : String */;
+char* var34 /* : NativeString */;
+long var35 /* : Int */;
+val* var36 /* : FlatString */;
+val* var37 /* : Array[Object] */;
+long var38 /* : Int */;
+val* var39 /* : NativeArray[Object] */;
+val* var40 /* : String */;
+val* var41 /* : MModule */;
+val* var42 /* : Model */;
+val* var44 /* : Model */;
+val* var45 /* : Location */;
+val* var47 /* : Location */;
+val* var_mmodule /* var mmodule: MModule */;
+val* var49 /* : Array[AModule] */;
+val* var51 /* : Array[AModule] */;
+val* var52 /* : HashMap[MModule, AModule] */;
+val* var54 /* : HashMap[MModule, AModule] */;
+val* var55 /* : null */;
+short int var56 /* : Bool */;
+short int var57 /* : Bool */;
+short int var59 /* : Bool */;
+short int var60 /* : Bool */;
+short int var61 /* : Bool */;
+val* var62 /* : nullable ADoc */;
+val* var64 /* : nullable ADoc */;
+val* var_ndoc /* var ndoc: nullable ADoc */;
+val* var65 /* : null */;
+short int var66 /* : Bool */;
+short int var67 /* : Bool */;
+short int var69 /* : Bool */;
+short int var70 /* : Bool */;
+short int var71 /* : Bool */;
+val* var72 /* : MDoc */;
+val* var_mdoc /* var mdoc: MDoc */;
+static val* varonce75;
+val* var76 /* : String */;
+char* var77 /* : NativeString */;
+long var78 /* : Int */;
+val* var79 /* : FlatString */;
+static val* varonce80;
+val* var81 /* : String */;
+char* var82 /* : NativeString */;
+long var83 /* : Int */;
+val* var84 /* : FlatString */;
+static val* varonce85;
+val* var86 /* : String */;
+char* var87 /* : NativeString */;
+long var88 /* : Int */;
+val* var89 /* : FlatString */;
+val* var90 /* : Array[Object] */;
+long var91 /* : Int */;
+val* var92 /* : NativeArray[Object] */;
+val* var93 /* : String */;
+var_mgroup = p0;
+var_mod_name = p1;
+var_nmodule = p2;
+{
+{ /* Inline parser_nodes#AModule#n_moduledecl (var_nmodule) on <var_nmodule:AModule> */
+var3 = var_nmodule->attrs[COLOR_parser_nodes__AModule___n_moduledecl].val; /* _n_moduledecl on <var_nmodule:AModule> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var_decl = var1;
+var4 = NULL;
+if (var_decl == NULL) {
+var5 = 1; /* is null */
+} else {
+var5 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_decl,var4) on <var_decl:nullable AModuledecl> */
+var_other = var4;
+{
+{ /* Inline kernel#Object#is_same_instance (var_decl,var_other) on <var_decl:nullable AModuledecl(AModuledecl)> */
+var10 = var_decl == var_other;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+}
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+var5 = var6;
+}
+if (var5){
+} else {
+{
+{ /* Inline parser_nodes#AModuledecl#n_name (var_decl) on <var_decl:nullable AModuledecl(AModuledecl)> */
+var13 = var_decl->attrs[COLOR_parser_nodes__AModuledecl___n_name].val; /* _n_name on <var_decl:nullable AModuledecl(AModuledecl)> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 869);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+{ /* Inline parser_nodes#AModuleName#n_id (var11) on <var11:AModuleName> */
+var16 = var11->attrs[COLOR_parser_nodes__AModuleName___n_id].val; /* _n_id on <var11:AModuleName> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1990);
+show_backtrace(1);
+}
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+{
+var17 = lexer_work__Token__text(var14);
+}
+var_decl_name = var17;
+{
+{ /* Inline kernel#Object#!= (var_decl_name,var_mod_name) on <var_decl_name:String> */
+var_other21 = var_mod_name;
+{
+var23 = ((short int (*)(val*, val*))(var_decl_name->class->vft[COLOR_kernel__Object___61d_61d]))(var_decl_name, var_other21) /* == on <var_decl_name:String>*/;
+var22 = var23;
+}
+var24 = !var22;
+var19 = var24;
+goto RET_LABEL20;
+RET_LABEL20:(void)0;
+}
+var18 = var19;
+}
+if (var18){
+{
+{ /* Inline parser_nodes#AModuledecl#n_name (var_decl) on <var_decl:nullable AModuledecl(AModuledecl)> */
+var27 = var_decl->attrs[COLOR_parser_nodes__AModuledecl___n_name].val; /* _n_name on <var_decl:nullable AModuledecl(AModuledecl)> */
+if (unlikely(var27 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 869);
+show_backtrace(1);
+}
+var25 = var27;
+RET_LABEL26:(void)0;
+}
+}
+if (varonce) {
+var28 = varonce;
+} else {
+var29 = "Error: module name missmatch; declared ";
+var30 = 39;
+var31 = string__NativeString__to_s_with_length(var29, var30);
+var28 = var31;
+varonce = var28;
+}
+if (varonce32) {
+var33 = varonce32;
+} else {
+var34 = " file named ";
+var35 = 12;
+var36 = string__NativeString__to_s_with_length(var34, var35);
+var33 = var36;
+varonce32 = var33;
+}
+var37 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var37 = array_instance Array[Object] */
+var38 = 4;
+var39 = NEW_array__NativeArray(var38, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var39)->values[0] = (val*) var28;
+((struct instance_array__NativeArray*)var39)->values[1] = (val*) var_decl_name;
+((struct instance_array__NativeArray*)var39)->values[2] = (val*) var33;
+((struct instance_array__NativeArray*)var39)->values[3] = (val*) var_mod_name;
+{
+((void (*)(val*, val*, long))(var37->class->vft[COLOR_array__Array__with_native]))(var37, var39, var38) /* with_native on <var37:Array[Object]>*/;
+}
+}
+{
+var40 = ((val* (*)(val*))(var37->class->vft[COLOR_string__Object__to_s]))(var37) /* to_s on <var37:Array[Object]>*/;
+}
+{
+modelbuilder__ModelBuilder__error(self, var25, var40); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
+}
+} else {
+}
+}
+var41 = NEW_mmodule__MModule(&type_mmodule__MModule);
+{
+{ /* Inline modelbuilder#ModelBuilder#model (self) on <self:ModelBuilder> */
+var44 = self->attrs[COLOR_modelbuilder__ModelBuilder___model].val; /* _model on <self:ModelBuilder> */
+if (unlikely(var44 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 103);
+show_backtrace(1);
+}
+var42 = var44;
+RET_LABEL43:(void)0;
+}
+}
+{
+{ /* Inline parser_nodes#ANode#location (var_nmodule) on <var_nmodule:AModule> */
+var47 = var_nmodule->attrs[COLOR_parser_nodes__ANode___location].val; /* _location on <var_nmodule:AModule> */
+if (unlikely(var47 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _location");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 23);
+show_backtrace(1);
+}
+var45 = var47;
+RET_LABEL46:(void)0;
+}
+}
+{
+mmodule__MModule__init(var41, var42, var_mgroup, var_mod_name, var45); /* Direct call mmodule#MModule#init on <var41:MModule>*/
+}
+var_mmodule = var41;
+{
+{ /* Inline modelbuilder#AModule#mmodule= (var_nmodule,var_mmodule) on <var_nmodule:AModule> */
+var_nmodule->attrs[COLOR_modelbuilder__AModule___mmodule].val = var_mmodule; /* _mmodule on <var_nmodule:AModule> */
+RET_LABEL48:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#nmodules (self) on <self:ModelBuilder> */
+var51 = self->attrs[COLOR_modelbuilder__ModelBuilder___nmodules].val; /* _nmodules on <self:ModelBuilder> */
+if (unlikely(var51 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _nmodules");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 725);
+show_backtrace(1);
+}
+var49 = var51;
+RET_LABEL50:(void)0;
+}
+}
+{
+array__Array__add(var49, var_nmodule); /* Direct call array#Array#add on <var49:Array[AModule]>*/
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#mmodule2nmodule (self) on <self:ModelBuilder> */
+var54 = self->attrs[COLOR_modelbuilder__ModelBuilder___mmodule2nmodule].val; /* _mmodule2nmodule on <self:ModelBuilder> */
+if (unlikely(var54 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule2nmodule");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 728);
+show_backtrace(1);
+}
+var52 = var54;
+RET_LABEL53:(void)0;
+}
+}
+{
+hash_collection__HashMap___91d_93d_61d(var52, var_mmodule, var_nmodule); /* Direct call hash_collection#HashMap#[]= on <var52:HashMap[MModule, AModule]>*/
+}
+var55 = NULL;
+if (var_decl == NULL) {
+var56 = 0; /* is null */
+} else {
+var56 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_decl,var55) on <var_decl:nullable AModuledecl> */
+var_other21 = var55;
+{
+var60 = ((short int (*)(val*, val*))(var_decl->class->vft[COLOR_kernel__Object___61d_61d]))(var_decl, var_other21) /* == on <var_decl:nullable AModuledecl(AModuledecl)>*/;
+var59 = var60;
+}
+var61 = !var59;
+var57 = var61;
+goto RET_LABEL58;
+RET_LABEL58:(void)0;
+}
+var56 = var57;
 }
-if (!var69) {
-fprintf(stderr, "Runtime error: %s", "Assert failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 453);
-show_backtrace(1);
+if (var56){
+{
+{ /* Inline parser_nodes#AModuledecl#n_doc (var_decl) on <var_decl:nullable AModuledecl(AModuledecl)> */
+var64 = var_decl->attrs[COLOR_parser_nodes__AModuledecl___n_doc].val; /* _n_doc on <var_decl:nullable AModuledecl(AModuledecl)> */
+var62 = var64;
+RET_LABEL63:(void)0;
 }
-var70 = ((val* (*)(val*))(var_neof->class->vft[COLOR_lexer__AError__message]))(var_neof) /* message on <var_neof:EOF(AError)>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var_neof, var70) /* error on <self:ModelBuilder>*/;
-var71 = NULL;
-var = var71;
-goto RET_LABEL;
+}
+var_ndoc = var62;
+var65 = NULL;
+if (var_ndoc == NULL) {
+var66 = 0; /* is null */
 } else {
+var66 = 1; /* arg is null and recv is not */
 }
-var = var_nmodule;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+if (0) {
+{ /* Inline kernel#Object#!= (var_ndoc,var65) on <var_ndoc:nullable ADoc> */
+var_other21 = var65;
+{
+var70 = ((short int (*)(val*, val*))(var_ndoc->class->vft[COLOR_kernel__Object___61d_61d]))(var_ndoc, var_other21) /* == on <var_ndoc:nullable ADoc(ADoc)>*/;
+var69 = var70;
 }
-/* method modelbuilder#ModelBuilder#load_module_ast for (self: Object, String): nullable AModule */
-val* VIRTUAL_modelbuilder__ModelBuilder__load_module_ast(val* self, val* p0) {
-val* var /* : nullable AModule */;
-val* var1 /* : nullable AModule */;
-var1 = modelbuilder__ModelBuilder__load_module_ast(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
+var71 = !var69;
+var67 = var71;
+goto RET_LABEL68;
+RET_LABEL68:(void)0;
 }
-/* method modelbuilder#ModelBuilder#load_module for (self: ModelBuilder, String): nullable AModule */
-val* modelbuilder__ModelBuilder__load_module(val* self, val* p0) {
-val* var /* : nullable AModule */;
-val* var_filename /* var filename: String */;
-val* var1 /* : nullable ModulePath */;
-val* var_file /* var file: nullable ModulePath */;
-val* var2 /* : null */;
-short int var3 /* : Bool */;
-val* var4 /* : null */;
-val* var5 /* : nullable MModule */;
-val* var_mmodule /* var mmodule: nullable MModule */;
-val* var6 /* : null */;
-short int var7 /* : Bool */;
-val* var8 /* : HashMap[MModule, AModule] */;
-val* var9 /* : nullable Object */;
-val* var10 /* : nullable AModule */;
-val* var_nmodule /* var nmodule: nullable AModule */;
-val* var11 /* : null */;
-short int var12 /* : Bool */;
-val* var13 /* : null */;
-val* var14 /* : MGroup */;
-val* var15 /* : String */;
-val* var16 /* : nullable MModule */;
-val* var17 /* : null */;
-short int var18 /* : Bool */;
-val* var19 /* : null */;
-var_filename = p0;
-var1 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__identify_file]))(self, var_filename) /* identify_file on <self:ModelBuilder>*/;
-var_file = var1;
-var2 = NULL;
-if (var_file == NULL) {
-var3 = 1; /* is null */
-} else {
-var3 = 0; /* arg is null but recv is not */
+var66 = var67;
 }
-if (var3){
-var4 = NULL;
-var = var4;
-goto RET_LABEL;
-} else {
+if (var66){
+{
+var72 = modelbuilder__ADoc__to_mdoc(var_ndoc);
 }
-var5 = ((val* (*)(val*))(var_file->class->vft[COLOR_modelbuilder__ModulePath__mmodule]))(var_file) /* mmodule on <var_file:nullable ModulePath(ModulePath)>*/;
-var_mmodule = var5;
-var6 = NULL;
-if (var_mmodule == NULL) {
-var7 = 0; /* is null */
-} else {
-var7 = 1; /* arg is null and recv is not */
+var_mdoc = var72;
+{
+{ /* Inline mdoc#MEntity#mdoc= (var_mmodule,var_mdoc) on <var_mmodule:MModule> */
+var_mmodule->attrs[COLOR_mdoc__MEntity___mdoc].val = var_mdoc; /* _mdoc on <var_mmodule:MModule> */
+RET_LABEL73:(void)0;
 }
-if (var7){
-var8 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(self) /* mmodule2nmodule on <self:ModelBuilder>*/;
-var9 = ((val* (*)(val*, val*))(var8->class->vft[COLOR_abstract_collection__MapRead___91d_93d]))(var8, var_mmodule) /* [] on <var8:HashMap[MModule, AModule]>*/;
-var = var9;
-goto RET_LABEL;
-} else {
 }
-var10 = ((val* (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__load_module_ast]))(self, var_filename) /* load_module_ast on <self:ModelBuilder>*/;
-var_nmodule = var10;
-var11 = NULL;
-if (var_nmodule == NULL) {
-var12 = 1; /* is null */
-} else {
-var12 = 0; /* arg is null but recv is not */
+{
+{ /* Inline mdoc#MDoc#original_mentity= (var_mdoc,var_mmodule) on <var_mdoc:MDoc> */
+var_mdoc->attrs[COLOR_mdoc__MDoc___original_mentity].val = var_mmodule; /* _original_mentity on <var_mdoc:MDoc> */
+RET_LABEL74:(void)0;
+}
 }
-if (var12){
-var13 = NULL;
-var = var13;
-goto RET_LABEL;
 } else {
+if (varonce75) {
+var76 = varonce75;
+} else {
+var77 = "missing-doc";
+var78 = 11;
+var79 = string__NativeString__to_s_with_length(var77, var78);
+var76 = var79;
+varonce75 = var76;
 }
-var14 = ((val* (*)(val*))(var_file->class->vft[COLOR_modelbuilder__ModulePath__mgroup]))(var_file) /* mgroup on <var_file:nullable ModulePath(ModulePath)>*/;
-var15 = ((val* (*)(val*))(var_file->class->vft[COLOR_modelbuilder__ModulePath__name]))(var_file) /* name on <var_file:nullable ModulePath(ModulePath)>*/;
-var16 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__build_a_mmodule]))(self, var14, var15, var_nmodule) /* build_a_mmodule on <self:ModelBuilder>*/;
-var_mmodule = var16;
-var17 = NULL;
-if (var_mmodule == NULL) {
-var18 = 1; /* is null */
+if (varonce80) {
+var81 = varonce80;
 } else {
-var18 = 0; /* arg is null but recv is not */
+var82 = "Documentation warning: Undocumented module `";
+var83 = 44;
+var84 = string__NativeString__to_s_with_length(var82, var83);
+var81 = var84;
+varonce80 = var81;
 }
-if (var18){
-var19 = NULL;
-var = var19;
-goto RET_LABEL;
+if (varonce85) {
+var86 = varonce85;
 } else {
+var87 = "`";
+var88 = 1;
+var89 = string__NativeString__to_s_with_length(var87, var88);
+var86 = var89;
+varonce85 = var86;
 }
-((void (*)(val*, val*))(var_file->class->vft[COLOR_modelbuilder__ModulePath__mmodule_61d]))(var_file, var_mmodule) /* mmodule= on <var_file:nullable ModulePath(ModulePath)>*/;
-((void (*)(val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__build_module_importation]))(self, var_nmodule) /* build_module_importation on <self:ModelBuilder>*/;
-var = var_nmodule;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var90 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var90 = array_instance Array[Object] */
+var91 = 3;
+var92 = NEW_array__NativeArray(var91, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var92)->values[0] = (val*) var81;
+((struct instance_array__NativeArray*)var92)->values[1] = (val*) var_mmodule;
+((struct instance_array__NativeArray*)var92)->values[2] = (val*) var86;
+{
+((void (*)(val*, val*, long))(var90->class->vft[COLOR_array__Array__with_native]))(var90, var92, var91) /* with_native on <var90:Array[Object]>*/;
 }
-/* method modelbuilder#ModelBuilder#load_module for (self: Object, String): nullable AModule */
-val* VIRTUAL_modelbuilder__ModelBuilder__load_module(val* self, val* p0) {
-val* var /* : nullable AModule */;
-val* var1 /* : nullable AModule */;
-var1 = modelbuilder__ModelBuilder__load_module(self, p0);
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method modelbuilder#ModelBuilder#load_rt_module for (self: ModelBuilder, MModule, AModule, String): nullable AModule */
-val* modelbuilder__ModelBuilder__load_rt_module(val* self, val* p0, val* p1, val* p2) {
-val* var /* : nullable AModule */;
-val* var_parent /* var parent: MModule */;
-val* var_nmodule /* var nmodule: AModule */;
-val* var_mod_name /* var mod_name: String */;
-val* var1 /* : MModule */;
-val* var2 /* : Model */;
-val* var3 /* : nullable MGroup */;
-val* var4 /* : Location */;
-val* var_mmodule /* var mmodule: MModule */;
-val* var5 /* : Array[AModule] */;
-val* var6 /* : HashMap[MModule, AModule] */;
-val* var7 /* : Array[MModule] */;
-val* var_imported_modules /* var imported_modules: Array[MModule] */;
-val* var8 /* : MVisibility */;
-var_parent = p0;
-var_nmodule = p1;
-var_mod_name = p2;
-var1 = NEW_mmodule__MModule(&type_mmodule__MModule);
-var2 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-var3 = ((val* (*)(val*))(var_parent->class->vft[COLOR_mmodule__MModule__mgroup]))(var_parent) /* mgroup on <var_parent:MModule>*/;
-var4 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__ANode__location]))(var_nmodule) /* location on <var_nmodule:AModule>*/;
-((void (*)(val*, val*, val*, val*, val*))(var1->class->vft[COLOR_mmodule__MModule__init]))(var1, var2, var3, var_mod_name, var4) /* init on <var1:MModule>*/;
-var_mmodule = var1;
-((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule_61d]))(var_nmodule, var_mmodule) /* mmodule= on <var_nmodule:AModule>*/;
-var5 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__nmodules]))(self) /* nmodules on <self:ModelBuilder>*/;
-((void (*)(val*, val*))(var5->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var5, var_nmodule) /* add on <var5:Array[AModule]>*/;
-var6 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(self) /* mmodule2nmodule on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var6->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var6, var_mmodule, var_nmodule) /* []= on <var6:HashMap[MModule, AModule]>*/;
-var7 = NEW_array__Array(&type_array__Arraymmodule__MModule);
-((void (*)(val*))(var7->class->vft[COLOR_array__Array__init]))(var7) /* init on <var7:Array[MModule]>*/;
-var_imported_modules = var7;
-((void (*)(val*, val*))(var_imported_modules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_imported_modules, var_parent) /* add on <var_imported_modules:Array[MModule]>*/;
-var8 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__intrude_visibility]))(self) /* intrude_visibility on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__set_visibility_for]))(var_mmodule, var_parent, var8) /* set_visibility_for on <var_mmodule:MModule>*/;
-((void (*)(val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__set_imported_mmodules]))(var_mmodule, var_imported_modules) /* set_imported_mmodules on <var_mmodule:MModule>*/;
-var = var_nmodule;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var93 = ((val* (*)(val*))(var90->class->vft[COLOR_string__Object__to_s]))(var90) /* to_s on <var90:Array[Object]>*/;
 }
-/* method modelbuilder#ModelBuilder#load_rt_module for (self: Object, MModule, AModule, String): nullable AModule */
-val* VIRTUAL_modelbuilder__ModelBuilder__load_rt_module(val* self, val* p0, val* p1, val* p2) {
-val* var /* : nullable AModule */;
-val* var1 /* : nullable AModule */;
-var1 = modelbuilder__ModelBuilder__load_rt_module(self, p0, p1, p2);
-var = var1;
-RET_LABEL:;
-return var;
+{
+modelbuilder__ModelBuilder__advice(self, var_decl, var76, var93); /* Direct call modelbuilder#ModelBuilder#advice on <self:ModelBuilder>*/
 }
-/* method modelbuilder#ModelBuilder#build_a_mmodule for (self: ModelBuilder, nullable MGroup, String, AModule): nullable MModule */
-val* modelbuilder__ModelBuilder__build_a_mmodule(val* self, val* p0, val* p1, val* p2) {
-val* var /* : nullable MModule */;
-val* var_mgroup /* var mgroup: nullable MGroup */;
-val* var_mod_name /* var mod_name: String */;
-val* var_nmodule /* var nmodule: AModule */;
-val* var1 /* : nullable AModuledecl */;
-val* var_decl /* var decl: nullable AModuledecl */;
-val* var2 /* : null */;
-short int var3 /* : Bool */;
-val* var4 /* : AModuleName */;
-val* var5 /* : TId */;
-val* var6 /* : String */;
-val* var_decl_name /* var decl_name: String */;
-short int var7 /* : Bool */;
-val* var8 /* : AModuleName */;
-static val* varonce;
-val* var9 /* : String */;
-char* var10 /* : NativeString */;
-long var11 /* : Int */;
-val* var12 /* : String */;
-static val* varonce13;
-val* var14 /* : String */;
-char* var15 /* : NativeString */;
-long var16 /* : Int */;
-val* var17 /* : String */;
-val* var18 /* : Array[Object] */;
-long var19 /* : Int */;
-val* var20 /* : NativeArray[Object] */;
-val* var21 /* : String */;
-val* var22 /* : MModule */;
-val* var23 /* : Model */;
-val* var24 /* : Location */;
-val* var_mmodule /* var mmodule: MModule */;
-val* var25 /* : Array[AModule] */;
-val* var26 /* : HashMap[MModule, AModule] */;
-var_mgroup = p0;
-var_mod_name = p1;
-var_nmodule = p2;
-var1 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__AModule__n_moduledecl]))(var_nmodule) /* n_moduledecl on <var_nmodule:AModule>*/;
-var_decl = var1;
-var2 = NULL;
-if (var_decl == NULL) {
-var3 = 1; /* is null */
-} else {
-var3 = 0; /* arg is null but recv is not */
 }
-if (var3){
-} else {
-var4 = ((val* (*)(val*))(var_decl->class->vft[COLOR_parser_nodes__AModuledecl__n_name]))(var_decl) /* n_name on <var_decl:nullable AModuledecl(AModuledecl)>*/;
-var5 = ((val* (*)(val*))(var4->class->vft[COLOR_parser_nodes__AModuleName__n_id]))(var4) /* n_id on <var4:AModuleName>*/;
-var6 = ((val* (*)(val*))(var5->class->vft[COLOR_parser_nodes__Token__text]))(var5) /* text on <var5:TId>*/;
-var_decl_name = var6;
-var7 = ((short int (*)(val*, val*))(var_decl_name->class->vft[COLOR_kernel__Object___33d_61d]))(var_decl_name, var_mod_name) /* != on <var_decl_name:String>*/;
-if (var7){
-var8 = ((val* (*)(val*))(var_decl->class->vft[COLOR_parser_nodes__AModuledecl__n_name]))(var_decl) /* n_name on <var_decl:nullable AModuledecl(AModuledecl)>*/;
-if (varonce) {
-var9 = varonce;
 } else {
-var10 = "Error: module name missmatch; declared ";
-var11 = 39;
-var12 = string__NativeString__to_s_with_length(var10, var11);
-var9 = var12;
-varonce = var9;
 }
-if (varonce13) {
-var14 = varonce13;
-} else {
-var15 = " file named ";
-var16 = 12;
-var17 = string__NativeString__to_s_with_length(var15, var16);
-var14 = var17;
-varonce13 = var14;
-}
-var18 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var18 = array_instance Array[Object] */
-var19 = 4;
-var20 = NEW_array__NativeArray(var19, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var20)->values[0] = (val*) var9;
-((struct instance_array__NativeArray*)var20)->values[1] = (val*) var_decl_name;
-((struct instance_array__NativeArray*)var20)->values[2] = (val*) var14;
-((struct instance_array__NativeArray*)var20)->values[3] = (val*) var_mod_name;
-((void (*)(val*, val*, long))(var18->class->vft[COLOR_array__Array__with_native]))(var18, var20, var19) /* with_native on <var18:Array[Object]>*/;
-}
-var21 = ((val* (*)(val*))(var18->class->vft[COLOR_string__Object__to_s]))(var18) /* to_s on <var18:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var8, var21) /* error on <self:ModelBuilder>*/;
-} else {
-}
-}
-var22 = NEW_mmodule__MModule(&type_mmodule__MModule);
-var23 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__model]))(self) /* model on <self:ModelBuilder>*/;
-var24 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__ANode__location]))(var_nmodule) /* location on <var_nmodule:AModule>*/;
-((void (*)(val*, val*, val*, val*, val*))(var22->class->vft[COLOR_mmodule__MModule__init]))(var22, var23, var_mgroup, var_mod_name, var24) /* init on <var22:MModule>*/;
-var_mmodule = var22;
-((void (*)(val*, val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule_61d]))(var_nmodule, var_mmodule) /* mmodule= on <var_nmodule:AModule>*/;
-var25 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__nmodules]))(self) /* nmodules on <self:ModelBuilder>*/;
-((void (*)(val*, val*))(var25->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var25, var_nmodule) /* add on <var25:Array[AModule]>*/;
-var26 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__mmodule2nmodule]))(self) /* mmodule2nmodule on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var26->class->vft[COLOR_abstract_collection__Map___91d_93d_61d]))(var26, var_mmodule, var_nmodule) /* []= on <var26:HashMap[MModule, AModule]>*/;
 var = var_mmodule;
 goto RET_LABEL;
 RET_LABEL:;
@@ -3290,353 +6629,963 @@ return var;
 void modelbuilder__ModelBuilder__build_module_importation(val* self, val* p0) {
 val* var_nmodule /* var nmodule: AModule */;
 short int var /* : Bool */;
-short int var1 /* : Bool */;
-val* var2 /* : nullable MModule */;
-val* var_mmodule /* var mmodule: MModule */;
+short int var2 /* : Bool */;
 short int var3 /* : Bool */;
+val* var5 /* : nullable MModule */;
+val* var7 /* : nullable MModule */;
+val* var_mmodule /* var mmodule: MModule */;
+short int var8 /* : Bool */;
 short int var_stdimport /* var stdimport: Bool */;
-val* var4 /* : Array[MModule] */;
+val* var9 /* : Array[MModule] */;
 val* var_imported_modules /* var imported_modules: Array[MModule] */;
-val* var5 /* : ANodes[AImport] */;
-val* var6 /* : Iterator[nullable Object] */;
-short int var7 /* : Bool */;
-val* var8 /* : nullable Object */;
+val* var10 /* : ANodes[AImport] */;
+val* var12 /* : ANodes[AImport] */;
+val* var_ /* var : ANodes[AImport] */;
+val* var13 /* : Iterator[ANode] */;
+val* var_14 /* var : Iterator[AImport] */;
+short int var15 /* : Bool */;
+val* var16 /* : nullable Object */;
 val* var_aimport /* var aimport: AImport */;
-short int var9 /* : Bool */;
-short int var10 /* : Bool */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
 int cltype;
 int idtype;
-short int var11 /* : Bool */;
-val* var12 /* : AModuleName */;
-val* var13 /* : TId */;
-val* var14 /* : String */;
+short int var19 /* : Bool */;
+val* var20 /* : nullable MGroup */;
+val* var22 /* : nullable MGroup */;
+val* var_mgroup /* var mgroup: nullable MGroup */;
+val* var23 /* : AModuleName */;
+val* var25 /* : AModuleName */;
+val* var26 /* : nullable TQuad */;
+val* var28 /* : nullable TQuad */;
+val* var29 /* : null */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
+val* var36 /* : null */;
+val* var37 /* : AModuleName */;
+val* var39 /* : AModuleName */;
+val* var40 /* : ANodes[TId] */;
+val* var42 /* : ANodes[TId] */;
+val* var_43 /* var : ANodes[TId] */;
+val* var44 /* : Iterator[ANode] */;
+val* var_45 /* var : Iterator[TId] */;
+short int var46 /* : Bool */;
+val* var47 /* : nullable Object */;
+val* var_grp /* var grp: TId */;
+val* var48 /* : String */;
+val* var49 /* : nullable ModulePath */;
+val* var_path /* var path: nullable ModulePath */;
+val* var50 /* : null */;
+short int var51 /* : Bool */;
+short int var52 /* : Bool */;
+val* var_other54 /* var other: nullable Object */;
+short int var55 /* : Bool */;
+short int var57 /* : Bool */;
+val* var58 /* : MGroup */;
+val* var60 /* : MGroup */;
+val* var63 /* : AModuleName */;
+val* var65 /* : AModuleName */;
+val* var66 /* : TId */;
+val* var68 /* : TId */;
+val* var69 /* : String */;
 val* var_mod_name /* var mod_name: String */;
-val* var15 /* : AModuleName */;
-val* var16 /* : nullable MModule */;
+val* var70 /* : AModuleName */;
+val* var72 /* : AModuleName */;
+val* var73 /* : nullable MModule */;
 val* var_sup /* var sup: nullable MModule */;
-val* var17 /* : null */;
-short int var18 /* : Bool */;
-val* var19 /* : AVisibility */;
-val* var20 /* : MVisibility */;
+val* var74 /* : null */;
+short int var75 /* : Bool */;
+short int var76 /* : Bool */;
+short int var78 /* : Bool */;
+short int var80 /* : Bool */;
+val* var82 /* : AVisibility */;
+val* var84 /* : AVisibility */;
+val* var85 /* : MVisibility */;
 val* var_mvisibility /* var mvisibility: MVisibility */;
-val* var21 /* : MVisibility */;
-short int var22 /* : Bool */;
-val* var23 /* : AVisibility */;
+val* var86 /* : MVisibility */;
+short int var87 /* : Bool */;
+short int var88 /* : Bool */;
+short int var90 /* : Bool */;
+short int var92 /* : Bool */;
+val* var93 /* : AVisibility */;
+val* var95 /* : AVisibility */;
 static val* varonce;
-val* var24 /* : String */;
-char* var25 /* : NativeString */;
-long var26 /* : Int */;
-val* var27 /* : String */;
-short int var28 /* : Bool */;
-val* var29 /* : AModuleName */;
-static val* varonce30;
-val* var31 /* : String */;
-char* var32 /* : NativeString */;
-long var33 /* : Int */;
-val* var34 /* : String */;
-static val* varonce35;
-val* var36 /* : String */;
-char* var37 /* : NativeString */;
-long var38 /* : Int */;
-val* var39 /* : String */;
-val* var40 /* : Array[Object] */;
-long var41 /* : Int */;
-val* var42 /* : NativeArray[Object] */;
-val* var43 /* : String */;
-val* var44 /* : POSetElement[MModule] */;
-short int var45 /* : Bool */;
-val* var46 /* : AModuleName */;
-static val* varonce47;
-val* var48 /* : String */;
-char* var49 /* : NativeString */;
-long var50 /* : Int */;
-val* var51 /* : String */;
-static val* varonce52;
-val* var53 /* : String */;
-char* var54 /* : NativeString */;
-long var55 /* : Int */;
-val* var56 /* : String */;
-static val* varonce57;
-val* var58 /* : String */;
-char* var59 /* : NativeString */;
-long var60 /* : Int */;
-val* var61 /* : String */;
-val* var62 /* : Array[Object] */;
-long var63 /* : Int */;
-val* var64 /* : NativeArray[Object] */;
-val* var65 /* : String */;
-static val* varonce66;
-val* var67 /* : String */;
-char* var68 /* : NativeString */;
-long var69 /* : Int */;
-val* var70 /* : String */;
-val* var_mod_name71 /* var mod_name: String */;
-val* var72 /* : null */;
-val* var73 /* : nullable MModule */;
-val* var_sup74 /* var sup: nullable MModule */;
-val* var75 /* : null */;
-short int var76 /* : Bool */;
-val* var77 /* : MVisibility */;
-val* var78 /* : ToolContext */;
-static val* varonce79;
-val* var80 /* : String */;
-char* var81 /* : NativeString */;
-long var82 /* : Int */;
-val* var83 /* : String */;
-static val* varonce84;
-val* var85 /* : String */;
-char* var86 /* : NativeString */;
-long var87 /* : Int */;
-val* var88 /* : String */;
-val* var89 /* : String */;
-val* var90 /* : Array[Object] */;
-long var91 /* : Int */;
-val* var92 /* : NativeArray[Object] */;
-val* var93 /* : String */;
-long var94 /* : Int */;
+val* var96 /* : String */;
+char* var97 /* : NativeString */;
+long var98 /* : Int */;
+val* var99 /* : FlatString */;
+short int var100 /* : Bool */;
+short int var101 /* : Bool */;
+short int var103 /* : Bool */;
+short int var105 /* : Bool */;
+val* var106 /* : AModuleName */;
+val* var108 /* : AModuleName */;
+static val* varonce109;
+val* var110 /* : String */;
+char* var111 /* : NativeString */;
+long var112 /* : Int */;
+val* var113 /* : FlatString */;
+static val* varonce114;
+val* var115 /* : String */;
+char* var116 /* : NativeString */;
+long var117 /* : Int */;
+val* var118 /* : FlatString */;
+val* var119 /* : Array[Object] */;
+long var120 /* : Int */;
+val* var121 /* : NativeArray[Object] */;
+val* var122 /* : String */;
+val* var123 /* : POSetElement[MModule] */;
+val* var125 /* : POSetElement[MModule] */;
+short int var126 /* : Bool */;
+val* var127 /* : AModuleName */;
+val* var129 /* : AModuleName */;
+static val* varonce130;
+val* var131 /* : String */;
+char* var132 /* : NativeString */;
+long var133 /* : Int */;
+val* var134 /* : FlatString */;
+static val* varonce135;
+val* var136 /* : String */;
+char* var137 /* : NativeString */;
+long var138 /* : Int */;
+val* var139 /* : FlatString */;
+static val* varonce140;
+val* var141 /* : String */;
+char* var142 /* : NativeString */;
+long var143 /* : Int */;
+val* var144 /* : FlatString */;
+val* var145 /* : Array[Object] */;
+long var146 /* : Int */;
+val* var147 /* : NativeArray[Object] */;
+val* var148 /* : String */;
+static val* varonce151;
+val* var152 /* : String */;
+char* var153 /* : NativeString */;
+long var154 /* : Int */;
+val* var155 /* : FlatString */;
+val* var_mod_name156 /* var mod_name: String */;
+val* var157 /* : null */;
+val* var158 /* : nullable MModule */;
+val* var_sup159 /* var sup: nullable MModule */;
+val* var160 /* : null */;
+short int var161 /* : Bool */;
+short int var162 /* : Bool */;
+short int var164 /* : Bool */;
+short int var165 /* : Bool */;
+short int var166 /* : Bool */;
+val* var167 /* : MVisibility */;
+val* var168 /* : ToolContext */;
+val* var170 /* : ToolContext */;
+static val* varonce171;
+val* var172 /* : String */;
+char* var173 /* : NativeString */;
+long var174 /* : Int */;
+val* var175 /* : FlatString */;
+static val* varonce176;
+val* var177 /* : String */;
+char* var178 /* : NativeString */;
+long var179 /* : Int */;
+val* var180 /* : FlatString */;
+val* var181 /* : String */;
+val* var182 /* : Array[Object] */;
+long var183 /* : Int */;
+val* var184 /* : NativeArray[Object] */;
+val* var185 /* : String */;
+long var186 /* : Int */;
+val* var187 /* : POSetElement[MModule] */;
+val* var189 /* : POSetElement[MModule] */;
+val* var190 /* : Collection[Object] */;
+val* var_directs /* var directs: Collection[MModule] */;
+val* var191 /* : ANodes[AImport] */;
+val* var193 /* : ANodes[AImport] */;
+val* var_194 /* var : ANodes[AImport] */;
+val* var195 /* : Iterator[ANode] */;
+val* var_196 /* var : Iterator[AImport] */;
+short int var197 /* : Bool */;
+val* var198 /* : nullable Object */;
+val* var_nim /* var nim: AImport */;
+short int var199 /* : Bool */;
+int cltype200;
+int idtype201;
+short int var202 /* : Bool */;
+val* var204 /* : nullable MModule */;
+val* var206 /* : nullable MModule */;
+val* var_im /* var im: nullable MModule */;
+val* var207 /* : null */;
+short int var208 /* : Bool */;
+short int var209 /* : Bool */;
+short int var211 /* : Bool */;
+short int var213 /* : Bool */;
+short int var214 /* : Bool */;
 var_nmodule = p0;
-var = ((short int (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__is_importation_done]))(var_nmodule) /* is_importation_done on <var_nmodule:AModule>*/;
+{
+{ /* Inline modelbuilder#AModule#is_importation_done (var_nmodule) on <var_nmodule:AModule> */
+var2 = var_nmodule->attrs[COLOR_modelbuilder__AModule___is_importation_done].s; /* _is_importation_done on <var_nmodule:AModule> */
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
 if (var){
 goto RET_LABEL;
 } else {
 }
-var1 = 1;
-((void (*)(val*, short int))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__is_importation_done_61d]))(var_nmodule, var1) /* is_importation_done= on <var_nmodule:AModule>*/;
-var2 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_modelbuilder__AModule__mmodule]))(var_nmodule) /* mmodule on <var_nmodule:AModule>*/;
-if (var2 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Cast failed");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 540);
+var3 = 1;
+{
+{ /* Inline modelbuilder#AModule#is_importation_done= (var_nmodule,var3) on <var_nmodule:AModule> */
+var_nmodule->attrs[COLOR_modelbuilder__AModule___is_importation_done].s = var3; /* _is_importation_done on <var_nmodule:AModule> */
+RET_LABEL4:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#AModule#mmodule (var_nmodule) on <var_nmodule:AModule> */
+var7 = var_nmodule->attrs[COLOR_modelbuilder__AModule___mmodule].val; /* _mmodule on <var_nmodule:AModule> */
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 667);
+show_backtrace(1);
+}
+var_mmodule = var5;
+var8 = 1;
+var_stdimport = var8;
+var9 = NEW_array__Array(&type_array__Arraymmodule__MModule);
+{
+((void (*)(val*))(var9->class->vft[COLOR_kernel__Object__init]))(var9) /* init on <var9:Array[MModule]>*/;
+}
+var_imported_modules = var9;
+{
+{ /* Inline parser_nodes#AModule#n_imports (var_nmodule) on <var_nmodule:AModule> */
+var12 = var_nmodule->attrs[COLOR_parser_nodes__AModule___n_imports].val; /* _n_imports on <var_nmodule:AModule> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_imports");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 857);
+show_backtrace(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
+}
+var_ = var10;
+{
+var13 = parser_nodes__ANodes__iterator(var_);
+}
+var_14 = var13;
+for(;;) {
+{
+var15 = ((short int (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_14) /* is_ok on <var_14:Iterator[AImport]>*/;
+}
+if (var15){
+{
+var16 = ((val* (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__item]))(var_14) /* item on <var_14:Iterator[AImport]>*/;
+}
+var_aimport = var16;
+var17 = 0;
+var_stdimport = var17;
+/* <var_aimport:AImport> isa AStdImport */
+cltype = type_parser_nodes__AStdImport.color;
+idtype = type_parser_nodes__AStdImport.id;
+if(cltype >= var_aimport->type->table_size) {
+var18 = 0;
+} else {
+var18 = var_aimport->type->type_table[cltype] == idtype;
+}
+var19 = !var18;
+if (var19){
+goto BREAK_label;
+} else {
+}
+{
+{ /* Inline mmodule#MModule#mgroup (var_mmodule) on <var_mmodule:MModule> */
+var22 = var_mmodule->attrs[COLOR_mmodule__MModule___mgroup].val; /* _mgroup on <var_mmodule:MModule> */
+var20 = var22;
+RET_LABEL21:(void)0;
+}
+}
+var_mgroup = var20;
+{
+{ /* Inline parser_nodes#AStdImport#n_name (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var25 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_name].val; /* _n_name on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 882);
+show_backtrace(1);
+}
+var23 = var25;
+RET_LABEL24:(void)0;
+}
+}
+{
+{ /* Inline parser_nodes#AModuleName#n_quad (var23) on <var23:AModuleName> */
+var28 = var23->attrs[COLOR_parser_nodes__AModuleName___n_quad].val; /* _n_quad on <var23:AModuleName> */
+var26 = var28;
+RET_LABEL27:(void)0;
+}
+}
+var29 = NULL;
+if (var26 == NULL) {
+var30 = 0; /* is null */
+} else {
+var30 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var26,var29) on <var26:nullable TQuad> */
+var_other = var29;
+{
+var34 = ((short int (*)(val*, val*))(var26->class->vft[COLOR_kernel__Object___61d_61d]))(var26, var_other) /* == on <var26:nullable TQuad(TQuad)>*/;
+var33 = var34;
+}
+var35 = !var33;
+var31 = var35;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
+}
+var30 = var31;
+}
+if (var30){
+var36 = NULL;
+var_mgroup = var36;
+} else {
+}
+{
+{ /* Inline parser_nodes#AStdImport#n_name (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var39 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_name].val; /* _n_name on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var39 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 882);
 show_backtrace(1);
 }
-var_mmodule = var2;
-var3 = 1;
-var_stdimport = var3;
-var4 = NEW_array__Array(&type_array__Arraymmodule__MModule);
-((void (*)(val*))(var4->class->vft[COLOR_array__Array__init]))(var4) /* init on <var4:Array[MModule]>*/;
-var_imported_modules = var4;
-var5 = ((val* (*)(val*))(var_nmodule->class->vft[COLOR_parser_nodes__AModule__n_imports]))(var_nmodule) /* n_imports on <var_nmodule:AModule>*/;
-var6 = ((val* (*)(val*))(var5->class->vft[COLOR_abstract_collection__Collection__iterator]))(var5) /* iterator on <var5:ANodes[AImport]>*/;
+var37 = var39;
+RET_LABEL38:(void)0;
+}
+}
+{
+{ /* Inline parser_nodes#AModuleName#n_path (var37) on <var37:AModuleName> */
+var42 = var37->attrs[COLOR_parser_nodes__AModuleName___n_path].val; /* _n_path on <var37:AModuleName> */
+if (unlikely(var42 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_path");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1989);
+show_backtrace(1);
+}
+var40 = var42;
+RET_LABEL41:(void)0;
+}
+}
+var_43 = var40;
+{
+var44 = parser_nodes__ANodes__iterator(var_43);
+}
+var_45 = var44;
 for(;;) {
-var7 = ((short int (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var6) /* is_ok on <var6:Iterator[nullable Object]>*/;
-if(!var7) break;
-var8 = ((val* (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__item]))(var6) /* item on <var6:Iterator[nullable Object]>*/;
-var_aimport = var8;
-var9 = 0;
-var_stdimport = var9;
-/* <var_aimport:AImport> isa AStdImport */
-cltype = type_parser_nodes__AStdImport.color;
-idtype = type_parser_nodes__AStdImport.id;
-if(cltype >= var_aimport->type->table_size) {
-var10 = 0;
+{
+var46 = ((short int (*)(val*))(var_45->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_45) /* is_ok on <var_45:Iterator[TId]>*/;
+}
+if (var46){
+{
+var47 = ((val* (*)(val*))(var_45->class->vft[COLOR_abstract_collection__Iterator__item]))(var_45) /* item on <var_45:Iterator[TId]>*/;
+}
+var_grp = var47;
+{
+var48 = lexer_work__Token__text(var_grp);
+}
+{
+var49 = modelbuilder__ModelBuilder__search_mmodule_by_name(self, var_grp, var_mgroup, var48);
+}
+var_path = var49;
+var50 = NULL;
+if (var_path == NULL) {
+var51 = 1; /* is null */
 } else {
-var10 = var_aimport->type->type_table[cltype] == idtype;
+var51 = 0; /* arg is null but recv is not */
 }
-var11 = !var10;
-if (var11){
-goto CONTINUE_label;
+if (0) {
+{ /* Inline kernel#Object#== (var_path,var50) on <var_path:nullable ModulePath> */
+var_other54 = var50;
+{
+{ /* Inline kernel#Object#is_same_instance (var_path,var_other54) on <var_path:nullable ModulePath(ModulePath)> */
+var57 = var_path == var_other54;
+var55 = var57;
+goto RET_LABEL56;
+RET_LABEL56:(void)0;
+}
+}
+var52 = var55;
+goto RET_LABEL53;
+RET_LABEL53:(void)0;
+}
+var51 = var52;
+}
+if (var51){
+goto RET_LABEL;
 } else {
 }
-var12 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_name]))(var_aimport) /* n_name on <var_aimport:AImport(AStdImport)>*/;
-var13 = ((val* (*)(val*))(var12->class->vft[COLOR_parser_nodes__AModuleName__n_id]))(var12) /* n_id on <var12:AModuleName>*/;
-var14 = ((val* (*)(val*))(var13->class->vft[COLOR_parser_nodes__Token__text]))(var13) /* text on <var13:TId>*/;
-var_mod_name = var14;
-var15 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_name]))(var_aimport) /* n_name on <var_aimport:AImport(AStdImport)>*/;
-var16 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mmodule_by_name]))(self, var15, var_mmodule, var_mod_name) /* get_mmodule_by_name on <self:ModelBuilder>*/;
-var_sup = var16;
-var17 = NULL;
+{
+{ /* Inline modelbuilder#ModulePath#mgroup (var_path) on <var_path:nullable ModulePath(ModulePath)> */
+var60 = var_path->attrs[COLOR_modelbuilder__ModulePath___mgroup].val; /* _mgroup on <var_path:nullable ModulePath(ModulePath)> */
+if (unlikely(var60 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroup");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 776);
+show_backtrace(1);
+}
+var58 = var60;
+RET_LABEL59:(void)0;
+}
+}
+var_mgroup = var58;
+{
+((void (*)(val*))(var_45->class->vft[COLOR_abstract_collection__Iterator__next]))(var_45) /* next on <var_45:Iterator[TId]>*/;
+}
+} else {
+goto BREAK_label61;
+}
+}
+BREAK_label61: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_45) on <var_45:Iterator[TId]> */
+RET_LABEL62:(void)0;
+}
+}
+{
+{ /* Inline parser_nodes#AStdImport#n_name (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var65 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_name].val; /* _n_name on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var65 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 882);
+show_backtrace(1);
+}
+var63 = var65;
+RET_LABEL64:(void)0;
+}
+}
+{
+{ /* Inline parser_nodes#AModuleName#n_id (var63) on <var63:AModuleName> */
+var68 = var63->attrs[COLOR_parser_nodes__AModuleName___n_id].val; /* _n_id on <var63:AModuleName> */
+if (unlikely(var68 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 1990);
+show_backtrace(1);
+}
+var66 = var68;
+RET_LABEL67:(void)0;
+}
+}
+{
+var69 = lexer_work__Token__text(var66);
+}
+var_mod_name = var69;
+{
+{ /* Inline parser_nodes#AStdImport#n_name (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var72 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_name].val; /* _n_name on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var72 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 882);
+show_backtrace(1);
+}
+var70 = var72;
+RET_LABEL71:(void)0;
+}
+}
+{
+var73 = modelbuilder__ModelBuilder__get_mmodule_by_name(self, var70, var_mgroup, var_mod_name);
+}
+var_sup = var73;
+var74 = NULL;
 if (var_sup == NULL) {
-var18 = 1; /* is null */
+var75 = 1; /* is null */
 } else {
-var18 = 0; /* arg is null but recv is not */
+var75 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_sup,var74) on <var_sup:nullable MModule> */
+var_other54 = var74;
+{
+{ /* Inline kernel#Object#is_same_instance (var_sup,var_other54) on <var_sup:nullable MModule(MModule)> */
+var80 = var_sup == var_other54;
+var78 = var80;
+goto RET_LABEL79;
+RET_LABEL79:(void)0;
+}
+}
+var76 = var78;
+goto RET_LABEL77;
+RET_LABEL77:(void)0;
+}
+var75 = var76;
+}
+if (var75){
+goto BREAK_label;
+} else {
+}
+{
+{ /* Inline modelbuilder#AStdImport#mmodule= (var_aimport,var_sup) on <var_aimport:AImport(AStdImport)> */
+var_aimport->attrs[COLOR_modelbuilder__AStdImport___mmodule].val = var_sup; /* _mmodule on <var_aimport:AImport(AStdImport)> */
+RET_LABEL81:(void)0;
+}
+}
+{
+array__Array__add(var_imported_modules, var_sup); /* Direct call array#Array#add on <var_imported_modules:Array[MModule]>*/
+}
+{
+{ /* Inline parser_nodes#AStdImport#n_visibility (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var84 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_visibility].val; /* _n_visibility on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var84 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_visibility");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 880);
+show_backtrace(1);
+}
+var82 = var84;
+RET_LABEL83:(void)0;
+}
+}
+{
+var85 = ((val* (*)(val*))(var82->class->vft[COLOR_modelbuilder__AVisibility__mvisibility]))(var82) /* mvisibility on <var82:AVisibility>*/;
+}
+var_mvisibility = var85;
+{
+var86 = model_base__Object__protected_visibility(self);
+}
+{
+{ /* Inline kernel#Object#== (var_mvisibility,var86) on <var_mvisibility:MVisibility> */
+var_other54 = var86;
+{
+{ /* Inline kernel#Object#is_same_instance (var_mvisibility,var_other54) on <var_mvisibility:MVisibility> */
+var92 = var_mvisibility == var_other54;
+var90 = var92;
+goto RET_LABEL91;
+RET_LABEL91:(void)0;
+}
+}
+var88 = var90;
+goto RET_LABEL89;
+RET_LABEL89:(void)0;
+}
+var87 = var88;
+}
+if (var87){
+{
+{ /* Inline parser_nodes#AStdImport#n_visibility (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var95 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_visibility].val; /* _n_visibility on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var95 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_visibility");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 880);
+show_backtrace(1);
+}
+var93 = var95;
+RET_LABEL94:(void)0;
+}
 }
-if (var18){
-goto CONTINUE_label;
-} else {
-}
-((void (*)(val*, val*))(var_aimport->class->vft[COLOR_modelbuilder__AStdImport__mmodule_61d]))(var_aimport, var_sup) /* mmodule= on <var_aimport:AImport(AStdImport)>*/;
-((void (*)(val*, val*))(var_imported_modules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_imported_modules, var_sup) /* add on <var_imported_modules:Array[MModule]>*/;
-var19 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_visibility]))(var_aimport) /* n_visibility on <var_aimport:AImport(AStdImport)>*/;
-var20 = ((val* (*)(val*))(var19->class->vft[COLOR_modelbuilder__AVisibility__mvisibility]))(var19) /* mvisibility on <var19:AVisibility>*/;
-var_mvisibility = var20;
-var21 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__protected_visibility]))(self) /* protected_visibility on <self:ModelBuilder>*/;
-var22 = ((short int (*)(val*, val*))(var_mvisibility->class->vft[COLOR_kernel__Object___61d_61d]))(var_mvisibility, var21) /* == on <var_mvisibility:MVisibility>*/;
-if (var22){
-var23 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_visibility]))(var_aimport) /* n_visibility on <var_aimport:AImport(AStdImport)>*/;
 if (varonce) {
-var24 = varonce;
+var96 = varonce;
 } else {
-var25 = "Error: only properties can be protected.";
-var26 = 40;
-var27 = string__NativeString__to_s_with_length(var25, var26);
-var24 = var27;
-varonce = var24;
+var97 = "Error: only properties can be protected.";
+var98 = 40;
+var99 = string__NativeString__to_s_with_length(var97, var98);
+var96 = var99;
+varonce = var96;
+}
+{
+modelbuilder__ModelBuilder__error(self, var93, var96); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
 }
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var23, var24) /* error on <self:ModelBuilder>*/;
 goto RET_LABEL;
 } else {
 }
-var28 = ((short int (*)(val*, val*))(var_sup->class->vft[COLOR_kernel__Object___61d_61d]))(var_sup, var_mmodule) /* == on <var_sup:nullable MModule(MModule)>*/;
-if (var28){
-var29 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_name]))(var_aimport) /* n_name on <var_aimport:AImport(AStdImport)>*/;
-if (varonce30) {
-var31 = varonce30;
+{
+{ /* Inline kernel#Object#== (var_sup,var_mmodule) on <var_sup:nullable MModule(MModule)> */
+var_other54 = var_mmodule;
+{
+{ /* Inline kernel#Object#is_same_instance (var_sup,var_other54) on <var_sup:nullable MModule(MModule)> */
+var105 = var_sup == var_other54;
+var103 = var105;
+goto RET_LABEL104;
+RET_LABEL104:(void)0;
+}
+}
+var101 = var103;
+goto RET_LABEL102;
+RET_LABEL102:(void)0;
+}
+var100 = var101;
+}
+if (var100){
+{
+{ /* Inline parser_nodes#AStdImport#n_name (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var108 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_name].val; /* _n_name on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var108 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 882);
+show_backtrace(1);
+}
+var106 = var108;
+RET_LABEL107:(void)0;
+}
+}
+if (varonce109) {
+var110 = varonce109;
 } else {
-var32 = "Error: Dependency loop in module ";
-var33 = 33;
-var34 = string__NativeString__to_s_with_length(var32, var33);
-var31 = var34;
-varonce30 = var31;
+var111 = "Error: Dependency loop in module ";
+var112 = 33;
+var113 = string__NativeString__to_s_with_length(var111, var112);
+var110 = var113;
+varonce109 = var110;
 }
-if (varonce35) {
-var36 = varonce35;
+if (varonce114) {
+var115 = varonce114;
 } else {
-var37 = ".";
-var38 = 1;
-var39 = string__NativeString__to_s_with_length(var37, var38);
-var36 = var39;
-varonce35 = var36;
+var116 = ".";
+var117 = 1;
+var118 = string__NativeString__to_s_with_length(var116, var117);
+var115 = var118;
+varonce114 = var115;
 }
-var40 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var40 = array_instance Array[Object] */
-var41 = 3;
-var42 = NEW_array__NativeArray(var41, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var42)->values[0] = (val*) var31;
-((struct instance_array__NativeArray*)var42)->values[1] = (val*) var_mmodule;
-((struct instance_array__NativeArray*)var42)->values[2] = (val*) var36;
-((void (*)(val*, val*, long))(var40->class->vft[COLOR_array__Array__with_native]))(var40, var42, var41) /* with_native on <var40:Array[Object]>*/;
+var119 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var119 = array_instance Array[Object] */
+var120 = 3;
+var121 = NEW_array__NativeArray(var120, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var121)->values[0] = (val*) var110;
+((struct instance_array__NativeArray*)var121)->values[1] = (val*) var_mmodule;
+((struct instance_array__NativeArray*)var121)->values[2] = (val*) var115;
+{
+((void (*)(val*, val*, long))(var119->class->vft[COLOR_array__Array__with_native]))(var119, var121, var120) /* with_native on <var119:Array[Object]>*/;
+}
+}
+{
+var122 = ((val* (*)(val*))(var119->class->vft[COLOR_string__Object__to_s]))(var119) /* to_s on <var119:Array[Object]>*/;
+}
+{
+modelbuilder__ModelBuilder__error(self, var106, var122); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
 }
-var43 = ((val* (*)(val*))(var40->class->vft[COLOR_string__Object__to_s]))(var40) /* to_s on <var40:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var29, var43) /* error on <self:ModelBuilder>*/;
 } else {
 }
-var44 = ((val* (*)(val*))(var_sup->class->vft[COLOR_mmodule__MModule__in_importation]))(var_sup) /* in_importation on <var_sup:nullable MModule(MModule)>*/;
-var45 = ((short int (*)(val*, val*))(var44->class->vft[COLOR_poset__POSetElement___60d]))(var44, var_mmodule) /* < on <var44:POSetElement[MModule]>*/;
-if (var45){
-var46 = ((val* (*)(val*))(var_aimport->class->vft[COLOR_parser_nodes__AStdImport__n_name]))(var_aimport) /* n_name on <var_aimport:AImport(AStdImport)>*/;
-if (varonce47) {
-var48 = varonce47;
+{
+{ /* Inline mmodule#MModule#in_importation (var_sup) on <var_sup:nullable MModule(MModule)> */
+var125 = var_sup->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_sup:nullable MModule(MModule)> */
+if (unlikely(var125 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
+show_backtrace(1);
+}
+var123 = var125;
+RET_LABEL124:(void)0;
+}
+}
+{
+var126 = poset__POSetElement___60d(var123, var_mmodule);
+}
+if (var126){
+{
+{ /* Inline parser_nodes#AStdImport#n_name (var_aimport) on <var_aimport:AImport(AStdImport)> */
+var129 = var_aimport->attrs[COLOR_parser_nodes__AStdImport___n_name].val; /* _n_name on <var_aimport:AImport(AStdImport)> */
+if (unlikely(var129 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_name");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 882);
+show_backtrace(1);
+}
+var127 = var129;
+RET_LABEL128:(void)0;
+}
+}
+if (varonce130) {
+var131 = varonce130;
 } else {
-var49 = "Error: Dependency loop between modules ";
-var50 = 39;
-var51 = string__NativeString__to_s_with_length(var49, var50);
-var48 = var51;
-varonce47 = var48;
+var132 = "Error: Dependency loop between modules ";
+var133 = 39;
+var134 = string__NativeString__to_s_with_length(var132, var133);
+var131 = var134;
+varonce130 = var131;
+}
+if (varonce135) {
+var136 = varonce135;
+} else {
+var137 = " and ";
+var138 = 5;
+var139 = string__NativeString__to_s_with_length(var137, var138);
+var136 = var139;
+varonce135 = var136;
+}
+if (varonce140) {
+var141 = varonce140;
+} else {
+var142 = ".";
+var143 = 1;
+var144 = string__NativeString__to_s_with_length(var142, var143);
+var141 = var144;
+varonce140 = var141;
+}
+var145 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var145 = array_instance Array[Object] */
+var146 = 5;
+var147 = NEW_array__NativeArray(var146, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var147)->values[0] = (val*) var131;
+((struct instance_array__NativeArray*)var147)->values[1] = (val*) var_mmodule;
+((struct instance_array__NativeArray*)var147)->values[2] = (val*) var136;
+((struct instance_array__NativeArray*)var147)->values[3] = (val*) var_sup;
+((struct instance_array__NativeArray*)var147)->values[4] = (val*) var141;
+{
+((void (*)(val*, val*, long))(var145->class->vft[COLOR_array__Array__with_native]))(var145, var147, var146) /* with_native on <var145:Array[Object]>*/;
+}
+}
+{
+var148 = ((val* (*)(val*))(var145->class->vft[COLOR_string__Object__to_s]))(var145) /* to_s on <var145:Array[Object]>*/;
+}
+{
+modelbuilder__ModelBuilder__error(self, var127, var148); /* Direct call modelbuilder#ModelBuilder#error on <self:ModelBuilder>*/
 }
-if (varonce52) {
-var53 = varonce52;
-} else {
-var54 = " and ";
-var55 = 5;
-var56 = string__NativeString__to_s_with_length(var54, var55);
-var53 = var56;
-varonce52 = var53;
-}
-if (varonce57) {
-var58 = varonce57;
-} else {
-var59 = ".";
-var60 = 1;
-var61 = string__NativeString__to_s_with_length(var59, var60);
-var58 = var61;
-varonce57 = var58;
-}
-var62 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var62 = array_instance Array[Object] */
-var63 = 5;
-var64 = NEW_array__NativeArray(var63, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var64)->values[0] = (val*) var48;
-((struct instance_array__NativeArray*)var64)->values[1] = (val*) var_mmodule;
-((struct instance_array__NativeArray*)var64)->values[2] = (val*) var53;
-((struct instance_array__NativeArray*)var64)->values[3] = (val*) var_sup;
-((struct instance_array__NativeArray*)var64)->values[4] = (val*) var58;
-((void (*)(val*, val*, long))(var62->class->vft[COLOR_array__Array__with_native]))(var62, var64, var63) /* with_native on <var62:Array[Object]>*/;
-}
-var65 = ((val* (*)(val*))(var62->class->vft[COLOR_string__Object__to_s]))(var62) /* to_s on <var62:Array[Object]>*/;
-((void (*)(val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__error]))(self, var46, var65) /* error on <self:ModelBuilder>*/;
 goto RET_LABEL;
 } else {
 }
-((void (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__set_visibility_for]))(var_mmodule, var_sup, var_mvisibility) /* set_visibility_for on <var_mmodule:MModule>*/;
-CONTINUE_label: (void)0;
-((void (*)(val*))(var6->class->vft[COLOR_abstract_collection__Iterator__next]))(var6) /* next on <var6:Iterator[nullable Object]>*/;
+{
+mmodule__MModule__set_visibility_for(var_mmodule, var_sup, var_mvisibility); /* Direct call mmodule#MModule#set_visibility_for on <var_mmodule:MModule>*/
 }
 BREAK_label: (void)0;
+{
+((void (*)(val*))(var_14->class->vft[COLOR_abstract_collection__Iterator__next]))(var_14) /* next on <var_14:Iterator[AImport]>*/;
+}
+} else {
+goto BREAK_label149;
+}
+}
+BREAK_label149: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_14) on <var_14:Iterator[AImport]> */
+RET_LABEL150:(void)0;
+}
+}
 if (var_stdimport){
-if (varonce66) {
-var67 = varonce66;
+if (varonce151) {
+var152 = varonce151;
 } else {
-var68 = "standard";
-var69 = 8;
-var70 = string__NativeString__to_s_with_length(var68, var69);
-var67 = var70;
-varonce66 = var67;
+var153 = "standard";
+var154 = 8;
+var155 = string__NativeString__to_s_with_length(var153, var154);
+var152 = var155;
+varonce151 = var152;
+}
+var_mod_name156 = var152;
+var157 = NULL;
+{
+var158 = modelbuilder__ModelBuilder__get_mmodule_by_name(self, var_nmodule, var157, var_mod_name156);
 }
-var_mod_name71 = var67;
-var72 = NULL;
-var73 = ((val* (*)(val*, val*, val*, val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__get_mmodule_by_name]))(self, var_nmodule, var72, var_mod_name71) /* get_mmodule_by_name on <self:ModelBuilder>*/;
-var_sup74 = var73;
-var75 = NULL;
-if (var_sup74 == NULL) {
-var76 = 0; /* is null */
+var_sup159 = var158;
+var160 = NULL;
+if (var_sup159 == NULL) {
+var161 = 0; /* is null */
 } else {
-var76 = 1; /* arg is null and recv is not */
+var161 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_sup159,var160) on <var_sup159:nullable MModule> */
+var_other = var160;
+{
+var165 = ((short int (*)(val*, val*))(var_sup159->class->vft[COLOR_kernel__Object___61d_61d]))(var_sup159, var_other) /* == on <var_sup159:nullable MModule(MModule)>*/;
+var164 = var165;
+}
+var166 = !var164;
+var162 = var166;
+goto RET_LABEL163;
+RET_LABEL163:(void)0;
+}
+var161 = var162;
+}
+if (var161){
+{
+array__Array__add(var_imported_modules, var_sup159); /* Direct call array#Array#add on <var_imported_modules:Array[MModule]>*/
+}
+{
+var167 = model_base__Object__public_visibility(self);
+}
+{
+mmodule__MModule__set_visibility_for(var_mmodule, var_sup159, var167); /* Direct call mmodule#MModule#set_visibility_for on <var_mmodule:MModule>*/
 }
-if (var76){
-((void (*)(val*, val*))(var_imported_modules->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_imported_modules, var_sup74) /* add on <var_imported_modules:Array[MModule]>*/;
-var77 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__public_visibility]))(self) /* public_visibility on <self:ModelBuilder>*/;
-((void (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__set_visibility_for]))(var_mmodule, var_sup74, var77) /* set_visibility_for on <var_mmodule:MModule>*/;
 } else {
 }
 } else {
 }
-var78 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-if (varonce79) {
-var80 = varonce79;
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var170 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var170 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var168 = var170;
+RET_LABEL169:(void)0;
+}
+}
+if (varonce171) {
+var172 = varonce171;
 } else {
-var81 = " imports ";
-var82 = 9;
-var83 = string__NativeString__to_s_with_length(var81, var82);
-var80 = var83;
-varonce79 = var80;
+var173 = " imports ";
+var174 = 9;
+var175 = string__NativeString__to_s_with_length(var173, var174);
+var172 = var175;
+varonce171 = var172;
 }
-if (varonce84) {
-var85 = varonce84;
+if (varonce176) {
+var177 = varonce176;
 } else {
-var86 = ", ";
-var87 = 2;
-var88 = string__NativeString__to_s_with_length(var86, var87);
-var85 = var88;
-varonce84 = var85;
+var178 = ", ";
+var179 = 2;
+var180 = string__NativeString__to_s_with_length(var178, var179);
+var177 = var180;
+varonce176 = var177;
+}
+{
+var181 = string__Collection__join(var_imported_modules, var177);
+}
+var182 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var182 = array_instance Array[Object] */
+var183 = 3;
+var184 = NEW_array__NativeArray(var183, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var184)->values[0] = (val*) var_mmodule;
+((struct instance_array__NativeArray*)var184)->values[1] = (val*) var172;
+((struct instance_array__NativeArray*)var184)->values[2] = (val*) var181;
+{
+((void (*)(val*, val*, long))(var182->class->vft[COLOR_array__Array__with_native]))(var182, var184, var183) /* with_native on <var182:Array[Object]>*/;
+}
+}
+{
+var185 = ((val* (*)(val*))(var182->class->vft[COLOR_string__Object__to_s]))(var182) /* to_s on <var182:Array[Object]>*/;
+}
+var186 = 3;
+{
+toolcontext__ToolContext__info(var168, var185, var186); /* Direct call toolcontext#ToolContext#info on <var168:ToolContext>*/
+}
+{
+mmodule__MModule__set_imported_mmodules(var_mmodule, var_imported_modules); /* Direct call mmodule#MModule#set_imported_mmodules on <var_mmodule:MModule>*/
+}
+{
+{ /* Inline mmodule#MModule#in_importation (var_mmodule) on <var_mmodule:MModule> */
+var189 = var_mmodule->attrs[COLOR_mmodule__MModule___in_importation].val; /* _in_importation on <var_mmodule:MModule> */
+if (unlikely(var189 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _in_importation");
+PRINT_ERROR(" (%s:%d)\n", "model/mmodule.nit", 93);
+show_backtrace(1);
+}
+var187 = var189;
+RET_LABEL188:(void)0;
+}
+}
+{
+var190 = poset__POSetElement__direct_greaters(var187);
+}
+var_directs = var190;
+{
+{ /* Inline parser_nodes#AModule#n_imports (var_nmodule) on <var_nmodule:AModule> */
+var193 = var_nmodule->attrs[COLOR_parser_nodes__AModule___n_imports].val; /* _n_imports on <var_nmodule:AModule> */
+if (unlikely(var193 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_imports");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 857);
+show_backtrace(1);
+}
+var191 = var193;
+RET_LABEL192:(void)0;
+}
+}
+var_194 = var191;
+{
+var195 = parser_nodes__ANodes__iterator(var_194);
+}
+var_196 = var195;
+for(;;) {
+{
+var197 = ((short int (*)(val*))(var_196->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_196) /* is_ok on <var_196:Iterator[AImport]>*/;
+}
+if (var197){
+{
+var198 = ((val* (*)(val*))(var_196->class->vft[COLOR_abstract_collection__Iterator__item]))(var_196) /* item on <var_196:Iterator[AImport]>*/;
+}
+var_nim = var198;
+/* <var_nim:AImport> isa AStdImport */
+cltype200 = type_parser_nodes__AStdImport.color;
+idtype201 = type_parser_nodes__AStdImport.id;
+if(cltype200 >= var_nim->type->table_size) {
+var199 = 0;
+} else {
+var199 = var_nim->type->type_table[cltype200] == idtype201;
+}
+var202 = !var199;
+if (var202){
+goto BREAK_label203;
+} else {
+}
+{
+{ /* Inline modelbuilder#AStdImport#mmodule (var_nim) on <var_nim:AImport(AStdImport)> */
+var206 = var_nim->attrs[COLOR_modelbuilder__AStdImport___mmodule].val; /* _mmodule on <var_nim:AImport(AStdImport)> */
+var204 = var206;
+RET_LABEL205:(void)0;
+}
+}
+var_im = var204;
+var207 = NULL;
+if (var_im == NULL) {
+var208 = 1; /* is null */
+} else {
+var208 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_im,var207) on <var_im:nullable MModule> */
+var_other54 = var207;
+{
+{ /* Inline kernel#Object#is_same_instance (var_im,var_other54) on <var_im:nullable MModule(MModule)> */
+var213 = var_im == var_other54;
+var211 = var213;
+goto RET_LABEL212;
+RET_LABEL212:(void)0;
+}
+}
+var209 = var211;
+goto RET_LABEL210;
+RET_LABEL210:(void)0;
+}
+var208 = var209;
+}
+if (var208){
+goto BREAK_label203;
+} else {
+}
+{
+var214 = ((short int (*)(val*, val*))(var_directs->class->vft[COLOR_abstract_collection__Collection__has]))(var_directs, var_im) /* has on <var_directs:Collection[MModule]>*/;
+}
+if (var214){
+goto BREAK_label203;
+} else {
+}
+BREAK_label203: (void)0;
+{
+((void (*)(val*))(var_196->class->vft[COLOR_abstract_collection__Iterator__next]))(var_196) /* next on <var_196:Iterator[AImport]>*/;
+}
+} else {
+goto BREAK_label215;
+}
+}
+BREAK_label215: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_196) on <var_196:Iterator[AImport]> */
+RET_LABEL216:(void)0;
 }
-var89 = ((val* (*)(val*, val*))(var_imported_modules->class->vft[COLOR_string__Collection__join]))(var_imported_modules, var85) /* join on <var_imported_modules:Array[MModule]>*/;
-var90 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var90 = array_instance Array[Object] */
-var91 = 3;
-var92 = NEW_array__NativeArray(var91, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var92)->values[0] = (val*) var_mmodule;
-((struct instance_array__NativeArray*)var92)->values[1] = (val*) var80;
-((struct instance_array__NativeArray*)var92)->values[2] = (val*) var89;
-((void (*)(val*, val*, long))(var90->class->vft[COLOR_array__Array__with_native]))(var90, var92, var91) /* with_native on <var90:Array[Object]>*/;
 }
-var93 = ((val* (*)(val*))(var90->class->vft[COLOR_string__Object__to_s]))(var90) /* to_s on <var90:Array[Object]>*/;
-var94 = 3;
-((void (*)(val*, val*, long))(var78->class->vft[COLOR_toolcontext__ToolContext__info]))(var78, var93, var94) /* info on <var78:ToolContext>*/;
-((void (*)(val*, val*))(var_mmodule->class->vft[COLOR_mmodule__MModule__set_imported_mmodules]))(var_mmodule, var_imported_modules) /* set_imported_mmodules on <var_mmodule:MModule>*/;
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#build_module_importation for (self: Object, AModule) */
 void VIRTUAL_modelbuilder__ModelBuilder__build_module_importation(val* self, val* p0) {
-modelbuilder__ModelBuilder__build_module_importation(self, p0);
+modelbuilder__ModelBuilder__build_module_importation(self, p0); /* Direct call modelbuilder#ModelBuilder#build_module_importation on <self:Object(ModelBuilder)>*/
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#nmodules for (self: ModelBuilder): Array[AModule] */
 val* modelbuilder__ModelBuilder__nmodules(val* self) {
 val* var /* : Array[AModule] */;
 val* var1 /* : Array[AModule] */;
-var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dnmodules].val; /* @nmodules on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @nmodules");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 579);
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___nmodules].val; /* _nmodules on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _nmodules");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 725);
 show_backtrace(1);
 }
 var = var1;
@@ -3647,29 +7596,29 @@ return var;
 val* VIRTUAL_modelbuilder__ModelBuilder__nmodules(val* self) {
 val* var /* : Array[AModule] */;
 val* var1 /* : Array[AModule] */;
-var1 = modelbuilder__ModelBuilder__nmodules(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : Array[AModule] */;
+{ /* Inline modelbuilder#ModelBuilder#nmodules (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___nmodules].val; /* _nmodules on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _nmodules");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 725);
+show_backtrace(1);
 }
-/* method modelbuilder#ModelBuilder#nmodules= for (self: ModelBuilder, Array[AModule]) */
-void modelbuilder__ModelBuilder__nmodules_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dnmodules].val = p0; /* @nmodules on <self:ModelBuilder> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ModelBuilder#nmodules= for (self: Object, Array[AModule]) */
-void VIRTUAL_modelbuilder__ModelBuilder__nmodules_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__nmodules_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#ModelBuilder#mmodule2nmodule for (self: ModelBuilder): HashMap[MModule, AModule] */
 val* modelbuilder__ModelBuilder__mmodule2nmodule(val* self) {
 val* var /* : HashMap[MModule, AModule] */;
 val* var1 /* : HashMap[MModule, AModule] */;
-var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___64dmmodule2nmodule].val; /* @mmodule2nmodule on <self:ModelBuilder> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mmodule2nmodule");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 582);
+var1 = self->attrs[COLOR_modelbuilder__ModelBuilder___mmodule2nmodule].val; /* _mmodule2nmodule on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule2nmodule");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 728);
 show_backtrace(1);
 }
 var = var1;
@@ -3680,61 +7629,131 @@ return var;
 val* VIRTUAL_modelbuilder__ModelBuilder__mmodule2nmodule(val* self) {
 val* var /* : HashMap[MModule, AModule] */;
 val* var1 /* : HashMap[MModule, AModule] */;
-var1 = modelbuilder__ModelBuilder__mmodule2nmodule(self);
-var = var1;
-RET_LABEL:;
-return var;
+val* var3 /* : HashMap[MModule, AModule] */;
+{ /* Inline modelbuilder#ModelBuilder#mmodule2nmodule (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_modelbuilder__ModelBuilder___mmodule2nmodule].val; /* _mmodule2nmodule on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule2nmodule");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 728);
+show_backtrace(1);
 }
-/* method modelbuilder#ModelBuilder#mmodule2nmodule= for (self: ModelBuilder, HashMap[MModule, AModule]) */
-void modelbuilder__ModelBuilder__mmodule2nmodule_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModelBuilder___64dmmodule2nmodule].val = p0; /* @mmodule2nmodule on <self:ModelBuilder> */
-RET_LABEL:;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ModelBuilder#mmodule2nmodule= for (self: Object, HashMap[MModule, AModule]) */
-void VIRTUAL_modelbuilder__ModelBuilder__mmodule2nmodule_61d(val* self, val* p0) {
-modelbuilder__ModelBuilder__mmodule2nmodule_61d(self, p0);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#ModelBuilder#error for (self: ModelBuilder, ANode, String) */
 void modelbuilder__ModelBuilder__error(val* self, val* p0, val* p1) {
 val* var_n /* var n: ANode */;
 val* var_text /* var text: String */;
 val* var /* : ToolContext */;
-val* var1 /* : Location */;
+val* var2 /* : ToolContext */;
+val* var3 /* : Location */;
 var_n = p0;
 var_text = p1;
-var = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var1 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
-((void (*)(val*, val*, val*))(var->class->vft[COLOR_toolcontext__ToolContext__error]))(var, var1, var_text) /* error on <var:ToolContext>*/;
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var2 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
+}
+{
+toolcontext__ToolContext__error(var, var3, var_text); /* Direct call toolcontext#ToolContext#error on <var:ToolContext>*/
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModelBuilder#error for (self: Object, ANode, String) */
 void VIRTUAL_modelbuilder__ModelBuilder__error(val* self, val* p0, val* p1) {
-modelbuilder__ModelBuilder__error(self, p0, p1);
+modelbuilder__ModelBuilder__error(self, p0, p1); /* Direct call modelbuilder#ModelBuilder#error on <self:Object(ModelBuilder)>*/
 RET_LABEL:;
 }
-/* method modelbuilder#ModelBuilder#warning for (self: ModelBuilder, ANode, String) */
-void modelbuilder__ModelBuilder__warning(val* self, val* p0, val* p1) {
+/* method modelbuilder#ModelBuilder#warning for (self: ModelBuilder, ANode, String, String) */
+void modelbuilder__ModelBuilder__warning(val* self, val* p0, val* p1, val* p2) {
 val* var_n /* var n: ANode */;
+val* var_tag /* var tag: String */;
 val* var_text /* var text: String */;
 val* var /* : ToolContext */;
-val* var1 /* : Location */;
+val* var2 /* : ToolContext */;
+val* var3 /* : Location */;
 var_n = p0;
-var_text = p1;
-var = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var1 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
-((void (*)(val*, val*, val*))(var->class->vft[COLOR_toolcontext__ToolContext__warning]))(var, var1, var_text) /* warning on <var:ToolContext>*/;
+var_tag = p1;
+var_text = p2;
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var2 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
+}
+{
+toolcontext__ToolContext__warning(var, var3, var_tag, var_text); /* Direct call toolcontext#ToolContext#warning on <var:ToolContext>*/
+}
+RET_LABEL:;
+}
+/* method modelbuilder#ModelBuilder#warning for (self: Object, ANode, String, String) */
+void VIRTUAL_modelbuilder__ModelBuilder__warning(val* self, val* p0, val* p1, val* p2) {
+modelbuilder__ModelBuilder__warning(self, p0, p1, p2); /* Direct call modelbuilder#ModelBuilder#warning on <self:Object(ModelBuilder)>*/
+RET_LABEL:;
+}
+/* method modelbuilder#ModelBuilder#advice for (self: ModelBuilder, ANode, String, String) */
+void modelbuilder__ModelBuilder__advice(val* self, val* p0, val* p1, val* p2) {
+val* var_n /* var n: ANode */;
+val* var_tag /* var tag: String */;
+val* var_text /* var text: String */;
+val* var /* : ToolContext */;
+val* var2 /* : ToolContext */;
+val* var3 /* : Location */;
+var_n = p0;
+var_tag = p1;
+var_text = p2;
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var2 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
+}
+{
+toolcontext__ToolContext__advice(var, var3, var_tag, var_text); /* Direct call toolcontext#ToolContext#advice on <var:ToolContext>*/
+}
 RET_LABEL:;
 }
-/* method modelbuilder#ModelBuilder#warning for (self: Object, ANode, String) */
-void VIRTUAL_modelbuilder__ModelBuilder__warning(val* self, val* p0, val* p1) {
-modelbuilder__ModelBuilder__warning(self, p0, p1);
+/* method modelbuilder#ModelBuilder#advice for (self: Object, ANode, String, String) */
+void VIRTUAL_modelbuilder__ModelBuilder__advice(val* self, val* p0, val* p1, val* p2) {
+modelbuilder__ModelBuilder__advice(self, p0, p1, p2); /* Direct call modelbuilder#ModelBuilder#advice on <self:Object(ModelBuilder)>*/
 RET_LABEL:;
 }
-/* method modelbuilder#ModelBuilder#force_get_primitive_method for (self: ModelBuilder, ANode, String, MClass, MModule): MMethod */
+/* method modelbuilder#ModelBuilder#force_get_primitive_method for (self: ModelBuilder, nullable ANode, String, MClass, MModule): MMethod */
 val* modelbuilder__ModelBuilder__force_get_primitive_method(val* self, val* p0, val* p1, val* p2, val* p3) {
 val* var /* : MMethod */;
-val* var_n /* var n: ANode */;
+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 */;
@@ -3742,32 +7761,48 @@ val* var1 /* : nullable MMethod */;
 val* var_res /* var res: nullable MMethod */;
 val* var2 /* : null */;
 short int var3 /* : Bool */;
-val* var4 /* : ToolContext */;
-val* var5 /* : Location */;
-static val* varonce;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : String */;
-static val* varonce10;
-val* var11 /* : String */;
-char* var12 /* : NativeString */;
-long var13 /* : Int */;
-val* var14 /* : String */;
-static val* varonce15;
-val* var16 /* : String */;
-char* var17 /* : NativeString */;
-long var18 /* : Int */;
-val* var19 /* : String */;
-val* var20 /* : Array[Object] */;
-long var21 /* : Int */;
-val* var22 /* : NativeArray[Object] */;
-val* var23 /* : String */;
+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 */;
+short int var17 /* : Bool */;
+val* var18 /* : Location */;
+val* var19 /* : ToolContext */;
+val* var21 /* : ToolContext */;
+static val* varonce;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : FlatString */;
+static val* varonce26;
+val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : FlatString */;
+static val* varonce31;
+val* var32 /* : String */;
+char* var33 /* : NativeString */;
+long var34 /* : Int */;
+val* var35 /* : FlatString */;
+val* var36 /* : Array[Object] */;
+long var37 /* : Int */;
+val* var38 /* : NativeArray[Object] */;
+val* var39 /* : String */;
 var_n = p0;
 var_name = p1;
 var_recv = p2;
 var_mmodule = p3;
-var1 = ((val* (*)(val*, val*, val*))(var_mmodule->class->vft[COLOR_model__MModule__try_get_primitive_method]))(var_mmodule, var_name, var_recv) /* try_get_primitive_method on <var_mmodule:MModule>*/;
+{
+var1 = model__MModule__try_get_primitive_method(var_mmodule, var_name, var_recv);
+}
 var_res = var1;
 var2 = NULL;
 if (var_res == NULL) {
@@ -3775,51 +7810,113 @@ var3 = 1; /* is null */
 } else {
 var3 = 0; /* arg is null but recv is not */
 }
+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;
+}
+}
+var4 = var6;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
+}
+var3 = var4;
+}
 if (var3){
-var4 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(self) /* toolcontext on <self:ModelBuilder>*/;
-var5 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:ANode>*/;
+var9 = NULL;
+var_l = var9;
+var10 = NULL;
+if (var_n == NULL) {
+var11 = 0; /* is null */
+} else {
+var11 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_n,var10) on <var_n:nullable ANode> */
+var_other14 = var10;
+{
+var16 = ((short int (*)(val*, val*))(var_n->class->vft[COLOR_kernel__Object___61d_61d]))(var_n, var_other14) /* == on <var_n:nullable ANode(ANode)>*/;
+var15 = var16;
+}
+var17 = !var15;
+var12 = var17;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
+}
+var11 = var12;
+}
+if (var11){
+{
+var18 = ((val* (*)(val*))(var_n->class->vft[COLOR_parser_nodes__ANode__hot_location]))(var_n) /* hot_location on <var_n:nullable ANode(ANode)>*/;
+}
+var_l = var18;
+} else {
+}
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var21 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var21 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var19 = var21;
+RET_LABEL20:(void)0;
+}
+}
 if (varonce) {
-var6 = varonce;
+var22 = varonce;
 } else {
-var7 = "Fatal Error: ";
-var8 = 13;
-var9 = string__NativeString__to_s_with_length(var7, var8);
-var6 = var9;
-varonce = var6;
+var23 = "Fatal Error: ";
+var24 = 13;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce = var22;
 }
-if (varonce10) {
-var11 = varonce10;
+if (varonce26) {
+var27 = varonce26;
 } else {
-var12 = " must have a property named ";
-var13 = 28;
-var14 = string__NativeString__to_s_with_length(var12, var13);
-var11 = var14;
-varonce10 = var11;
+var28 = " must have a property named ";
+var29 = 28;
+var30 = string__NativeString__to_s_with_length(var28, var29);
+var27 = var30;
+varonce26 = var27;
 }
-if (varonce15) {
-var16 = varonce15;
+if (varonce31) {
+var32 = varonce31;
 } else {
-var17 = ".";
-var18 = 1;
-var19 = string__NativeString__to_s_with_length(var17, var18);
-var16 = var19;
-varonce15 = var16;
+var33 = ".";
+var34 = 1;
+var35 = string__NativeString__to_s_with_length(var33, var34);
+var32 = var35;
+varonce31 = var32;
+}
+var36 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var36 = array_instance Array[Object] */
+var37 = 5;
+var38 = NEW_array__NativeArray(var37, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var38)->values[0] = (val*) var22;
+((struct instance_array__NativeArray*)var38)->values[1] = (val*) var_recv;
+((struct instance_array__NativeArray*)var38)->values[2] = (val*) var27;
+((struct instance_array__NativeArray*)var38)->values[3] = (val*) var_name;
+((struct instance_array__NativeArray*)var38)->values[4] = (val*) var32;
+{
+((void (*)(val*, val*, long))(var36->class->vft[COLOR_array__Array__with_native]))(var36, var38, var37) /* with_native on <var36:Array[Object]>*/;
+}
+}
+{
+var39 = ((val* (*)(val*))(var36->class->vft[COLOR_string__Object__to_s]))(var36) /* to_s on <var36:Array[Object]>*/;
 }
-var20 = NEW_array__Array(&type_array__Arraykernel__Object);
-{ /* var20 = array_instance Array[Object] */
-var21 = 5;
-var22 = NEW_array__NativeArray(var21, &type_array__NativeArraykernel__Object);
-((struct instance_array__NativeArray*)var22)->values[0] = (val*) var6;
-((struct instance_array__NativeArray*)var22)->values[1] = (val*) var_recv;
-((struct instance_array__NativeArray*)var22)->values[2] = (val*) var11;
-((struct instance_array__NativeArray*)var22)->values[3] = (val*) var_name;
-((struct instance_array__NativeArray*)var22)->values[4] = (val*) var16;
-((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[Object]>*/;
+{
+toolcontext__ToolContext__fatal_error(var19, var_l, var39); /* Direct call toolcontext#ToolContext#fatal_error on <var19:ToolContext>*/
 }
-var23 = ((val* (*)(val*))(var20->class->vft[COLOR_string__Object__to_s]))(var20) /* to_s on <var20:Array[Object]>*/;
-((void (*)(val*, val*, val*))(var4->class->vft[COLOR_toolcontext__ToolContext__fatal_error]))(var4, var5, var23) /* fatal_error on <var4:ToolContext>*/;
-fprintf(stderr, "Runtime error: %s", "Aborted");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 606);
+PRINT_ERROR("Runtime error: %s", "Aborted");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 761);
 show_backtrace(1);
 } else {
 }
@@ -3828,7 +7925,7 @@ goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method modelbuilder#ModelBuilder#force_get_primitive_method for (self: Object, ANode, String, MClass, MModule): MMethod */
+/* method modelbuilder#ModelBuilder#force_get_primitive_method for (self: Object, nullable ANode, String, MClass, MModule): MMethod */
 val* VIRTUAL_modelbuilder__ModelBuilder__force_get_primitive_method(val* self, val* p0, val* p1, val* p2, val* p3) {
 val* var /* : MMethod */;
 val* var1 /* : MMethod */;
@@ -3841,10 +7938,10 @@ return var;
 val* modelbuilder__ModulePath__name(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
-var1 = self->attrs[COLOR_modelbuilder__ModulePath___64dname].val; /* @name on <self:ModulePath> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @name");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 614);
+var1 = self->attrs[COLOR_modelbuilder__ModulePath___name].val; /* _name on <self:ModulePath> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 769);
 show_backtrace(1);
 }
 var = var1;
@@ -3855,29 +7952,42 @@ return var;
 val* VIRTUAL_modelbuilder__ModulePath__name(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
-var1 = modelbuilder__ModulePath__name(self);
+val* var3 /* : String */;
+{ /* Inline modelbuilder#ModulePath#name (self) on <self:Object(ModulePath)> */
+var3 = self->attrs[COLOR_modelbuilder__ModulePath___name].val; /* _name on <self:Object(ModulePath)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 769);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ModulePath#name= for (self: ModulePath, String) */
 void modelbuilder__ModulePath__name_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModulePath___64dname].val = p0; /* @name on <self:ModulePath> */
+self->attrs[COLOR_modelbuilder__ModulePath___name].val = p0; /* _name on <self:ModulePath> */
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#name= for (self: Object, String) */
 void VIRTUAL_modelbuilder__ModulePath__name_61d(val* self, val* p0) {
-modelbuilder__ModulePath__name_61d(self, p0);
+{ /* Inline modelbuilder#ModulePath#name= (self,p0) on <self:Object(ModulePath)> */
+self->attrs[COLOR_modelbuilder__ModulePath___name].val = p0; /* _name on <self:Object(ModulePath)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#filepath for (self: ModulePath): String */
 val* modelbuilder__ModulePath__filepath(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
-var1 = self->attrs[COLOR_modelbuilder__ModulePath___64dfilepath].val; /* @filepath on <self:ModulePath> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @filepath");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 618);
+var1 = self->attrs[COLOR_modelbuilder__ModulePath___filepath].val; /* _filepath on <self:ModulePath> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _filepath");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 773);
 show_backtrace(1);
 }
 var = var1;
@@ -3888,29 +7998,42 @@ return var;
 val* VIRTUAL_modelbuilder__ModulePath__filepath(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
-var1 = modelbuilder__ModulePath__filepath(self);
+val* var3 /* : String */;
+{ /* Inline modelbuilder#ModulePath#filepath (self) on <self:Object(ModulePath)> */
+var3 = self->attrs[COLOR_modelbuilder__ModulePath___filepath].val; /* _filepath on <self:Object(ModulePath)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _filepath");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 773);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ModulePath#filepath= for (self: ModulePath, String) */
 void modelbuilder__ModulePath__filepath_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModulePath___64dfilepath].val = p0; /* @filepath on <self:ModulePath> */
+self->attrs[COLOR_modelbuilder__ModulePath___filepath].val = p0; /* _filepath on <self:ModulePath> */
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#filepath= for (self: Object, String) */
 void VIRTUAL_modelbuilder__ModulePath__filepath_61d(val* self, val* p0) {
-modelbuilder__ModulePath__filepath_61d(self, p0);
+{ /* Inline modelbuilder#ModulePath#filepath= (self,p0) on <self:Object(ModulePath)> */
+self->attrs[COLOR_modelbuilder__ModulePath___filepath].val = p0; /* _filepath on <self:Object(ModulePath)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#mgroup for (self: ModulePath): MGroup */
 val* modelbuilder__ModulePath__mgroup(val* self) {
 val* var /* : MGroup */;
 val* var1 /* : MGroup */;
-var1 = self->attrs[COLOR_modelbuilder__ModulePath___64dmgroup].val; /* @mgroup on <self:ModulePath> */
-if (var1 == NULL) {
-fprintf(stderr, "Runtime error: %s", "Uninitialized attribute @mgroup");
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 621);
+var1 = self->attrs[COLOR_modelbuilder__ModulePath___mgroup].val; /* _mgroup on <self:ModulePath> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroup");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 776);
 show_backtrace(1);
 }
 var = var1;
@@ -3921,26 +8044,39 @@ return var;
 val* VIRTUAL_modelbuilder__ModulePath__mgroup(val* self) {
 val* var /* : MGroup */;
 val* var1 /* : MGroup */;
-var1 = modelbuilder__ModulePath__mgroup(self);
+val* var3 /* : MGroup */;
+{ /* Inline modelbuilder#ModulePath#mgroup (self) on <self:Object(ModulePath)> */
+var3 = self->attrs[COLOR_modelbuilder__ModulePath___mgroup].val; /* _mgroup on <self:Object(ModulePath)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mgroup");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 776);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ModulePath#mgroup= for (self: ModulePath, MGroup) */
 void modelbuilder__ModulePath__mgroup_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModulePath___64dmgroup].val = p0; /* @mgroup on <self:ModulePath> */
+self->attrs[COLOR_modelbuilder__ModulePath___mgroup].val = p0; /* _mgroup on <self:ModulePath> */
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#mgroup= for (self: Object, MGroup) */
 void VIRTUAL_modelbuilder__ModulePath__mgroup_61d(val* self, val* p0) {
-modelbuilder__ModulePath__mgroup_61d(self, p0);
+{ /* Inline modelbuilder#ModulePath#mgroup= (self,p0) on <self:Object(ModulePath)> */
+self->attrs[COLOR_modelbuilder__ModulePath___mgroup].val = p0; /* _mgroup on <self:Object(ModulePath)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#mmodule for (self: ModulePath): nullable MModule */
 val* modelbuilder__ModulePath__mmodule(val* self) {
 val* var /* : nullable MModule */;
 val* var1 /* : nullable MModule */;
-var1 = self->attrs[COLOR_modelbuilder__ModulePath___64dmmodule].val; /* @mmodule on <self:ModulePath> */
+var1 = self->attrs[COLOR_modelbuilder__ModulePath___mmodule].val; /* _mmodule on <self:ModulePath> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -3949,26 +8085,46 @@ return var;
 val* VIRTUAL_modelbuilder__ModulePath__mmodule(val* self) {
 val* var /* : nullable MModule */;
 val* var1 /* : nullable MModule */;
-var1 = modelbuilder__ModulePath__mmodule(self);
+val* var3 /* : nullable MModule */;
+{ /* Inline modelbuilder#ModulePath#mmodule (self) on <self:Object(ModulePath)> */
+var3 = self->attrs[COLOR_modelbuilder__ModulePath___mmodule].val; /* _mmodule on <self:Object(ModulePath)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#ModulePath#mmodule= for (self: ModulePath, nullable MModule) */
 void modelbuilder__ModulePath__mmodule_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__ModulePath___64dmmodule].val = p0; /* @mmodule on <self:ModulePath> */
+self->attrs[COLOR_modelbuilder__ModulePath___mmodule].val = p0; /* _mmodule on <self:ModulePath> */
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#mmodule= for (self: Object, nullable MModule) */
 void VIRTUAL_modelbuilder__ModulePath__mmodule_61d(val* self, val* p0) {
-modelbuilder__ModulePath__mmodule_61d(self, p0);
+{ /* Inline modelbuilder#ModulePath#mmodule= (self,p0) on <self:Object(ModulePath)> */
+self->attrs[COLOR_modelbuilder__ModulePath___mmodule].val = p0; /* _mmodule on <self:Object(ModulePath)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#ModulePath#to_s for (self: ModulePath): String */
 val* modelbuilder__ModulePath__to_s(val* self) {
 val* var /* : String */;
 val* var1 /* : String */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_modelbuilder__ModulePath__filepath]))(self) /* filepath on <self:ModulePath>*/;
+val* var3 /* : String */;
+{
+{ /* Inline modelbuilder#ModulePath#filepath (self) on <self:ModulePath> */
+var3 = self->attrs[COLOR_modelbuilder__ModulePath___filepath].val; /* _filepath on <self:ModulePath> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _filepath");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 773);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -3983,23 +8139,61 @@ var = var1;
 RET_LABEL:;
 return var;
 }
-/* method modelbuilder#ModulePath#init for (self: ModulePath, String, String, MGroup) */
-void modelbuilder__ModulePath__init(val* self, val* p0, val* p1, val* p2) {
-self->attrs[COLOR_modelbuilder__ModulePath___64dname].val = p0; /* @name on <self:ModulePath> */
-self->attrs[COLOR_modelbuilder__ModulePath___64dfilepath].val = p1; /* @filepath on <self:ModulePath> */
-self->attrs[COLOR_modelbuilder__ModulePath___64dmgroup].val = p2; /* @mgroup on <self:ModulePath> */
+/* method modelbuilder#ModulePath#init for (self: ModulePath) */
+void modelbuilder__ModulePath__init(val* self) {
+{
+((void (*)(val*))(self->class->vft[COLOR_modelbuilder__ModulePath__init]))(self) /* init on <self:ModulePath>*/;
+}
+RET_LABEL:;
+}
+/* method modelbuilder#ModulePath#init for (self: Object) */
+void VIRTUAL_modelbuilder__ModulePath__init(val* self) {
+{ /* Inline modelbuilder#ModulePath#init (self) on <self:Object(ModulePath)> */
+{
+((void (*)(val*))(self->class->vft[COLOR_modelbuilder__ModulePath__init]))(self) /* init on <self:Object(ModulePath)>*/;
+}
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method modelbuilder#MGroup#module_paths for (self: MGroup): Array[ModulePath] */
+val* modelbuilder__MGroup__module_paths(val* self) {
+val* var /* : Array[ModulePath] */;
+val* var1 /* : Array[ModulePath] */;
+var1 = self->attrs[COLOR_modelbuilder__MGroup___module_paths].val; /* _module_paths on <self:MGroup> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _module_paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 786);
+show_backtrace(1);
+}
+var = var1;
 RET_LABEL:;
+return var;
+}
+/* method modelbuilder#MGroup#module_paths for (self: Object): Array[ModulePath] */
+val* VIRTUAL_modelbuilder__MGroup__module_paths(val* self) {
+val* var /* : Array[ModulePath] */;
+val* var1 /* : Array[ModulePath] */;
+val* var3 /* : Array[ModulePath] */;
+{ /* Inline modelbuilder#MGroup#module_paths (self) on <self:Object(MGroup)> */
+var3 = self->attrs[COLOR_modelbuilder__MGroup___module_paths].val; /* _module_paths on <self:Object(MGroup)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _module_paths");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 786);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-/* method modelbuilder#ModulePath#init for (self: Object, String, String, MGroup) */
-void VIRTUAL_modelbuilder__ModulePath__init(val* self, val* p0, val* p1, val* p2) {
-modelbuilder__ModulePath__init(self, p0, p1, p2);
+var = var1;
 RET_LABEL:;
+return var;
 }
 /* method modelbuilder#AStdImport#mmodule for (self: AStdImport): nullable MModule */
 val* modelbuilder__AStdImport__mmodule(val* self) {
 val* var /* : nullable MModule */;
 val* var1 /* : nullable MModule */;
-var1 = self->attrs[COLOR_modelbuilder__AStdImport___64dmmodule].val; /* @mmodule on <self:AStdImport> */
+var1 = self->attrs[COLOR_modelbuilder__AStdImport___mmodule].val; /* _mmodule on <self:AStdImport> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -4008,26 +8202,34 @@ return var;
 val* VIRTUAL_modelbuilder__AStdImport__mmodule(val* self) {
 val* var /* : nullable MModule */;
 val* var1 /* : nullable MModule */;
-var1 = modelbuilder__AStdImport__mmodule(self);
+val* var3 /* : nullable MModule */;
+{ /* Inline modelbuilder#AStdImport#mmodule (self) on <self:Object(AStdImport)> */
+var3 = self->attrs[COLOR_modelbuilder__AStdImport___mmodule].val; /* _mmodule on <self:Object(AStdImport)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#AStdImport#mmodule= for (self: AStdImport, nullable MModule) */
 void modelbuilder__AStdImport__mmodule_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__AStdImport___64dmmodule].val = p0; /* @mmodule on <self:AStdImport> */
+self->attrs[COLOR_modelbuilder__AStdImport___mmodule].val = p0; /* _mmodule on <self:AStdImport> */
 RET_LABEL:;
 }
 /* method modelbuilder#AStdImport#mmodule= for (self: Object, nullable MModule) */
 void VIRTUAL_modelbuilder__AStdImport__mmodule_61d(val* self, val* p0) {
-modelbuilder__AStdImport__mmodule_61d(self, p0);
+{ /* Inline modelbuilder#AStdImport#mmodule= (self,p0) on <self:Object(AStdImport)> */
+self->attrs[COLOR_modelbuilder__AStdImport___mmodule].val = p0; /* _mmodule on <self:Object(AStdImport)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#AModule#mmodule for (self: AModule): nullable MModule */
 val* modelbuilder__AModule__mmodule(val* self) {
 val* var /* : nullable MModule */;
 val* var1 /* : nullable MModule */;
-var1 = self->attrs[COLOR_modelbuilder__AModule___64dmmodule].val; /* @mmodule on <self:AModule> */
+var1 = self->attrs[COLOR_modelbuilder__AModule___mmodule].val; /* _mmodule on <self:AModule> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -4036,26 +8238,34 @@ return var;
 val* VIRTUAL_modelbuilder__AModule__mmodule(val* self) {
 val* var /* : nullable MModule */;
 val* var1 /* : nullable MModule */;
-var1 = modelbuilder__AModule__mmodule(self);
+val* var3 /* : nullable MModule */;
+{ /* Inline modelbuilder#AModule#mmodule (self) on <self:Object(AModule)> */
+var3 = self->attrs[COLOR_modelbuilder__AModule___mmodule].val; /* _mmodule on <self:Object(AModule)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#AModule#mmodule= for (self: AModule, nullable MModule) */
 void modelbuilder__AModule__mmodule_61d(val* self, val* p0) {
-self->attrs[COLOR_modelbuilder__AModule___64dmmodule].val = p0; /* @mmodule on <self:AModule> */
+self->attrs[COLOR_modelbuilder__AModule___mmodule].val = p0; /* _mmodule on <self:AModule> */
 RET_LABEL:;
 }
 /* method modelbuilder#AModule#mmodule= for (self: Object, nullable MModule) */
 void VIRTUAL_modelbuilder__AModule__mmodule_61d(val* self, val* p0) {
-modelbuilder__AModule__mmodule_61d(self, p0);
+{ /* Inline modelbuilder#AModule#mmodule= (self,p0) on <self:Object(AModule)> */
+self->attrs[COLOR_modelbuilder__AModule___mmodule].val = p0; /* _mmodule on <self:Object(AModule)> */
+RET_LABEL1:(void)0;
+}
 RET_LABEL:;
 }
 /* method modelbuilder#AModule#is_importation_done for (self: AModule): Bool */
 short int modelbuilder__AModule__is_importation_done(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = self->attrs[COLOR_modelbuilder__AModule___64dis_importation_done].s; /* @is_importation_done on <self:AModule> */
+var1 = self->attrs[COLOR_modelbuilder__AModule___is_importation_done].s; /* _is_importation_done on <self:AModule> */
 var = var1;
 RET_LABEL:;
 return var;
@@ -4064,46 +8274,36 @@ return var;
 short int VIRTUAL_modelbuilder__AModule__is_importation_done(val* self) {
 short int var /* : Bool */;
 short int var1 /* : Bool */;
-var1 = modelbuilder__AModule__is_importation_done(self);
+short int var3 /* : Bool */;
+{ /* Inline modelbuilder#AModule#is_importation_done (self) on <self:Object(AModule)> */
+var3 = self->attrs[COLOR_modelbuilder__AModule___is_importation_done].s; /* _is_importation_done on <self:Object(AModule)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
 var = var1;
 RET_LABEL:;
 return var;
 }
 /* method modelbuilder#AModule#is_importation_done= for (self: AModule, Bool) */
 void modelbuilder__AModule__is_importation_done_61d(val* self, short int p0) {
-self->attrs[COLOR_modelbuilder__AModule___64dis_importation_done].s = p0; /* @is_importation_done on <self:AModule> */
+self->attrs[COLOR_modelbuilder__AModule___is_importation_done].s = p0; /* _is_importation_done on <self:AModule> */
 RET_LABEL:;
 }
 /* method modelbuilder#AModule#is_importation_done= for (self: Object, Bool) */
 void VIRTUAL_modelbuilder__AModule__is_importation_done_61d(val* self, short int p0) {
-modelbuilder__AModule__is_importation_done_61d(self, p0);
-RET_LABEL:;
-}
-/* method modelbuilder#AVisibility#mvisibility for (self: AVisibility): MVisibility */
-val* modelbuilder__AVisibility__mvisibility(val* self) {
-val* var /* : MVisibility */;
-const char* var_class_name;
-var_class_name = self == NULL ? "null" : self->type->name;
-fprintf(stderr, "Runtime error: Abstract method `%s` called on `%s`", "mvisibility", var_class_name);
-fprintf(stderr, " (%s:%d)\n", "src/modelbuilder.nit", 644);
-show_backtrace(1);
-RET_LABEL:;
-return var;
+{ /* Inline modelbuilder#AModule#is_importation_done= (self,p0) on <self:Object(AModule)> */
+self->attrs[COLOR_modelbuilder__AModule___is_importation_done].s = p0; /* _is_importation_done on <self:Object(AModule)> */
+RET_LABEL1:(void)0;
 }
-/* method modelbuilder#AVisibility#mvisibility for (self: Object): MVisibility */
-val* VIRTUAL_modelbuilder__AVisibility__mvisibility(val* self) {
-val* var /* : MVisibility */;
-val* var1 /* : MVisibility */;
-var1 = modelbuilder__AVisibility__mvisibility(self);
-var = var1;
 RET_LABEL:;
-return var;
 }
 /* method modelbuilder#AIntrudeVisibility#mvisibility for (self: AIntrudeVisibility): MVisibility */
 val* modelbuilder__AIntrudeVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
 val* var1 /* : MVisibility */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__intrude_visibility]))(self) /* intrude_visibility on <self:AIntrudeVisibility>*/;
+{
+var1 = model_base__Object__intrude_visibility(self);
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -4122,7 +8322,9 @@ return var;
 val* modelbuilder__APublicVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
 val* var1 /* : MVisibility */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__public_visibility]))(self) /* public_visibility on <self:APublicVisibility>*/;
+{
+var1 = model_base__Object__public_visibility(self);
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -4141,7 +8343,9 @@ return var;
 val* modelbuilder__AProtectedVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
 val* var1 /* : MVisibility */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__protected_visibility]))(self) /* protected_visibility on <self:AProtectedVisibility>*/;
+{
+var1 = model_base__Object__protected_visibility(self);
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -4160,7 +8364,9 @@ return var;
 val* modelbuilder__APrivateVisibility__mvisibility(val* self) {
 val* var /* : MVisibility */;
 val* var1 /* : MVisibility */;
-var1 = ((val* (*)(val*))(self->class->vft[COLOR_model_base__Object__private_visibility]))(self) /* private_visibility on <self:APrivateVisibility>*/;
+{
+var1 = model_base__Object__private_visibility(self);
+}
 var = var1;
 goto RET_LABEL;
 RET_LABEL:;
@@ -4175,3 +8381,432 @@ var = var1;
 RET_LABEL:;
 return var;
 }
+/* method modelbuilder#ADoc#mdoc_cache for (self: ADoc): nullable MDoc */
+val* modelbuilder__ADoc__mdoc_cache(val* self) {
+val* var /* : nullable MDoc */;
+val* var1 /* : nullable MDoc */;
+var1 = self->attrs[COLOR_modelbuilder__ADoc___mdoc_cache].val; /* _mdoc_cache on <self:ADoc> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ADoc#mdoc_cache for (self: Object): nullable MDoc */
+val* VIRTUAL_modelbuilder__ADoc__mdoc_cache(val* self) {
+val* var /* : nullable MDoc */;
+val* var1 /* : nullable MDoc */;
+val* var3 /* : nullable MDoc */;
+{ /* Inline modelbuilder#ADoc#mdoc_cache (self) on <self:Object(ADoc)> */
+var3 = self->attrs[COLOR_modelbuilder__ADoc___mdoc_cache].val; /* _mdoc_cache on <self:Object(ADoc)> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ADoc#mdoc_cache= for (self: ADoc, nullable MDoc) */
+void modelbuilder__ADoc__mdoc_cache_61d(val* self, val* p0) {
+self->attrs[COLOR_modelbuilder__ADoc___mdoc_cache].val = p0; /* _mdoc_cache on <self:ADoc> */
+RET_LABEL:;
+}
+/* method modelbuilder#ADoc#mdoc_cache= for (self: Object, nullable MDoc) */
+void VIRTUAL_modelbuilder__ADoc__mdoc_cache_61d(val* self, val* p0) {
+{ /* Inline modelbuilder#ADoc#mdoc_cache= (self,p0) on <self:Object(ADoc)> */
+self->attrs[COLOR_modelbuilder__ADoc___mdoc_cache].val = p0; /* _mdoc_cache on <self:Object(ADoc)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method modelbuilder#ADoc#to_mdoc for (self: ADoc): MDoc */
+val* modelbuilder__ADoc__to_mdoc(val* self) {
+val* var /* : MDoc */;
+val* var1 /* : nullable MDoc */;
+val* var3 /* : nullable MDoc */;
+val* var_res /* var res: nullable MDoc */;
+val* var4 /* : null */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var8 /* : Bool */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+val* var11 /* : MDoc */;
+val* var12 /* : ANodes[TComment] */;
+val* var14 /* : 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* var_c /* var c: TComment */;
+val* var19 /* : String */;
+val* var_text /* var text: String */;
+long var20 /* : Int */;
+long var22 /* : Int */;
+long var23 /* : Int */;
+short int var24 /* : Bool */;
+short int var26 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+short int var27 /* : Bool */;
+val* var28 /* : Array[String] */;
+val* var30 /* : Array[String] */;
+static val* varonce;
+val* var31 /* : String */;
+char* var32 /* : NativeString */;
+long var33 /* : Int */;
+val* var34 /* : FlatString */;
+val* var35 /* : SequenceRead[Char] */;
+val* var37 /* : SequenceRead[Char] */;
+long var38 /* : Int */;
+val* var39 /* : nullable Object */;
+char var40 /* : Char */;
+short int var41 /* : Bool */;
+short int var42 /* : Bool */;
+short int var44 /* : Bool */;
+char var45 /* : Char */;
+val* var46 /* : SequenceRead[Char] */;
+val* var48 /* : SequenceRead[Char] */;
+long var49 /* : Int */;
+val* var50 /* : nullable Object */;
+char var51 /* : Char */;
+short int var52 /* : Bool */;
+short int var53 /* : Bool */;
+short int var55 /* : Bool */;
+char var56 /* : Char */;
+long var57 /* : Int */;
+val* var58 /* : Text */;
+long var59 /* : Int */;
+val* var60 /* : Text */;
+val* var61 /* : SequenceRead[Char] */;
+val* var63 /* : SequenceRead[Char] */;
+val* var64 /* : nullable Object */;
+char var65 /* : Char */;
+short int var66 /* : Bool */;
+short int var67 /* : Bool */;
+short int var69 /* : Bool */;
+char var70 /* : Char */;
+long var71 /* : Int */;
+long var72 /* : Int */;
+long var74 /* : Int */;
+long var75 /* : Int */;
+long var76 /* : Int */;
+short int var78 /* : Bool */;
+int cltype79;
+int idtype80;
+const char* var_class_name81;
+long var82 /* : Int */;
+val* var83 /* : String */;
+val* var84 /* : Array[String] */;
+val* var86 /* : Array[String] */;
+{
+{ /* Inline modelbuilder#ADoc#mdoc_cache (self) on <self:ADoc> */
+var3 = self->attrs[COLOR_modelbuilder__ADoc___mdoc_cache].val; /* _mdoc_cache on <self:ADoc> */
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var_res = var1;
+var4 = NULL;
+if (var_res == NULL) {
+var5 = 0; /* is null */
+} else {
+var5 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_res,var4) on <var_res:nullable MDoc> */
+var_other = var4;
+{
+var9 = ((short int (*)(val*, val*))(var_res->class->vft[COLOR_kernel__Object___61d_61d]))(var_res, var_other) /* == on <var_res:nullable MDoc(MDoc)>*/;
+var8 = var9;
+}
+var10 = !var8;
+var6 = var10;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+var5 = var6;
+}
+if (var5){
+var = var_res;
+goto RET_LABEL;
+} else {
+}
+var11 = NEW_mdoc__MDoc(&type_mdoc__MDoc);
+{
+((void (*)(val*))(var11->class->vft[COLOR_kernel__Object__init]))(var11) /* init on <var11:MDoc>*/;
+}
+var_res = var11;
+{
+{ /* Inline parser_nodes#ADoc#n_comment (self) on <self:ADoc> */
+var14 = self->attrs[COLOR_parser_nodes__ADoc___n_comment].val; /* _n_comment on <self:ADoc> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_comment");
+PRINT_ERROR(" (%s:%d)\n", "parser/parser_nodes.nit", 2019);
+show_backtrace(1);
+}
+var12 = var14;
+RET_LABEL13:(void)0;
+}
+}
+var_ = var12;
+{
+var15 = parser_nodes__ANodes__iterator(var_);
+}
+var_16 = var15;
+for(;;) {
+{
+var17 = ((short int (*)(val*))(var_16->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var_16) /* is_ok on <var_16:Iterator[TComment]>*/;
+}
+if (var17){
+{
+var18 = ((val* (*)(val*))(var_16->class->vft[COLOR_abstract_collection__Iterator__item]))(var_16) /* item on <var_16:Iterator[TComment]>*/;
+}
+var_c = var18;
+{
+var19 = lexer_work__Token__text(var_c);
+}
+var_text = var19;
+{
+{ /* Inline string#FlatText#length (var_text) on <var_text:String> */
+var22 = var_text->attrs[COLOR_string__FlatText___length].l; /* _length on <var_text:String> */
+var20 = var22;
+RET_LABEL21:(void)0;
+}
+}
+var23 = 2;
+{
+{ /* Inline kernel#Int#< (var20,var23) on <var20:Int> */
+/* Covariant cast for argument 0 (i) <var23:Int> isa OTHER */
+/* <var23:Int> isa OTHER */
+var26 = 1; /* easy <var23:Int> isa OTHER*/
+if (unlikely(!var26)) {
+var_class_name = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 371);
+show_backtrace(1);
+}
+var27 = var20 < var23;
+var24 = var27;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
+}
+}
+if (var24){
+{
+{ /* Inline mdoc#MDoc#content (var_res) on <var_res:nullable MDoc(MDoc)> */
+var30 = var_res->attrs[COLOR_mdoc__MDoc___content].val; /* _content on <var_res:nullable MDoc(MDoc)> */
+if (unlikely(var30 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _content");
+PRINT_ERROR(" (%s:%d)\n", "model/mdoc.nit", 22);
+show_backtrace(1);
+}
+var28 = var30;
+RET_LABEL29:(void)0;
+}
+}
+if (varonce) {
+var31 = varonce;
+} else {
+var32 = "";
+var33 = 0;
+var34 = string__NativeString__to_s_with_length(var32, var33);
+var31 = var34;
+varonce = var31;
+}
+{
+array__Array__add(var28, var31); /* Direct call array#Array#add on <var28:Array[String]>*/
+}
+goto BREAK_label;
+} else {
+}
+{
+{ /* Inline string#FlatString#chars (var_text) on <var_text:String> */
+var37 = var_text->attrs[COLOR_string__FlatString___chars].val; /* _chars on <var_text:String> */
+if (unlikely(var37 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
+show_backtrace(1);
+}
+var35 = var37;
+RET_LABEL36:(void)0;
+}
+}
+var38 = 0;
+{
+var39 = ((val* (*)(val*, long))(var35->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var35, var38) /* [] on <var35:SequenceRead[Char]>*/;
+}
+var40 = '#';
+{
+{ /* Inline kernel#Char#== (var39,var40) on <var39:nullable Object(Char)> */
+var44 = (var39 != NULL) && (var39->class == &class_kernel__Char);
+if (var44) {
+var45 = ((struct instance_kernel__Char*)var39)->value; /* autounbox from nullable Object to Char */;
+var44 = (var45 == var40);
+}
+var42 = var44;
+goto RET_LABEL43;
+RET_LABEL43:(void)0;
+}
+var41 = var42;
+}
+if (unlikely(!var41)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 832);
+show_backtrace(1);
+}
+{
+{ /* Inline string#FlatString#chars (var_text) on <var_text:String> */
+var48 = var_text->attrs[COLOR_string__FlatString___chars].val; /* _chars on <var_text:String> */
+if (unlikely(var48 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
+show_backtrace(1);
+}
+var46 = var48;
+RET_LABEL47:(void)0;
+}
+}
+var49 = 1;
+{
+var50 = ((val* (*)(val*, long))(var46->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(var46, var49) /* [] on <var46:SequenceRead[Char]>*/;
+}
+var51 = ' ';
+{
+{ /* Inline kernel#Char#== (var50,var51) on <var50:nullable Object(Char)> */
+var55 = (var50 != NULL) && (var50->class == &class_kernel__Char);
+if (var55) {
+var56 = ((struct instance_kernel__Char*)var50)->value; /* autounbox from nullable Object to Char */;
+var55 = (var56 == var51);
+}
+var53 = var55;
+goto RET_LABEL54;
+RET_LABEL54:(void)0;
+}
+var52 = var53;
+}
+if (var52){
+var57 = 2;
+{
+var58 = string__Text__substring_from(var_text, var57);
+}
+var_text = var58;
+} else {
+var59 = 1;
+{
+var60 = string__Text__substring_from(var_text, var59);
+}
+var_text = var60;
+}
+{
+{ /* Inline string#FlatString#chars (var_text) on <var_text:String> */
+var63 = var_text->attrs[COLOR_string__FlatString___chars].val; /* _chars on <var_text:String> */
+if (unlikely(var63 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _chars");
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/string.nit", 939);
+show_backtrace(1);
+}
+var61 = var63;
+RET_LABEL62:(void)0;
+}
+}
+{
+var64 = ((val* (*)(val*))(var61->class->vft[COLOR_abstract_collection__SequenceRead__last]))(var61) /* last on <var61:SequenceRead[Char]>*/;
+}
+var65 = '\n';
+{
+{ /* Inline kernel#Char#== (var64,var65) on <var64:nullable Object(Char)> */
+var69 = (var64 != NULL) && (var64->class == &class_kernel__Char);
+if (var69) {
+var70 = ((struct instance_kernel__Char*)var64)->value; /* autounbox from nullable Object to Char */;
+var69 = (var70 == var65);
+}
+var67 = var69;
+goto RET_LABEL68;
+RET_LABEL68:(void)0;
+}
+var66 = var67;
+}
+if (var66){
+var71 = 0;
+{
+{ /* Inline string#FlatText#length (var_text) on <var_text:String> */
+var74 = var_text->attrs[COLOR_string__FlatText___length].l; /* _length on <var_text:String> */
+var72 = var74;
+RET_LABEL73:(void)0;
+}
+}
+var75 = 1;
+{
+{ /* Inline kernel#Int#- (var72,var75) on <var72:Int> */
+/* Covariant cast for argument 0 (i) <var75:Int> isa OTHER */
+/* <var75:Int> isa OTHER */
+var78 = 1; /* easy <var75:Int> isa OTHER*/
+if (unlikely(!var78)) {
+var_class_name81 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name81);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
+show_backtrace(1);
+}
+var82 = var72 - var75;
+var76 = var82;
+goto RET_LABEL77;
+RET_LABEL77:(void)0;
+}
+}
+{
+var83 = string__FlatString__substring(var_text, var71, var76);
+}
+var_text = var83;
+} else {
+}
+{
+{ /* Inline mdoc#MDoc#content (var_res) on <var_res:nullable MDoc(MDoc)> */
+var86 = var_res->attrs[COLOR_mdoc__MDoc___content].val; /* _content on <var_res:nullable MDoc(MDoc)> */
+if (unlikely(var86 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _content");
+PRINT_ERROR(" (%s:%d)\n", "model/mdoc.nit", 22);
+show_backtrace(1);
+}
+var84 = var86;
+RET_LABEL85:(void)0;
+}
+}
+{
+array__Array__add(var84, var_text); /* Direct call array#Array#add on <var84:Array[String]>*/
+}
+BREAK_label: (void)0;
+{
+((void (*)(val*))(var_16->class->vft[COLOR_abstract_collection__Iterator__next]))(var_16) /* next on <var_16:Iterator[TComment]>*/;
+}
+} else {
+goto BREAK_label87;
+}
+}
+BREAK_label87: (void)0;
+{
+{ /* Inline abstract_collection#Iterator#finish (var_16) on <var_16:Iterator[TComment]> */
+RET_LABEL88:(void)0;
+}
+}
+{
+{ /* Inline modelbuilder#ADoc#mdoc_cache= (self,var_res) on <self:ADoc> */
+self->attrs[COLOR_modelbuilder__ADoc___mdoc_cache].val = var_res; /* _mdoc_cache on <self:ADoc> */
+RET_LABEL89:(void)0;
+}
+}
+var = var_res;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method modelbuilder#ADoc#to_mdoc for (self: Object): MDoc */
+val* VIRTUAL_modelbuilder__ADoc__to_mdoc(val* self) {
+val* var /* : MDoc */;
+val* var1 /* : MDoc */;
+var1 = modelbuilder__ADoc__to_mdoc(self);
+var = var1;
+RET_LABEL:;
+return var;
+}