+val* var88 /* : null */;
+short int var89 /* : Bool */;
+short int var90 /* : Bool */;
+short int var92 /* : Bool */;
+short int var93 /* : Bool */;
+short int var94 /* : Bool */;
+static val* varonce95;
+val* var96 /* : String */;
+char* var97 /* : NativeString */;
+long var98 /* : Int */;
+val* var99 /* : FlatString */;
+long var100 /* : Int */;
+val* var102 /* : OptionBool */;
+val* var104 /* : OptionBool */;
+val* var105 /* : nullable Object */;
+val* var107 /* : nullable Object */;
+short int var108 /* : Bool */;
+val* var109 /* : OptionBool */;
+val* var111 /* : OptionBool */;
+short int var112 /* : Bool */;
+short int var114 /* : Bool */;
+int cltype115;
+int idtype116;
+const struct type* type_struct117;
+const char* var_class_name118;
+val* var119 /* : nullable Object */;
+val* var120 /* : OptionBool */;
+val* var122 /* : OptionBool */;
+short int var123 /* : Bool */;
+short int var125 /* : Bool */;
+int cltype126;
+int idtype127;
+const struct type* type_struct128;
+const char* var_class_name129;
+val* var130 /* : nullable Object */;
+val* var131 /* : OptionBool */;
+val* var133 /* : OptionBool */;
+short int var134 /* : Bool */;
+short int var136 /* : Bool */;
+int cltype137;
+int idtype138;
+const struct type* type_struct139;
+const char* var_class_name140;
+val* var141 /* : nullable Object */;
+val* var142 /* : OptionBool */;
+val* var144 /* : OptionBool */;
+short int var145 /* : Bool */;
+short int var147 /* : Bool */;
+int cltype148;
+int idtype149;
+const struct type* type_struct150;
+const char* var_class_name151;
+val* var152 /* : nullable Object */;
+val* var153 /* : OptionBool */;
+val* var155 /* : OptionBool */;
+short int var156 /* : Bool */;
+short int var158 /* : Bool */;
+int cltype159;
+int idtype160;
+const struct type* type_struct161;
+const char* var_class_name162;
+val* var163 /* : nullable Object */;
+var_args = p0;
+{
+((void (*)(val*, val*))(self->class->vft[COLOR_abstract_compiler__ToolContext__process_options]))(self, p0) /* process_options on <self:ToolContext>*/;
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_stacktrace (self) on <self:ToolContext> */
+var2 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_stacktrace].val; /* _opt_stacktrace on <self:ToolContext> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_stacktrace");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 67);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var) on <var:OptionString> */
+var5 = var->attrs[COLOR_opts__Option___value].val; /* _value on <var:OptionString> */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var_st = var3;
+if (varonce) {
+var8 = varonce;
+} else {
+var9 = "none";
+var10 = 4;
+var11 = string__NativeString__to_s_with_length(var9, var10);
+var8 = var11;
+varonce = var8;
+}
+if (var_st == NULL) {
+var12 = 0; /* <var8:String> cannot be null */
+} else {
+var13 = string__FlatString___61d_61d(var_st, var8);
+var12 = var13;
+}
+var_ = var12;
+if (var12){
+var7 = var_;
+} else {
+if (varonce14) {
+var15 = varonce14;
+} else {
+var16 = "libunwind";
+var17 = 9;
+var18 = string__NativeString__to_s_with_length(var16, var17);
+var15 = var18;
+varonce14 = var15;
+}
+if (var_st == NULL) {
+var19 = 0; /* <var15:String> cannot be null */
+} else {
+var20 = string__FlatString___61d_61d(var_st, var15);
+var19 = var20;
+}
+var7 = var19;
+}
+var_21 = var7;
+if (var7){
+var6 = var_21;
+} else {
+if (varonce22) {
+var23 = varonce22;
+} else {
+var24 = "nitstack";
+var25 = 8;
+var26 = string__NativeString__to_s_with_length(var24, var25);
+var23 = var26;
+varonce22 = var23;
+}
+if (var_st == NULL) {
+var27 = 0; /* <var23:String> cannot be null */
+} else {
+var28 = string__FlatString___61d_61d(var_st, var23);
+var27 = var28;
+}
+var6 = var27;
+}
+if (var6){
+} else {
+if (varonce30) {
+var31 = varonce30;
+} else {
+var32 = "auto";
+var33 = 4;
+var34 = string__NativeString__to_s_with_length(var32, var33);
+var31 = var34;
+varonce30 = var31;
+}
+if (var_st == NULL) {
+var35 = 0; /* <var31:String> cannot be null */
+} else {
+var36 = string__FlatString___61d_61d(var_st, var31);
+var35 = var36;
+}
+var_37 = var35;
+if (var35){
+var29 = var_37;
+} else {
+var38 = NULL;
+if (var_st == NULL) {
+var39 = 1; /* is null */
+} else {
+var39 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var40 = string__FlatString___61d_61d(var_st, var38);
+var39 = var40;
+}
+var29 = var39;
+}
+if (var29){
+{
+{ /* Inline abstract_compiler#ToolContext#opt_stacktrace (self) on <self:ToolContext> */
+var43 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_stacktrace].val; /* _opt_stacktrace on <self:ToolContext> */
+if (unlikely(var43 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_stacktrace");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 67);
+show_backtrace(1);
+}
+var41 = var43;
+RET_LABEL42:(void)0;
+}
+}
+if (varonce44) {
+var45 = varonce44;
+} else {
+var46 = "nitstack";
+var47 = 8;
+var48 = string__NativeString__to_s_with_length(var46, var47);
+var45 = var48;
+varonce44 = var45;
+}
+{
+{ /* Inline opts#Option#value= (var41,var45) on <var41:OptionString> */
+/* Covariant cast for argument 0 (value) <var45:String> isa VALUE */
+/* <var45:String> isa VALUE */
+type_struct = var41->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype = type_struct->color;
+idtype = type_struct->id;
+if(cltype >= var45->type->table_size) {
+var50 = 0;
+} else {
+var50 = var45->type->type_table[cltype] == idtype;
+}
+if (unlikely(!var50)) {
+var_class_name = var45 == NULL ? "null" : var45->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var41->attrs[COLOR_opts__Option___value].val = var45; /* _value on <var41:OptionString> */
+RET_LABEL49:(void)0;
+}
+}
+} else {
+if (varonce51) {
+var52 = varonce51;
+} else {
+var53 = "Error: unknown value `";
+var54 = 22;
+var55 = string__NativeString__to_s_with_length(var53, var54);
+var52 = var55;
+varonce51 = var52;
+}
+if (varonce56) {
+var57 = varonce56;
+} else {
+var58 = "` for --stacktrace. Use `none`, `libunwind`, `nitstack` or `auto`.";
+var59 = 66;
+var60 = string__NativeString__to_s_with_length(var58, var59);
+var57 = var60;
+varonce56 = var57;
+}
+var61 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var61 = array_instance Array[Object] */
+var62 = 3;
+var63 = NEW_array__NativeArray(var62, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var63)->values[0] = (val*) var52;
+((struct instance_array__NativeArray*)var63)->values[1] = (val*) var_st;
+((struct instance_array__NativeArray*)var63)->values[2] = (val*) var57;
+{
+((void (*)(val*, val*, long))(var61->class->vft[COLOR_array__Array__with_native]))(var61, var63, var62) /* with_native on <var61:Array[Object]>*/;
+}
+}
+{
+var64 = ((val* (*)(val*))(var61->class->vft[COLOR_string__Object__to_s]))(var61) /* to_s on <var61:Array[Object]>*/;
+}
+{
+file__Object__print(self, var64); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+var65 = 1;
+{
+{ /* Inline kernel#Object#exit (self,var65) on <self:ToolContext> */
+exit(var65);
+RET_LABEL66:(void)0;
+}
+}
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_output (self) on <self:ToolContext> */
+var70 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_output].val; /* _opt_output on <self:ToolContext> */
+if (unlikely(var70 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_output");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 29);
+show_backtrace(1);
+}
+var68 = var70;
+RET_LABEL69:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var68) on <var68:OptionString> */
+var73 = var68->attrs[COLOR_opts__Option___value].val; /* _value on <var68:OptionString> */
+var71 = var73;
+RET_LABEL72:(void)0;
+}
+}
+var74 = NULL;
+if (var71 == NULL) {
+var75 = 0; /* is null */
+} else {
+var75 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var71,var74) on <var71:nullable Object(nullable String)> */
+var_other = var74;
+{
+var79 = ((short int (*)(val*, val*))(var71->class->vft[COLOR_kernel__Object___61d_61d]))(var71, var_other) /* == on <var71:nullable String(String)>*/;
+var78 = var79;
+}
+var80 = !var78;
+var76 = var80;
+goto RET_LABEL77;
+RET_LABEL77:(void)0;
+}
+var75 = var76;
+}
+var_81 = var75;
+if (var75){
+{
+{ /* Inline abstract_compiler#ToolContext#opt_dir (self) on <self:ToolContext> */
+var84 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_dir].val; /* _opt_dir on <self:ToolContext> */
+if (unlikely(var84 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_dir");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 31);
+show_backtrace(1);
+}
+var82 = var84;
+RET_LABEL83:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var82) on <var82:OptionString> */
+var87 = var82->attrs[COLOR_opts__Option___value].val; /* _value on <var82:OptionString> */
+var85 = var87;
+RET_LABEL86:(void)0;
+}
+}
+var88 = NULL;
+if (var85 == NULL) {
+var89 = 0; /* is null */
+} else {
+var89 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var85,var88) on <var85:nullable Object(nullable String)> */
+var_other = var88;
+{
+var93 = ((short int (*)(val*, val*))(var85->class->vft[COLOR_kernel__Object___61d_61d]))(var85, var_other) /* == on <var85:nullable String(String)>*/;
+var92 = var93;
+}
+var94 = !var92;
+var90 = var94;
+goto RET_LABEL91;
+RET_LABEL91:(void)0;
+}
+var89 = var90;
+}
+var67 = var89;
+} else {
+var67 = var_81;
+}
+if (var67){
+if (varonce95) {
+var96 = varonce95;
+} else {
+var97 = "Error: cannot use both --dir and --output";
+var98 = 41;
+var99 = string__NativeString__to_s_with_length(var97, var98);
+var96 = var99;
+varonce95 = var96;
+}
+{
+file__Object__print(self, var96); /* Direct call file#Object#print on <self:ToolContext>*/
+}
+var100 = 1;
+{
+{ /* Inline kernel#Object#exit (self,var100) on <self:ToolContext> */
+exit(var100);
+RET_LABEL101:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_check_all (self) on <self:ToolContext> */
+var104 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_all].val; /* _opt_no_check_all on <self:ToolContext> */
+if (unlikely(var104 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_all");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 59);
+show_backtrace(1);
+}
+var102 = var104;
+RET_LABEL103:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var102) on <var102:OptionBool> */
+var107 = var102->attrs[COLOR_opts__Option___value].val; /* _value on <var102:OptionBool> */
+var105 = var107;
+RET_LABEL106:(void)0;
+}
+}
+var108 = ((struct instance_kernel__Bool*)var105)->value; /* autounbox from nullable Object to Bool */;
+if (var108){
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_check_covariance (self) on <self:ToolContext> */
+var111 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_covariance].val; /* _opt_no_check_covariance on <self:ToolContext> */
+if (unlikely(var111 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_covariance");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 49);
+show_backtrace(1);
+}
+var109 = var111;
+RET_LABEL110:(void)0;
+}
+}
+var112 = 1;
+{
+{ /* Inline opts#Option#value= (var109,var112) on <var109:OptionBool> */
+/* Covariant cast for argument 0 (value) <var112:Bool> isa VALUE */
+/* <var112:Bool> isa VALUE */
+type_struct117 = var109->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype115 = type_struct117->color;
+idtype116 = type_struct117->id;
+if(cltype115 >= (&type_kernel__Bool)->table_size) {
+var114 = 0;
+} else {
+var114 = (&type_kernel__Bool)->type_table[cltype115] == idtype116;
+}
+if (unlikely(!var114)) {
+var_class_name118 = type_kernel__Bool.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name118);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var119 = BOX_kernel__Bool(var112); /* autobox from Bool to nullable Object */
+var109->attrs[COLOR_opts__Option___value].val = var119; /* _value on <var109:OptionBool> */
+RET_LABEL113:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_check_attr_isset (self) on <self:ToolContext> */
+var122 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_attr_isset].val; /* _opt_no_check_attr_isset on <self:ToolContext> */
+if (unlikely(var122 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_attr_isset");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 51);
+show_backtrace(1);
+}
+var120 = var122;
+RET_LABEL121:(void)0;
+}
+}
+var123 = 1;
+{
+{ /* Inline opts#Option#value= (var120,var123) on <var120:OptionBool> */
+/* Covariant cast for argument 0 (value) <var123:Bool> isa VALUE */
+/* <var123:Bool> isa VALUE */
+type_struct128 = var120->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype126 = type_struct128->color;
+idtype127 = type_struct128->id;
+if(cltype126 >= (&type_kernel__Bool)->table_size) {
+var125 = 0;
+} else {
+var125 = (&type_kernel__Bool)->type_table[cltype126] == idtype127;
+}
+if (unlikely(!var125)) {
+var_class_name129 = type_kernel__Bool.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name129);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var130 = BOX_kernel__Bool(var123); /* autobox from Bool to nullable Object */
+var120->attrs[COLOR_opts__Option___value].val = var130; /* _value on <var120:OptionBool> */
+RET_LABEL124:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_check_assert (self) on <self:ToolContext> */
+var133 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_assert].val; /* _opt_no_check_assert on <self:ToolContext> */
+if (unlikely(var133 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_assert");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 53);
+show_backtrace(1);
+}
+var131 = var133;
+RET_LABEL132:(void)0;
+}
+}
+var134 = 1;
+{
+{ /* Inline opts#Option#value= (var131,var134) on <var131:OptionBool> */
+/* Covariant cast for argument 0 (value) <var134:Bool> isa VALUE */
+/* <var134:Bool> isa VALUE */
+type_struct139 = var131->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype137 = type_struct139->color;
+idtype138 = type_struct139->id;
+if(cltype137 >= (&type_kernel__Bool)->table_size) {
+var136 = 0;
+} else {
+var136 = (&type_kernel__Bool)->type_table[cltype137] == idtype138;
+}
+if (unlikely(!var136)) {
+var_class_name140 = type_kernel__Bool.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name140);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var141 = BOX_kernel__Bool(var134); /* autobox from Bool to nullable Object */
+var131->attrs[COLOR_opts__Option___value].val = var141; /* _value on <var131:OptionBool> */
+RET_LABEL135:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_check_autocast (self) on <self:ToolContext> */
+var144 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_autocast].val; /* _opt_no_check_autocast on <self:ToolContext> */
+if (unlikely(var144 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_autocast");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 55);
+show_backtrace(1);
+}
+var142 = var144;
+RET_LABEL143:(void)0;
+}
+}
+var145 = 1;
+{
+{ /* Inline opts#Option#value= (var142,var145) on <var142:OptionBool> */
+/* Covariant cast for argument 0 (value) <var145:Bool> isa VALUE */
+/* <var145:Bool> isa VALUE */
+type_struct150 = var142->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype148 = type_struct150->color;
+idtype149 = type_struct150->id;
+if(cltype148 >= (&type_kernel__Bool)->table_size) {
+var147 = 0;
+} else {
+var147 = (&type_kernel__Bool)->type_table[cltype148] == idtype149;
+}
+if (unlikely(!var147)) {
+var_class_name151 = type_kernel__Bool.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name151);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var152 = BOX_kernel__Bool(var145); /* autobox from Bool to nullable Object */
+var142->attrs[COLOR_opts__Option___value].val = var152; /* _value on <var142:OptionBool> */
+RET_LABEL146:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_check_null (self) on <self:ToolContext> */
+var155 = self->attrs[COLOR_abstract_compiler__ToolContext___opt_no_check_null].val; /* _opt_no_check_null on <self:ToolContext> */
+if (unlikely(var155 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_check_null");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 57);
+show_backtrace(1);
+}
+var153 = var155;
+RET_LABEL154:(void)0;
+}
+}
+var156 = 1;
+{
+{ /* Inline opts#Option#value= (var153,var156) on <var153:OptionBool> */
+/* Covariant cast for argument 0 (value) <var156:Bool> isa VALUE */
+/* <var156:Bool> isa VALUE */
+type_struct161 = var153->type->resolution_table->types[COLOR_opts__Option_VTVALUE];
+cltype159 = type_struct161->color;
+idtype160 = type_struct161->id;
+if(cltype159 >= (&type_kernel__Bool)->table_size) {
+var158 = 0;
+} else {
+var158 = (&type_kernel__Bool)->type_table[cltype159] == idtype160;
+}
+if (unlikely(!var158)) {
+var_class_name162 = type_kernel__Bool.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "VALUE", var_class_name162);
+PRINT_ERROR(" (%s:%d)\n", "../lib/opts.nit", 40);
+show_backtrace(1);
+}
+var163 = BOX_kernel__Bool(var156); /* autobox from Bool to nullable Object */
+var153->attrs[COLOR_opts__Option___value].val = var163; /* _value on <var153:OptionBool> */
+RET_LABEL157:(void)0;
+}
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#ToolContext#process_options for (self: Object, Sequence[String]) */
+void VIRTUAL_abstract_compiler__ToolContext__process_options(val* self, val* p0) {
+abstract_compiler__ToolContext__process_options(self, p0); /* Direct call abstract_compiler#ToolContext#process_options on <self:Object(ToolContext)>*/
+RET_LABEL:;
+}
+/* method abstract_compiler#ModelBuilder#compile_dir for (self: ModelBuilder): String */
+val* abstract_compiler__ModelBuilder__compile_dir(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = self->attrs[COLOR_abstract_compiler__ModelBuilder___compile_dir].val; /* _compile_dir on <self:ModelBuilder> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compile_dir");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 117);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#ModelBuilder#compile_dir for (self: Object): String */
+val* VIRTUAL_abstract_compiler__ModelBuilder__compile_dir(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+val* var3 /* : String */;
+{ /* Inline abstract_compiler#ModelBuilder#compile_dir (self) on <self:Object(ModelBuilder)> */
+var3 = self->attrs[COLOR_abstract_compiler__ModelBuilder___compile_dir].val; /* _compile_dir on <self:Object(ModelBuilder)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _compile_dir");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 117);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#ModelBuilder#compile_dir= for (self: ModelBuilder, String) */
+void abstract_compiler__ModelBuilder__compile_dir_61d(val* self, val* p0) {
+self->attrs[COLOR_abstract_compiler__ModelBuilder___compile_dir].val = p0; /* _compile_dir on <self:ModelBuilder> */
+RET_LABEL:;
+}
+/* method abstract_compiler#ModelBuilder#compile_dir= for (self: Object, String) */
+void VIRTUAL_abstract_compiler__ModelBuilder__compile_dir_61d(val* self, val* p0) {
+{ /* Inline abstract_compiler#ModelBuilder#compile_dir= (self,p0) on <self:Object(ModelBuilder)> */
+self->attrs[COLOR_abstract_compiler__ModelBuilder___compile_dir].val = p0; /* _compile_dir on <self:Object(ModelBuilder)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#ModelBuilder#write_and_make for (self: ModelBuilder, AbstractCompiler) */
+void abstract_compiler__ModelBuilder__write_and_make(val* self, val* p0) {
+val* var_compiler /* var compiler: AbstractCompiler */;
+val* var /* : MModule */;
+val* var2 /* : MModule */;
+val* var3 /* : nullable Platform */;
+val* var_platform /* var platform: nullable Platform */;
+val* var4 /* : null */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
+val* var7 /* : MakefileToolchain */;
+val* var8 /* : ToolContext */;
+val* var10 /* : ToolContext */;
+val* var_toolchain /* var toolchain: nullable Object */;
+val* var11 /* : ToolContext */;
+val* var13 /* : ToolContext */;
+val* var14 /* : Toolchain */;
+val* var15 /* : String */;
+var_compiler = p0;
+{
+{ /* Inline abstract_compiler#AbstractCompiler#mainmodule (var_compiler) on <var_compiler:AbstractCompiler> */
+var2 = var_compiler->attrs[COLOR_abstract_compiler__AbstractCompiler___mainmodule].val; /* _mainmodule on <var_compiler:AbstractCompiler> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mainmodule");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 463);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = platform__MModule__target_platform(var);
+}
+var_platform = var3;
+var4 = NULL;
+if (var_platform == NULL) {
+var5 = 1; /* is null */
+} else {
+var5 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var6 = ((short int (*)(val*, val*))(var_platform->class->vft[COLOR_kernel__Object___61d_61d]))(var_platform, var4) /* == on <var_platform:nullable Platform>*/;
+var5 = var6;
+}
+if (var5){
+var7 = NEW_abstract_compiler__MakefileToolchain(&type_abstract_compiler__MakefileToolchain);
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var10 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
+}
+}
+{
+((void (*)(val*, val*))(var7->class->vft[COLOR_abstract_compiler__Toolchain__toolcontext_61d]))(var7, var8) /* toolcontext= on <var7:MakefileToolchain>*/;
+}
+{
+((void (*)(val*))(var7->class->vft[COLOR_kernel__Object__init]))(var7) /* init on <var7:MakefileToolchain>*/;
+}
+var_toolchain = var7;
+} else {
+{
+{ /* Inline modelbuilder#ModelBuilder#toolcontext (self) on <self:ModelBuilder> */
+var13 = self->attrs[COLOR_modelbuilder__ModelBuilder___toolcontext].val; /* _toolcontext on <self:ModelBuilder> */
+if (unlikely(var13 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "modelbuilder.nit", 106);
+show_backtrace(1);
+}
+var11 = var13;
+RET_LABEL12:(void)0;
+}
+}
+{
+var14 = ((val* (*)(val*, val*))(var_platform->class->vft[COLOR_abstract_compiler__Platform__toolchain]))(var_platform, var11) /* toolchain on <var_platform:nullable Platform(Platform)>*/;
+}
+var_toolchain = var14;
+}
+{
+var15 = abstract_compiler__Toolchain__compile_dir(var_toolchain);
+}
+{
+{ /* Inline abstract_compiler#ModelBuilder#compile_dir= (self,var15) on <self:ModelBuilder> */
+self->attrs[COLOR_abstract_compiler__ModelBuilder___compile_dir].val = var15; /* _compile_dir on <self:ModelBuilder> */
+RET_LABEL16:(void)0;
+}
+}
+{
+abstract_compiler__MakefileToolchain__write_and_make(var_toolchain, var_compiler); /* Direct call abstract_compiler#MakefileToolchain#write_and_make on <var_toolchain:nullable Object(Toolchain)>*/
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#ModelBuilder#write_and_make for (self: Object, AbstractCompiler) */
+void VIRTUAL_abstract_compiler__ModelBuilder__write_and_make(val* self, val* p0) {
+abstract_compiler__ModelBuilder__write_and_make(self, p0); /* Direct call abstract_compiler#ModelBuilder#write_and_make on <self:Object(ModelBuilder)>*/
+RET_LABEL:;
+}
+/* method abstract_compiler#Platform#toolchain for (self: Platform, ToolContext): Toolchain */
+val* abstract_compiler__Platform__toolchain(val* self, val* p0) {
+val* var /* : Toolchain */;
+const char* var_class_name;
+var_class_name = self == NULL ? "null" : self->type->name;
+PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "toolchain", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 136);
+show_backtrace(1);
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#Platform#toolchain for (self: Object, ToolContext): Toolchain */
+val* VIRTUAL_abstract_compiler__Platform__toolchain(val* self, val* p0) {
+val* var /* : Toolchain */;
+val* var1 /* : Toolchain */;
+const char* var_class_name;
+{ /* Inline abstract_compiler#Platform#toolchain (self,p0) on <self:Object(Platform)> */
+var_class_name = self == NULL ? "null" : self->type->name;
+PRINT_ERROR("Runtime error: Abstract method `%s` called on `%s`", "toolchain", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 136);
+show_backtrace(1);
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#Toolchain#toolcontext for (self: Toolchain): ToolContext */
+val* abstract_compiler__Toolchain__toolcontext(val* self) {
+val* var /* : ToolContext */;
+val* var1 /* : ToolContext */;
+var1 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:Toolchain> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#Toolchain#toolcontext for (self: Object): ToolContext */
+val* VIRTUAL_abstract_compiler__Toolchain__toolcontext(val* self) {
+val* var /* : ToolContext */;
+val* var1 /* : ToolContext */;
+val* var3 /* : ToolContext */;
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:Object(Toolchain)> */
+var3 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:Object(Toolchain)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#Toolchain#toolcontext= for (self: Toolchain, ToolContext) */
+void abstract_compiler__Toolchain__toolcontext_61d(val* self, val* p0) {
+self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val = p0; /* _toolcontext on <self:Toolchain> */
+RET_LABEL:;
+}
+/* method abstract_compiler#Toolchain#toolcontext= for (self: Object, ToolContext) */
+void VIRTUAL_abstract_compiler__Toolchain__toolcontext_61d(val* self, val* p0) {
+{ /* Inline abstract_compiler#Toolchain#toolcontext= (self,p0) on <self:Object(Toolchain)> */
+self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val = p0; /* _toolcontext on <self:Object(Toolchain)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#Toolchain#compile_dir for (self: Toolchain): String */
+val* abstract_compiler__Toolchain__compile_dir(val* self) {
+val* var /* : String */;
+val* var1 /* : ToolContext */;
+val* var3 /* : ToolContext */;
+val* var4 /* : OptionString */;
+val* var6 /* : OptionString */;
+val* var7 /* : nullable Object */;
+val* var9 /* : nullable Object */;
+val* var_compile_dir /* var compile_dir: nullable String */;
+val* var10 /* : null */;
+short int var11 /* : Bool */;
+short int var12 /* : Bool */;
+static val* varonce;
+val* var13 /* : String */;
+char* var14 /* : NativeString */;
+long var15 /* : Int */;
+val* var16 /* : FlatString */;
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:Toolchain> */
+var3 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:Toolchain> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_compile_dir (var1) on <var1:ToolContext> */
+var6 = var1->attrs[COLOR_abstract_compiler__ToolContext___opt_compile_dir].val; /* _opt_compile_dir on <var1:ToolContext> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_compile_dir");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 45);
+show_backtrace(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var4) on <var4:OptionString> */
+var9 = var4->attrs[COLOR_opts__Option___value].val; /* _value on <var4:OptionString> */
+var7 = var9;
+RET_LABEL8:(void)0;
+}
+}
+var_compile_dir = var7;
+var10 = NULL;
+if (var_compile_dir == NULL) {
+var11 = 1; /* is null */
+} else {
+var11 = 0; /* arg is null but recv is not */
+}
+if (0) {
+var12 = string__FlatString___61d_61d(var_compile_dir, var10);
+var11 = var12;
+}
+if (var11){
+if (varonce) {
+var13 = varonce;
+} else {
+var14 = ".nit_compile";
+var15 = 12;
+var16 = string__NativeString__to_s_with_length(var14, var15);
+var13 = var16;
+varonce = var13;
+}
+var_compile_dir = var13;
+} else {
+}
+var = var_compile_dir;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#Toolchain#compile_dir for (self: Object): String */
+val* VIRTUAL_abstract_compiler__Toolchain__compile_dir(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = abstract_compiler__Toolchain__compile_dir(self);
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#Toolchain#init for (self: Toolchain) */
+void abstract_compiler__Toolchain__init(val* self) {
+{
+((void (*)(val*))(self->class->vft[COLOR_abstract_compiler__Toolchain__init]))(self) /* init on <self:Toolchain>*/;
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#Toolchain#init for (self: Object) */
+void VIRTUAL_abstract_compiler__Toolchain__init(val* self) {
+{ /* Inline abstract_compiler#Toolchain#init (self) on <self:Object(Toolchain)> */
+{
+((void (*)(val*))(self->class->vft[COLOR_abstract_compiler__Toolchain__init]))(self) /* init on <self:Object(Toolchain)>*/;
+}
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#cc_paths for (self: MakefileToolchain): Array[String] */
+val* abstract_compiler__MakefileToolchain__cc_paths(val* self) {
+val* var /* : Array[String] */;
+val* var1 /* : Array[String] */;
+var1 = self->attrs[COLOR_abstract_compiler__MakefileToolchain___cc_paths].val; /* _cc_paths on <self:MakefileToolchain> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _cc_paths");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 154);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#MakefileToolchain#cc_paths for (self: Object): Array[String] */
+val* VIRTUAL_abstract_compiler__MakefileToolchain__cc_paths(val* self) {
+val* var /* : Array[String] */;
+val* var1 /* : Array[String] */;
+val* var3 /* : Array[String] */;
+{ /* Inline abstract_compiler#MakefileToolchain#cc_paths (self) on <self:Object(MakefileToolchain)> */
+var3 = self->attrs[COLOR_abstract_compiler__MakefileToolchain___cc_paths].val; /* _cc_paths on <self:Object(MakefileToolchain)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _cc_paths");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 154);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#MakefileToolchain#clib for (self: MakefileToolchain): String */
+val* abstract_compiler__MakefileToolchain__clib(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+var1 = self->attrs[COLOR_abstract_compiler__MakefileToolchain___clib].val; /* _clib on <self:MakefileToolchain> */
+if (unlikely(var1 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _clib");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 162);
+show_backtrace(1);
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#MakefileToolchain#clib for (self: Object): String */
+val* VIRTUAL_abstract_compiler__MakefileToolchain__clib(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+val* var3 /* : String */;
+{ /* Inline abstract_compiler#MakefileToolchain#clib (self) on <self:Object(MakefileToolchain)> */
+var3 = self->attrs[COLOR_abstract_compiler__MakefileToolchain___clib].val; /* _clib on <self:Object(MakefileToolchain)> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _clib");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 162);
+show_backtrace(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method abstract_compiler#MakefileToolchain#clib= for (self: MakefileToolchain, String) */
+void abstract_compiler__MakefileToolchain__clib_61d(val* self, val* p0) {
+self->attrs[COLOR_abstract_compiler__MakefileToolchain___clib].val = p0; /* _clib on <self:MakefileToolchain> */
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#clib= for (self: Object, String) */
+void VIRTUAL_abstract_compiler__MakefileToolchain__clib_61d(val* self, val* p0) {
+{ /* Inline abstract_compiler#MakefileToolchain#clib= (self,p0) on <self:Object(MakefileToolchain)> */
+self->attrs[COLOR_abstract_compiler__MakefileToolchain___clib].val = p0; /* _clib on <self:Object(MakefileToolchain)> */
+RET_LABEL1:(void)0;
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#gather_cc_paths for (self: MakefileToolchain) */
+void abstract_compiler__MakefileToolchain__gather_cc_paths(val* self) {
+val* var /* : ToolContext */;
+val* var2 /* : ToolContext */;
+val* var3 /* : nullable String */;
+val* var5 /* : nullable String */;
+val* var_path_env /* var path_env: nullable String */;
+val* var6 /* : null */;
+short int var7 /* : Bool */;
+short int var8 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var10 /* : Bool */;
+short int var11 /* : Bool */;
+short int var12 /* : Bool */;
+static val* varonce;
+val* var13 /* : String */;
+char* var14 /* : NativeString */;
+long var15 /* : Int */;
+val* var16 /* : FlatString */;
+val* var17 /* : Array[Object] */;
+long var18 /* : Int */;
+val* var19 /* : NativeArray[Object] */;
+val* var20 /* : String */;
+val* var_libname /* var libname: String */;
+short int var21 /* : Bool */;
+short int var22 /* : Bool */;
+val* var23 /* : ToolContext */;
+val* var25 /* : ToolContext */;
+val* var26 /* : null */;
+static val* varonce27;
+val* var28 /* : String */;
+char* var29 /* : NativeString */;
+long var30 /* : Int */;
+val* var31 /* : FlatString */;
+val* var33 /* : Array[String] */;
+val* var35 /* : Array[String] */;
+val* var36 /* : ToolContext */;
+val* var38 /* : ToolContext */;
+val* var39 /* : OptionArray */;
+val* var41 /* : OptionArray */;
+val* var42 /* : nullable Object */;
+val* var44 /* : nullable Object */;
+static val* varonce45;
+val* var46 /* : String */;
+char* var47 /* : NativeString */;
+long var48 /* : Int */;
+val* var49 /* : FlatString */;
+val* var50 /* : String */;
+short int var51 /* : Bool */;
+short int var52 /* : Bool */;
+val* var53 /* : Array[String] */;
+val* var55 /* : Array[String] */;
+char var56 /* : Char */;
+val* var57 /* : Array[Text] */;
+val* var58 /* : Pattern */;
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var2 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+{ /* Inline toolcontext#ToolContext#nit_dir (var) on <var:ToolContext> */
+var5 = var->attrs[COLOR_toolcontext__ToolContext___nit_dir].val; /* _nit_dir on <var:ToolContext> */
+var3 = var5;
+RET_LABEL4:(void)0;
+}
+}
+var_path_env = var3;
+var6 = NULL;
+if (var_path_env == NULL) {
+var7 = 0; /* is null */
+} else {
+var7 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_path_env,var6) on <var_path_env:nullable String> */
+var_other = var6;
+{
+var11 = ((short int (*)(val*, val*))(var_path_env->class->vft[COLOR_kernel__Object___61d_61d]))(var_path_env, var_other) /* == on <var_path_env:nullable String(String)>*/;
+var10 = var11;
+}
+var12 = !var10;
+var8 = var12;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
+}
+var7 = var8;
+}
+if (var7){
+if (varonce) {
+var13 = varonce;
+} else {
+var14 = "/clib";
+var15 = 5;
+var16 = string__NativeString__to_s_with_length(var14, var15);
+var13 = var16;
+varonce = var13;
+}
+var17 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var17 = array_instance Array[Object] */
+var18 = 2;
+var19 = NEW_array__NativeArray(var18, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var19)->values[0] = (val*) var_path_env;
+((struct instance_array__NativeArray*)var19)->values[1] = (val*) var13;
+{
+((void (*)(val*, val*, long))(var17->class->vft[COLOR_array__Array__with_native]))(var17, var19, var18) /* with_native on <var17:Array[Object]>*/;
+}
+}
+{
+var20 = ((val* (*)(val*))(var17->class->vft[COLOR_string__Object__to_s]))(var17) /* to_s on <var17:Array[Object]>*/;
+}
+var_libname = var20;
+{
+var21 = file__String__file_exists(var_libname);
+}
+var22 = !var21;
+if (var22){
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var25 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var23 = var25;
+RET_LABEL24:(void)0;
+}
+}
+var26 = NULL;
+if (varonce27) {
+var28 = varonce27;
+} else {
+var29 = "Cannot determine the nit clib path. define envvar NIT_DIR.";
+var30 = 58;
+var31 = string__NativeString__to_s_with_length(var29, var30);
+var28 = var31;
+varonce27 = var28;
+}
+{
+toolcontext__ToolContext__fatal_error(var23, var26, var28); /* Direct call toolcontext#ToolContext#fatal_error on <var23:ToolContext>*/
+}
+} else {
+}
+{
+{ /* Inline abstract_compiler#MakefileToolchain#clib= (self,var_libname) on <self:MakefileToolchain> */
+self->attrs[COLOR_abstract_compiler__MakefileToolchain___clib].val = var_libname; /* _clib on <self:MakefileToolchain> */
+RET_LABEL32:(void)0;
+}
+}
+} else {
+}
+{
+{ /* Inline abstract_compiler#MakefileToolchain#cc_paths (self) on <self:MakefileToolchain> */
+var35 = self->attrs[COLOR_abstract_compiler__MakefileToolchain___cc_paths].val; /* _cc_paths on <self:MakefileToolchain> */
+if (unlikely(var35 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _cc_paths");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 154);
+show_backtrace(1);
+}
+var33 = var35;
+RET_LABEL34:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var38 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var38 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var36 = var38;
+RET_LABEL37:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_cc_path (var36) on <var36:ToolContext> */
+var41 = var36->attrs[COLOR_abstract_compiler__ToolContext___opt_cc_path].val; /* _opt_cc_path on <var36:ToolContext> */
+if (unlikely(var41 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_cc_path");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 37);
+show_backtrace(1);
+}
+var39 = var41;
+RET_LABEL40:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var39) on <var39:OptionArray> */
+var44 = var39->attrs[COLOR_opts__Option___value].val; /* _value on <var39:OptionArray> */
+var42 = var44;
+RET_LABEL43:(void)0;
+}
+}
+{
+abstract_collection__Sequence__append(var33, var42); /* Direct call abstract_collection#Sequence#append on <var33:Array[String]>*/
+}
+if (varonce45) {
+var46 = varonce45;
+} else {
+var47 = "NIT_CC_PATH";
+var48 = 11;
+var49 = string__NativeString__to_s_with_length(var47, var48);
+var46 = var49;
+varonce45 = var46;
+}
+{
+var50 = environ__String__environ(var46);
+}
+var_path_env = var50;
+{
+var51 = string__Text__is_empty(var_path_env);
+}
+var52 = !var51;
+if (var52){
+{
+{ /* Inline abstract_compiler#MakefileToolchain#cc_paths (self) on <self:MakefileToolchain> */
+var55 = self->attrs[COLOR_abstract_compiler__MakefileToolchain___cc_paths].val; /* _cc_paths on <self:MakefileToolchain> */
+if (unlikely(var55 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _cc_paths");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 154);
+show_backtrace(1);
+}
+var53 = var55;
+RET_LABEL54:(void)0;
+}
+}
+var56 = ':';
+{
+var58 = BOX_kernel__Char(var56); /* autobox from Char to Pattern */
+var57 = string_search__Text__split_with(var_path_env, var58);
+}
+{
+abstract_collection__Sequence__append(var53, var57); /* Direct call abstract_collection#Sequence#append on <var53:Array[String]>*/
+}
+} else {
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#gather_cc_paths for (self: Object) */
+void VIRTUAL_abstract_compiler__MakefileToolchain__gather_cc_paths(val* self) {
+abstract_compiler__MakefileToolchain__gather_cc_paths(self); /* Direct call abstract_compiler#MakefileToolchain#gather_cc_paths on <self:Object(MakefileToolchain)>*/
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#write_and_make for (self: MakefileToolchain, AbstractCompiler) */
+void abstract_compiler__MakefileToolchain__write_and_make(val* self, val* p0) {
+val* var_compiler /* var compiler: AbstractCompiler */;
+val* var /* : String */;
+val* var_compile_dir /* var compile_dir: String */;
+long var1 /* : Int */;
+long var3 /* : Int for extern */;
+long var_time0 /* var time0: Int */;
+val* var4 /* : ToolContext */;
+val* var6 /* : ToolContext */;
+static val* varonce;
+val* var7 /* : String */;
+char* var8 /* : NativeString */;
+long var9 /* : Int */;
+val* var10 /* : FlatString */;
+long var11 /* : Int */;
+val* var12 /* : Array[String] */;
+val* var_cfiles /* var cfiles: Array[String] */;
+long var13 /* : Int */;
+long var15 /* : Int for extern */;
+long var_time1 /* var time1: Int */;
+val* var16 /* : ToolContext */;
+val* var18 /* : ToolContext */;
+static val* varonce19;
+val* var20 /* : String */;
+char* var21 /* : NativeString */;
+long var22 /* : Int */;
+val* var23 /* : FlatString */;
+long var24 /* : Int */;
+short int var26 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+long var27 /* : Int */;
+static val* varonce28;
+val* var29 /* : String */;
+char* var30 /* : NativeString */;
+long var31 /* : Int */;
+val* var32 /* : FlatString */;
+val* var33 /* : Array[Object] */;
+long var34 /* : Int */;
+val* var35 /* : NativeArray[Object] */;
+val* var36 /* : Object */;
+val* var37 /* : String */;
+long var38 /* : Int */;
+val* var39 /* : ToolContext */;
+val* var41 /* : ToolContext */;
+val* var42 /* : OptionBool */;
+val* var44 /* : OptionBool */;
+val* var45 /* : nullable Object */;
+val* var47 /* : nullable Object */;
+short int var48 /* : Bool */;
+val* var49 /* : ToolContext */;
+val* var51 /* : ToolContext */;
+static val* varonce52;
+val* var53 /* : String */;
+char* var54 /* : NativeString */;
+long var55 /* : Int */;
+val* var56 /* : FlatString */;
+long var57 /* : Int */;
+long var58 /* : Int */;
+long var60 /* : Int for extern */;
+val* var61 /* : ToolContext */;
+val* var63 /* : ToolContext */;
+static val* varonce64;
+val* var65 /* : String */;
+char* var66 /* : NativeString */;
+long var67 /* : Int */;
+val* var68 /* : FlatString */;
+long var69 /* : Int */;
+short int var71 /* : Bool */;
+int cltype72;
+int idtype73;
+const char* var_class_name74;
+long var75 /* : Int */;
+static val* varonce76;
+val* var77 /* : String */;
+char* var78 /* : NativeString */;
+long var79 /* : Int */;
+val* var80 /* : FlatString */;
+val* var81 /* : Array[Object] */;
+long var82 /* : Int */;
+val* var83 /* : NativeArray[Object] */;
+val* var84 /* : Object */;
+val* var85 /* : String */;
+long var86 /* : Int */;
+var_compiler = p0;
+{
+abstract_compiler__MakefileToolchain__gather_cc_paths(self); /* Direct call abstract_compiler#MakefileToolchain#gather_cc_paths on <self:MakefileToolchain>*/
+}
+{
+var = abstract_compiler__Toolchain__compile_dir(self);
+}
+var_compile_dir = var;
+{
+{ /* Inline time#Object#get_time (self) on <self:MakefileToolchain> */
+var3 = kernel_Any_Any_get_time_0(self);
+var1 = var3;
+goto RET_LABEL2;
+RET_LABEL2:(void)0;
+}
+}
+var_time0 = var1;
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var6 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
+}
+}
+if (varonce) {
+var7 = varonce;
+} else {
+var8 = "*** WRITING C ***";
+var9 = 17;
+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>*/
+}
+{
+file__String__mkdir(var_compile_dir); /* Direct call file#String#mkdir on <var_compile_dir:String>*/
+}
+var12 = NEW_array__Array(&type_array__Arraystring__String);
+{
+((void (*)(val*))(var12->class->vft[COLOR_kernel__Object__init]))(var12) /* init on <var12:Array[String]>*/;
+}
+var_cfiles = var12;
+{
+abstract_compiler__MakefileToolchain__write_files(self, var_compiler, var_compile_dir, var_cfiles); /* Direct call abstract_compiler#MakefileToolchain#write_files on <self:MakefileToolchain>*/
+}
+{
+abstract_compiler__MakefileToolchain__write_makefile(self, var_compiler, var_compile_dir, var_cfiles); /* Direct call abstract_compiler#MakefileToolchain#write_makefile on <self:MakefileToolchain>*/
+}
+{
+{ /* Inline time#Object#get_time (self) on <self:MakefileToolchain> */
+var15 = kernel_Any_Any_get_time_0(self);
+var13 = var15;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
+}
+}
+var_time1 = var13;
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var18 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var18 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var16 = var18;
+RET_LABEL17:(void)0;
+}
+}
+if (varonce19) {
+var20 = varonce19;
+} else {
+var21 = "*** END WRITING C: ";
+var22 = 19;
+var23 = string__NativeString__to_s_with_length(var21, var22);
+var20 = var23;
+varonce19 = var20;
+}
+{
+{ /* 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 */
+var26 = 1; /* easy <var_time0: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", 377);
+show_backtrace(1);
+}
+var27 = var_time1 - var_time0;
+var24 = var27;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
+}
+}
+if (varonce28) {
+var29 = varonce28;
+} else {
+var30 = " ***";
+var31 = 4;
+var32 = string__NativeString__to_s_with_length(var30, var31);
+var29 = var32;
+varonce28 = var29;
+}
+var33 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var33 = array_instance Array[Object] */
+var34 = 3;
+var35 = NEW_array__NativeArray(var34, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var35)->values[0] = (val*) var20;
+var36 = BOX_kernel__Int(var24); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var35)->values[1] = (val*) var36;
+((struct instance_array__NativeArray*)var35)->values[2] = (val*) var29;
+{
+((void (*)(val*, val*, long))(var33->class->vft[COLOR_array__Array__with_native]))(var33, var35, var34) /* with_native on <var33:Array[Object]>*/;
+}
+}
+{
+var37 = ((val* (*)(val*))(var33->class->vft[COLOR_string__Object__to_s]))(var33) /* to_s on <var33:Array[Object]>*/;
+}
+var38 = 2;
+{
+toolcontext__ToolContext__info(var16, var37, var38); /* Direct call toolcontext#ToolContext#info on <var16:ToolContext>*/
+}
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var41 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var41 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var39 = var41;
+RET_LABEL40:(void)0;
+}
+}
+{
+{ /* Inline abstract_compiler#ToolContext#opt_no_cc (var39) on <var39:ToolContext> */
+var44 = var39->attrs[COLOR_abstract_compiler__ToolContext___opt_no_cc].val; /* _opt_no_cc on <var39:ToolContext> */
+if (unlikely(var44 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _opt_no_cc");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 33);
+show_backtrace(1);
+}
+var42 = var44;
+RET_LABEL43:(void)0;
+}
+}
+{
+{ /* Inline opts#Option#value (var42) on <var42:OptionBool> */
+var47 = var42->attrs[COLOR_opts__Option___value].val; /* _value on <var42:OptionBool> */
+var45 = var47;
+RET_LABEL46:(void)0;
+}
+}
+var48 = ((struct instance_kernel__Bool*)var45)->value; /* autounbox from nullable Object to Bool */;
+if (var48){
+goto RET_LABEL;
+} else {
+}
+var_time0 = var_time1;
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var51 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var51 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var49 = var51;
+RET_LABEL50:(void)0;
+}
+}
+if (varonce52) {
+var53 = varonce52;
+} else {
+var54 = "*** COMPILING C ***";
+var55 = 19;
+var56 = string__NativeString__to_s_with_length(var54, var55);
+var53 = var56;
+varonce52 = var53;
+}
+var57 = 1;
+{
+toolcontext__ToolContext__info(var49, var53, var57); /* Direct call toolcontext#ToolContext#info on <var49:ToolContext>*/
+}
+{
+abstract_compiler__MakefileToolchain__compile_c_code(self, var_compiler, var_compile_dir); /* Direct call abstract_compiler#MakefileToolchain#compile_c_code on <self:MakefileToolchain>*/
+}
+{
+{ /* Inline time#Object#get_time (self) on <self:MakefileToolchain> */
+var60 = kernel_Any_Any_get_time_0(self);
+var58 = var60;
+goto RET_LABEL59;
+RET_LABEL59:(void)0;
+}
+}
+var_time1 = var58;
+{
+{ /* Inline abstract_compiler#Toolchain#toolcontext (self) on <self:MakefileToolchain> */
+var63 = self->attrs[COLOR_abstract_compiler__Toolchain___toolcontext].val; /* _toolcontext on <self:MakefileToolchain> */
+if (unlikely(var63 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", "compiler/abstract_compiler.nit", 140);
+show_backtrace(1);
+}
+var61 = var63;
+RET_LABEL62:(void)0;
+}
+}
+if (varonce64) {
+var65 = varonce64;
+} else {
+var66 = "*** END COMPILING C: ";
+var67 = 21;
+var68 = string__NativeString__to_s_with_length(var66, var67);
+var65 = var68;
+varonce64 = var65;
+}
+{
+{ /* 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 */
+var71 = 1; /* easy <var_time0:Int> isa OTHER*/
+if (unlikely(!var71)) {
+var_class_name74 = type_kernel__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name74);
+PRINT_ERROR(" (%s:%d)\n", "../lib/standard/kernel.nit", 377);
+show_backtrace(1);
+}
+var75 = var_time1 - var_time0;
+var69 = var75;
+goto RET_LABEL70;
+RET_LABEL70:(void)0;
+}
+}
+if (varonce76) {
+var77 = varonce76;
+} else {
+var78 = " ***";
+var79 = 4;
+var80 = string__NativeString__to_s_with_length(var78, var79);
+var77 = var80;
+varonce76 = var77;
+}
+var81 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var81 = array_instance Array[Object] */
+var82 = 3;
+var83 = NEW_array__NativeArray(var82, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var83)->values[0] = (val*) var65;
+var84 = BOX_kernel__Int(var69); /* autobox from Int to Object */
+((struct instance_array__NativeArray*)var83)->values[1] = (val*) var84;
+((struct instance_array__NativeArray*)var83)->values[2] = (val*) var77;
+{
+((void (*)(val*, val*, long))(var81->class->vft[COLOR_array__Array__with_native]))(var81, var83, var82) /* with_native on <var81:Array[Object]>*/;
+}
+}
+{
+var85 = ((val* (*)(val*))(var81->class->vft[COLOR_string__Object__to_s]))(var81) /* to_s on <var81:Array[Object]>*/;
+}
+var86 = 2;
+{
+toolcontext__ToolContext__info(var61, var85, var86); /* Direct call toolcontext#ToolContext#info on <var61:ToolContext>*/
+}
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#write_and_make for (self: Object, AbstractCompiler) */
+void VIRTUAL_abstract_compiler__MakefileToolchain__write_and_make(val* self, val* p0) {
+abstract_compiler__MakefileToolchain__write_and_make(self, p0); /* Direct call abstract_compiler#MakefileToolchain#write_and_make on <self:Object(MakefileToolchain)>*/
+RET_LABEL:;
+}
+/* method abstract_compiler#MakefileToolchain#write_files for (self: MakefileToolchain, AbstractCompiler, String, Array[String]) */
+void abstract_compiler__MakefileToolchain__write_files(val* self, val* p0, val* p1, val* p2) {
+val* var_compiler /* var compiler: AbstractCompiler */;
+val* var_compile_dir /* var compile_dir: String */;
+val* var_cfiles /* var cfiles: Array[String] */;
+val* var /* : MModule */;
+val* var2 /* : MModule */;
+val* var3 /* : nullable Platform */;
+val* var_platform /* var platform: nullable Platform */;
+short int var4 /* : Bool */;
+val* var5 /* : ToolContext */;
+val* var7 /* : ToolContext */;
+val* var8 /* : OptionString */;
+val* var10 /* : OptionString */;
+val* var11 /* : nullable Object */;
+val* var13 /* : nullable Object */;
+static val* varonce;
+val* var14 /* : String */;
+char* var15 /* : NativeString */;
+long var16 /* : Int */;
+val* var17 /* : FlatString */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var20 /* : Bool */;
+val* var21 /* : null */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+short int var_24 /* var : Bool */;
+short int var25 /* : Bool */;
+static val* varonce26;
+val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : FlatString */;
+val* var_cc_opt_with_libgc /* var cc_opt_with_libgc: String */;
+short int var31 /* : Bool */;
+val* var32 /* : null */;
+short int var33 /* : Bool */;
+short int var34 /* : Bool */;
+short int var_35 /* var : Bool */;
+short int var36 /* : Bool */;
+short int var37 /* : Bool */;
+static val* varonce38;
+val* var39 /* : String */;
+char* var40 /* : NativeString */;
+long var41 /* : Int */;
+val* var42 /* : FlatString */;
+val* var43 /* : ExternCFile */;
+static val* varonce44;
+val* var45 /* : String */;
+char* var46 /* : NativeString */;
+long var47 /* : Int */;
+val* var48 /* : FlatString */;
+val* var_gc_chooser /* var gc_chooser: ExternCFile */;
+val* var49 /* : Array[ExternFile] */;
+val* var51 /* : Array[ExternFile] */;
+val* var52 /* : Array[String] */;
+val* var54 /* : Array[String] */;
+val* var55 /* : String */;
+val* var57 /* : String */;
+static val* varonce58;
+val* var59 /* : String */;
+char* var60 /* : NativeString */;
+long var61 /* : Int */;
+val* var62 /* : FlatString */;
+val* var63 /* : Array[Object] */;
+long var64 /* : Int */;
+val* var65 /* : NativeArray[Object] */;
+val* var66 /* : String */;
+val* var67 /* : Array[String] */;
+val* var69 /* : Array[String] */;
+val* var70 /* : String */;
+val* var72 /* : String */;
+static val* varonce73;
+val* var74 /* : String */;
+char* var75 /* : NativeString */;
+long var76 /* : Int */;
+val* var77 /* : FlatString */;
+val* var78 /* : Array[Object] */;
+long var79 /* : Int */;
+val* var80 /* : NativeArray[Object] */;
+val* var81 /* : String */;
+val* var82 /* : MModule */;
+val* var84 /* : MModule */;
+val* var85 /* : POSetElement[MModule] */;
+val* var87 /* : POSetElement[MModule] */;
+val* var88 /* : Collection[Object] */;
+val* var_89 /* var : Collection[MModule] */;
+val* var90 /* : Iterator[nullable Object] */;
+val* var_91 /* var : Iterator[MModule] */;
+short int var92 /* : Bool */;
+val* var93 /* : nullable Object */;
+val* var_m /* var m: MModule */;