regern c_src
[nit.git] / c_src / nit__typing.sep.2.c
index 166ac80..fb8d6cb 100644 (file)
 #include "nit__typing.sep.0.h"
-/* method typing#AForExpr#do_type_iterator for (self: AForExpr, TypeVisitor, MType) */
-void nit__typing___AForExpr___do_type_iterator(val* self, val* p0, val* p1) {
+/* method typing#AVarReassignExpr#accept_typing for (self: AVarReassignExpr, TypeVisitor) */
+void nit__typing___AVarReassignExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var_mtype /* var mtype: MType */;
-short int var /* : Bool */;
-int cltype;
-int idtype;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-static val* varonce5;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : FlatString */;
-val* var10 /* : nullable MClass */;
-val* var_objcla /* var objcla: nullable MClass */;
-val* var11 /* : null */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
+val* var /* : nullable Variable */;
+val* var2 /* : nullable Variable */;
+val* var_variable /* var variable: nullable Variable */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
 val* var_other /* var other: nullable Object */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : nullable MType */;
+val* var_readtype /* var readtype: nullable MType */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+val* var_other12 /* var other: nullable Object */;
+short int var13 /* : Bool */;
 short int var15 /* : Bool */;
-short int var17 /* : Bool */;
-static val* varonce18;
-val* var19 /* : String */;
-char* var20 /* : NativeString */;
-long var21 /* : Int */;
-val* var22 /* : FlatString */;
-val* var23 /* : AExpr */;
-val* var25 /* : AExpr */;
-short int var26 /* : Bool */;
-int cltype27;
-int idtype28;
-val* var29 /* : nullable CallSite */;
-val* var_itdef /* var itdef: nullable CallSite */;
-val* var30 /* : null */;
+val* var17 /* : nullable MType */;
+val* var19 /* : nullable MType */;
+val* var_writetype /* var writetype: nullable MType */;
+short int var20 /* : Bool */;
+short int var21 /* : Bool */;
+short int var23 /* : Bool */;
+short int var25 /* : Bool */;
+val* var26 /* : nullable MType */;
+val* var_rettype /* var rettype: nullable MType */;
+short int var27 /* : Bool */;
+short int var28 /* : Bool */;
+short int var30 /* : Bool */;
 short int var31 /* : Bool */;
-short int var32 /* : Bool */;
-short int var34 /* : Bool */;
-short int var36 /* : Bool */;
-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* var52 /* : MSignature */;
-val* var54 /* : MSignature */;
-val* var55 /* : nullable MType */;
-val* var57 /* : nullable MType */;
-val* var_ittype /* var ittype: nullable MType */;
-val* var58 /* : null */;
-short int var59 /* : Bool */;
-short int var60 /* : Bool */;
-short int var62 /* : Bool */;
-short int var64 /* : Bool */;
-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 /* : nullable MClass */;
-val* var_colit_cla /* var colit_cla: nullable MClass */;
-static val* varonce76;
-val* var77 /* : String */;
-char* var78 /* : NativeString */;
-long var79 /* : Int */;
-val* var80 /* : FlatString */;
-val* var81 /* : nullable MClass */;
-val* var_mapit_cla /* var mapit_cla: nullable MClass */;
-short int var82 /* : Bool */;
-short int var_is_col /* var is_col: Bool */;
-short int var83 /* : Bool */;
-short int var_is_map /* var is_map: Bool */;
-short int var84 /* : Bool */;
-val* var85 /* : null */;
-short int var86 /* : Bool */;
-short int var87 /* : Bool */;
-val* var_other89 /* var other: nullable Object */;
-short int var90 /* : Bool */;
-short int var91 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var92 /* : Array[MType] */;
-long var93 /* : Int */;
-val* var_94 /* var : Array[MType] */;
-val* var95 /* : MClassType */;
-val* var97 /* : MClassType */;
-val* var98 /* : MType */;
-val* var99 /* : MClassType */;
-short int var100 /* : Bool */;
-val* var101 /* : MModule */;
-val* var103 /* : MModule */;
-val* var104 /* : nullable MClassType */;
-val* var106 /* : nullable MClassType */;
-val* var107 /* : MClassType */;
-val* var_coltype /* var coltype: MClassType */;
-val* var108 /* : nullable Array[Variable] */;
-val* var110 /* : nullable Array[Variable] */;
-val* var_variables /* var variables: nullable Array[Variable] */;
-long var111 /* : Int */;
-long var113 /* : Int */;
-long var114 /* : Int */;
-short int var115 /* : Bool */;
-short int var117 /* : Bool */;
-short int var118 /* : Bool */;
-static val* varonce119;
-val* var120 /* : String */;
-char* var121 /* : NativeString */;
-long var122 /* : Int */;
-val* var123 /* : FlatString */;
-val* var124 /* : nullable Object */;
-val* var125 /* : Array[MType] */;
-val* var126 /* : nullable Object */;
-short int var128 /* : Bool */;
-short int var129 /* : Bool */;
-val* var130 /* : null */;
-short int var131 /* : Bool */;
-short int var132 /* : Bool */;
-short int var134 /* : Bool */;
-short int var135 /* : Bool */;
-short int var_136 /* var : Bool */;
-val* var137 /* : Array[MType] */;
-long var138 /* : Int */;
-val* var_139 /* var : Array[MType] */;
-val* var140 /* : MClassType */;
-val* var142 /* : MClassType */;
-val* var143 /* : MType */;
-val* var144 /* : MClassType */;
-val* var146 /* : MClassType */;
-val* var147 /* : MType */;
-val* var148 /* : MClassType */;
-short int var149 /* : Bool */;
-val* var150 /* : MModule */;
-val* var152 /* : MModule */;
-val* var153 /* : nullable MClassType */;
-val* var155 /* : nullable MClassType */;
-val* var156 /* : MClassType */;
-val* var_coltype157 /* var coltype: MClassType */;
-val* var158 /* : nullable Array[Variable] */;
-val* var160 /* : nullable Array[Variable] */;
-val* var_variables161 /* var variables: nullable Array[Variable] */;
-long var162 /* : Int */;
-long var164 /* : Int */;
-long var165 /* : Int */;
-short int var166 /* : Bool */;
-short int var168 /* : Bool */;
-short int var169 /* : Bool */;
-static val* varonce170;
-val* var171 /* : String */;
-char* var172 /* : NativeString */;
-long var173 /* : Int */;
-val* var174 /* : FlatString */;
-long var175 /* : Int */;
-val* var176 /* : nullable Object */;
-val* var177 /* : Array[MType] */;
-long var178 /* : Int */;
-val* var179 /* : nullable Object */;
-long var181 /* : Int */;
-val* var182 /* : nullable Object */;
-val* var183 /* : Array[MType] */;
-long var184 /* : Int */;
-val* var185 /* : nullable Object */;
-short int var187 /* : Bool */;
-short int var188 /* : Bool */;
-short int var189 /* : Bool */;
-short int var_190 /* var : Bool */;
-short int var191 /* : Bool */;
-static val* varonce192;
-val* var193 /* : String */;
-char* var194 /* : NativeString */;
-long var195 /* : Int */;
-val* var196 /* : FlatString */;
-short int var197 /* : Bool */;
-val* var198 /* : MType */;
-val* var199 /* : MType */;
-short int var200 /* : Bool */;
-int cltype201;
-int idtype202;
-const char* var_class_name;
-static val* varonce204;
-val* var205 /* : String */;
-char* var206 /* : NativeString */;
-long var207 /* : Int */;
-val* var208 /* : FlatString */;
-short int var209 /* : Bool */;
-val* var210 /* : nullable CallSite */;
-val* var_ikdef /* var ikdef: nullable CallSite */;
-val* var211 /* : null */;
-short int var212 /* : Bool */;
-short int var213 /* : Bool */;
-short int var215 /* : Bool */;
-short int var217 /* : Bool */;
-static val* varonce218;
-val* var219 /* : String */;
-char* var220 /* : NativeString */;
-long var221 /* : Int */;
-val* var222 /* : FlatString */;
-static val* varonce223;
-val* var224 /* : String */;
-char* var225 /* : NativeString */;
-long var226 /* : Int */;
-val* var227 /* : FlatString */;
-val* var228 /* : Array[Object] */;
-long var229 /* : Int */;
-val* var230 /* : NativeArray[Object] */;
-val* var231 /* : String */;
-static val* varonce233;
-val* var234 /* : String */;
-char* var235 /* : NativeString */;
-long var236 /* : Int */;
-val* var237 /* : FlatString */;
-short int var238 /* : Bool */;
-val* var239 /* : nullable CallSite */;
-val* var_itemdef /* var itemdef: nullable CallSite */;
-val* var240 /* : null */;
-short int var241 /* : Bool */;
-short int var242 /* : Bool */;
-short int var244 /* : Bool */;
-short int var246 /* : Bool */;
-static val* varonce247;
-val* var248 /* : String */;
-char* var249 /* : NativeString */;
-long var250 /* : Int */;
-val* var251 /* : FlatString */;
-static val* varonce252;
-val* var253 /* : String */;
-char* var254 /* : NativeString */;
-long var255 /* : Int */;
-val* var256 /* : FlatString */;
-val* var257 /* : Array[Object] */;
-long var258 /* : Int */;
-val* var259 /* : NativeArray[Object] */;
-val* var260 /* : String */;
-static val* varonce262;
-val* var263 /* : String */;
-char* var264 /* : NativeString */;
-long var265 /* : Int */;
-val* var266 /* : FlatString */;
-short int var267 /* : Bool */;
-val* var268 /* : nullable CallSite */;
-val* var_nextdef /* var nextdef: nullable CallSite */;
-val* var269 /* : null */;
-short int var270 /* : Bool */;
-short int var271 /* : Bool */;
-short int var273 /* : Bool */;
-short int var275 /* : Bool */;
-static val* varonce276;
-val* var277 /* : String */;
-char* var278 /* : NativeString */;
-long var279 /* : Int */;
-val* var280 /* : FlatString */;
-static val* varonce281;
-val* var282 /* : String */;
-char* var283 /* : NativeString */;
-long var284 /* : Int */;
-val* var285 /* : FlatString */;
-val* var286 /* : Array[Object] */;
-long var287 /* : Int */;
-val* var288 /* : NativeArray[Object] */;
-val* var289 /* : String */;
-static val* varonce291;
-val* var292 /* : String */;
-char* var293 /* : NativeString */;
-long var294 /* : Int */;
-val* var295 /* : FlatString */;
-short int var296 /* : Bool */;
-val* var297 /* : nullable CallSite */;
-static val* varonce299;
-val* var300 /* : String */;
-char* var301 /* : NativeString */;
-long var302 /* : Int */;
-val* var303 /* : FlatString */;
-short int var304 /* : Bool */;
-val* var305 /* : nullable CallSite */;
-val* var_keydef /* var keydef: nullable CallSite */;
-val* var306 /* : null */;
-short int var307 /* : Bool */;
-short int var308 /* : Bool */;
-short int var310 /* : Bool */;
-short int var312 /* : Bool */;
-static val* varonce313;
-val* var314 /* : String */;
-char* var315 /* : NativeString */;
-long var316 /* : Int */;
-val* var317 /* : FlatString */;
-static val* varonce318;
-val* var319 /* : String */;
-char* var320 /* : NativeString */;
-long var321 /* : Int */;
-val* var322 /* : FlatString */;
-val* var323 /* : Array[Object] */;
-long var324 /* : Int */;
-val* var325 /* : NativeArray[Object] */;
-val* var326 /* : String */;
-short int var328 /* : Bool */;
-val* var329 /* : nullable Array[Variable] */;
-val* var331 /* : nullable Array[Variable] */;
-long var332 /* : Int */;
-long var334 /* : Int */;
-long var335 /* : Int */;
-short int var336 /* : Bool */;
-short int var338 /* : Bool */;
-short int var_339 /* var : Bool */;
-val* var340 /* : AExpr */;
-val* var342 /* : AExpr */;
-short int var343 /* : Bool */;
-int cltype344;
-int idtype345;
-val* var346 /* : nullable Array[Variable] */;
-val* var348 /* : nullable Array[Variable] */;
-val* var349 /* : nullable Object */;
-val* var_variable /* var variable: Variable */;
-val* var350 /* : nullable MType */;
-val* var352 /* : nullable MType */;
-val* var_vtype /* var vtype: MType */;
-val* var353 /* : AExpr */;
-val* var355 /* : AExpr */;
-short int var356 /* : Bool */;
-int cltype357;
-int idtype358;
-static val* varonce359;
-val* var360 /* : String */;
-char* var361 /* : NativeString */;
-long var362 /* : Int */;
-val* var363 /* : FlatString */;
-short int var364 /* : Bool */;
-val* var365 /* : nullable CallSite */;
-static val* varonce367;
-val* var368 /* : String */;
-char* var369 /* : NativeString */;
-long var370 /* : Int */;
-val* var371 /* : FlatString */;
-short int var372 /* : Bool */;
-val* var373 /* : nullable CallSite */;
-static val* varonce375;
-val* var376 /* : String */;
-char* var377 /* : NativeString */;
-long var378 /* : Int */;
-val* var379 /* : FlatString */;
-short int var380 /* : Bool */;
-val* var381 /* : nullable CallSite */;
 var_v = p0;
-var_mtype = p1;
-/* <var_mtype:MType> isa MNullType */
-cltype = type_nit__MNullType.color;
-idtype = type_nit__MNullType.id;
-if(cltype >= var_mtype->type->table_size) {
-var = 0;
-} else {
-var = var_mtype->type->type_table[cltype] == idtype;
+{
+{ /* Inline scope#AVarFormExpr#variable (self) on <self:AVarReassignExpr> */
+var2 = self->attrs[COLOR_nit__scope__AVarFormExpr___variable].val; /* _variable on <self:AVarReassignExpr> */
+var = var2;
+RET_LABEL1:(void)0;
 }
-if (var){
-if (varonce) {
-var1 = varonce;
+}
+var_variable = var;
+if (var_variable == NULL) {
+var3 = 0; /* is null */
 } else {
-var2 = "Type error: \'for\' cannot iterate over \'null\'";
-var3 = 44;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var3 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_variable,((val*)NULL)) on <var_variable:nullable Variable> */
+var_other = ((val*)NULL);
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var1); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var6 = ((short int(*)(val* self, val* p0))(var_variable->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_variable, var_other); /* == on <var_variable:nullable Variable(Variable)>*/
 }
-goto RET_LABEL;
-} else {
+var7 = !var6;
+var4 = var7;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
 }
-if (varonce5) {
-var6 = varonce5;
-} else {
-var7 = "Object";
-var8 = 6;
-var9 = standard___standard__NativeString___to_s_with_length(var7, var8);
-var6 = var9;
-varonce5 = var6;
+var3 = var4;
+}
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 949);
+fatal_exit(1);
 }
 {
-var10 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var6);
+var8 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var_variable);
 }
-var_objcla = var10;
-var11 = NULL;
-if (var_objcla == NULL) {
-var12 = 1; /* is null */
+var_readtype = var8;
+if (var_readtype == NULL) {
+var9 = 1; /* is null */
 } else {
-var12 = 0; /* arg is null but recv is not */
+var9 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_objcla,var11) on <var_objcla:nullable MClass> */
-var_other = var11;
+{ /* Inline kernel#Object#== (var_readtype,((val*)NULL)) on <var_readtype:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_objcla,var_other) on <var_objcla:nullable MClass(MClass)> */
-var17 = var_objcla == var_other;
-var15 = var17;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
-}
-}
+{ /* Inline kernel#Object#is_same_instance (var_readtype,var_other12) on <var_readtype:nullable MType(MType)> */
+var15 = var_readtype == var_other12;
 var13 = var15;
 goto RET_LABEL14;
 RET_LABEL14:(void)0;
 }
-var12 = var13;
 }
-if (var12){
-goto RET_LABEL;
-} else {
+var10 = var13;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
 }
-if (varonce18) {
-var19 = varonce18;
+var9 = var10;
+}
+if (var9){
+goto RET_LABEL;
 } else {
-var20 = "iterator";
-var21 = 8;
-var22 = standard___standard__NativeString___to_s_with_length(var20, var21);
-var19 = var22;
-varonce18 = var19;
 }
 {
-{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
-var25 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
-if (unlikely(var25 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1738);
-show_backtrace(1);
-}
-var23 = var25;
-RET_LABEL24:(void)0;
-}
+{ /* Inline typing#AReassignFormExpr#read_type= (self,var_readtype) on <self:AVarReassignExpr> */
+self->attrs[COLOR_nit__typing__AReassignFormExpr___read_type].val = var_readtype; /* _read_type on <self:AVarReassignExpr> */
+RET_LABEL16:(void)0;
 }
-/* <var23:AExpr> isa ASelfExpr */
-cltype27 = type_nit__ASelfExpr.color;
-idtype28 = type_nit__ASelfExpr.id;
-if(cltype27 >= var23->type->table_size) {
-var26 = 0;
-} else {
-var26 = var23->type->type_table[cltype27] == idtype28;
 }
 {
-var29 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var19, var26);
+{ /* Inline typing#Variable#declared_type (var_variable) on <var_variable:nullable Variable(Variable)> */
+var19 = var_variable->attrs[COLOR_nit__typing__Variable___declared_type].val; /* _declared_type on <var_variable:nullable Variable(Variable)> */
+var17 = var19;
+RET_LABEL18:(void)0;
 }
-var_itdef = var29;
-var30 = NULL;
-if (var_itdef == NULL) {
-var31 = 1; /* is null */
+}
+var_writetype = var17;
+if (var_writetype == NULL) {
+var20 = 1; /* is null */
 } else {
-var31 = 0; /* arg is null but recv is not */
+var20 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_itdef,var30) on <var_itdef:nullable CallSite> */
-var_other = var30;
+{ /* Inline kernel#Object#== (var_writetype,((val*)NULL)) on <var_writetype:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_itdef,var_other) on <var_itdef:nullable CallSite(CallSite)> */
-var36 = var_itdef == var_other;
-var34 = var36;
-goto RET_LABEL35;
-RET_LABEL35:(void)0;
-}
+{ /* Inline kernel#Object#is_same_instance (var_writetype,var_other12) on <var_writetype:nullable MType(MType)> */
+var25 = var_writetype == var_other12;
+var23 = var25;
+goto RET_LABEL24;
+RET_LABEL24:(void)0;
 }
-var32 = var34;
-goto RET_LABEL33;
-RET_LABEL33:(void)0;
 }
-var31 = var32;
+var21 = var23;
+goto RET_LABEL22;
+RET_LABEL22:(void)0;
 }
-if (var31){
-if (varonce37) {
-var38 = varonce37;
-} else {
-var39 = "Type Error: \'for\' expects a type providing \'iterator\' method, got \'";
-var40 = 67;
-var41 = standard___standard__NativeString___to_s_with_length(var39, var40);
-var38 = var41;
-varonce37 = var38;
+var20 = var21;
 }
-if (varonce42) {
-var43 = varonce42;
+if (var20){
+goto RET_LABEL;
 } else {
-var44 = "\'.";
-var45 = 2;
-var46 = standard___standard__NativeString___to_s_with_length(var44, var45);
-var43 = var46;
-varonce42 = var43;
-}
-var47 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var47 = array_instance Array[Object] */
-var48 = 3;
-var49 = NEW_standard__NativeArray(var48, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var49)->values[0] = (val*) var38;
-((struct instance_standard__NativeArray*)var49)->values[1] = (val*) var_mtype;
-((struct instance_standard__NativeArray*)var49)->values[2] = (val*) var43;
-{
-((void (*)(val* self, val* p0, long p1))(var47->class->vft[COLOR_standard__array__Array__with_native]))(var47, var49, var48) /* with_native on <var47:Array[Object]>*/;
-}
 }
 {
-var50 = ((val* (*)(val* self))(var47->class->vft[COLOR_standard__string__Object__to_s]))(var47) /* to_s on <var47:Array[Object]>*/;
+var26 = nit__typing___AReassignFormExpr___resolve_reassignment(self, var_v, var_readtype, var_writetype);
 }
+var_rettype = var26;
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var50); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+nit__typing___nit__typing__TypeVisitor___set_variable(var_v, self, var_variable, var_rettype); /* Direct call typing#TypeVisitor#set_variable on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
+if (var_rettype == NULL) {
+var27 = 0; /* is null */
 } else {
+var27 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_rettype,((val*)NULL)) on <var_rettype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#AForExpr#method_iterator= (self,var_itdef) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_iterator].val = var_itdef; /* _method_iterator on <self:AForExpr> */
-RET_LABEL51:(void)0;
+var30 = ((short int(*)(val* self, val* p0))(var_rettype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_rettype, var_other); /* == on <var_rettype:nullable MType(MType)>*/
 }
+var31 = !var30;
+var28 = var31;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
+}
+var27 = var28;
 }
 {
-{ /* Inline typing#CallSite#msignature (var_itdef) on <var_itdef:nullable CallSite(CallSite)> */
-var54 = var_itdef->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_itdef:nullable CallSite(CallSite)> */
-if (unlikely(var54 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 494);
-show_backtrace(1);
+{ /* Inline typing#AExpr#is_typed= (self,var27) on <self:AVarReassignExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var27; /* _is_typed on <self:AVarReassignExpr> */
+RET_LABEL32:(void)0;
 }
-var52 = var54;
-RET_LABEL53:(void)0;
 }
+RET_LABEL:;
 }
+/* method typing#AContinueExpr#accept_typing for (self: AContinueExpr, TypeVisitor) */
+void nit__typing___AContinueExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable AExpr */;
+val* var2 /* : nullable AExpr */;
+val* var_nexpr /* var nexpr: nullable AExpr */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline model#MSignature#return_mtype (var52) on <var52:MSignature> */
-var57 = var52->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var52:MSignature> */
-var55 = var57;
-RET_LABEL56:(void)0;
+{ /* Inline parser_nodes#AEscapeExpr#n_expr (self) on <self:AContinueExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AEscapeExpr___n_expr].val; /* _n_expr on <self:AContinueExpr> */
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
-var_ittype = var55;
-var58 = NULL;
-if (var_ittype == NULL) {
-var59 = 1; /* is null */
+var_nexpr = var;
+if (var_nexpr == NULL) {
+var3 = 0; /* is null */
 } else {
-var59 = 0; /* arg is null but recv is not */
+var3 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_ittype,var58) on <var_ittype:nullable MType> */
-var_other = var58;
+{ /* Inline kernel#Object#!= (var_nexpr,((val*)NULL)) on <var_nexpr:nullable AExpr> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_ittype,var_other) on <var_ittype:nullable MType(MType)> */
-var64 = var_ittype == var_other;
-var62 = var64;
-goto RET_LABEL63;
-RET_LABEL63:(void)0;
+var6 = ((short int(*)(val* self, val* p0))(var_nexpr->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_nexpr, var_other); /* == on <var_nexpr:nullable AExpr(AExpr)>*/
 }
+var7 = !var6;
+var4 = var7;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
 }
-var60 = var62;
-goto RET_LABEL61;
-RET_LABEL61:(void)0;
+var3 = var4;
 }
-var59 = var60;
+if (var3){
+{
+var8 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var_nexpr);
 }
-if (var59){
-if (varonce65) {
-var66 = varonce65;
 } else {
-var67 = "Type Error: \'for\' expects method \'iterator\' to return an \'Iterator\' or \'MapIterator\' type\'.";
-var68 = 91;
-var69 = standard___standard__NativeString___to_s_with_length(var67, var68);
-var66 = var69;
-varonce65 = var66;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var66); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AContinueExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AContinueExpr> */
+RET_LABEL9:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
-if (varonce70) {
-var71 = varonce70;
-} else {
-var72 = "Iterator";
-var73 = 8;
-var74 = standard___standard__NativeString___to_s_with_length(var72, var73);
-var71 = var74;
-varonce70 = var71;
+RET_LABEL:;
 }
+/* method typing#ABreakExpr#accept_typing for (self: ABreakExpr, TypeVisitor) */
+void nit__typing___ABreakExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable AExpr */;
+val* var2 /* : nullable AExpr */;
+val* var_nexpr /* var nexpr: nullable AExpr */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : nullable MType */;
+var_v = p0;
 {
-var75 = nit__typing___nit__typing__TypeVisitor___try_get_mclass(var_v, self, var71);
-}
-var_colit_cla = var75;
-if (varonce76) {
-var77 = varonce76;
-} else {
-var78 = "MapIterator";
-var79 = 11;
-var80 = standard___standard__NativeString___to_s_with_length(var78, var79);
-var77 = var80;
-varonce76 = var77;
+{ /* Inline parser_nodes#AEscapeExpr#n_expr (self) on <self:ABreakExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AEscapeExpr___n_expr].val; /* _n_expr on <self:ABreakExpr> */
+var = var2;
+RET_LABEL1:(void)0;
 }
-{
-var81 = nit__typing___nit__typing__TypeVisitor___try_get_mclass(var_v, self, var77);
 }
-var_mapit_cla = var81;
-var82 = 0;
-var_is_col = var82;
-var83 = 0;
-var_is_map = var83;
-var85 = NULL;
-if (var_colit_cla == NULL) {
-var86 = 0; /* is null */
+var_nexpr = var;
+if (var_nexpr == NULL) {
+var3 = 0; /* is null */
 } else {
-var86 = 1; /* arg is null and recv is not */
+var3 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_colit_cla,var85) on <var_colit_cla:nullable MClass> */
-var_other89 = var85;
+{ /* Inline kernel#Object#!= (var_nexpr,((val*)NULL)) on <var_nexpr:nullable AExpr> */
+var_other = ((val*)NULL);
 {
-var90 = ((short int (*)(val* self, val* p0))(var_colit_cla->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_colit_cla, var_other89) /* == on <var_colit_cla:nullable MClass(MClass)>*/;
+var6 = ((short int(*)(val* self, val* p0))(var_nexpr->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_nexpr, var_other); /* == on <var_nexpr:nullable AExpr(AExpr)>*/
 }
-var91 = !var90;
-var87 = var91;
-goto RET_LABEL88;
-RET_LABEL88:(void)0;
+var7 = !var6;
+var4 = var7;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
 }
-var86 = var87;
+var3 = var4;
 }
-var_ = var86;
-if (var86){
-var92 = NEW_standard__Array(&type_standard__Array__nit__MType);
-var93 = 1;
+if (var3){
 {
-standard___standard__Array___with_capacity(var92, var93); /* Direct call array#Array#with_capacity on <var92:Array[MType]>*/
+var8 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var_nexpr);
+}
+} else {
 }
-var_94 = var92;
 {
-{ /* Inline model#MClass#mclass_type (var_objcla) on <var_objcla:nullable MClass(MClass)> */
-var97 = var_objcla->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objcla:nullable MClass(MClass)> */
-if (unlikely(var97 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ABreakExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ABreakExpr> */
+RET_LABEL9:(void)0;
 }
-var95 = var97;
-RET_LABEL96:(void)0;
 }
+RET_LABEL:;
 }
+/* method typing#AReturnExpr#accept_typing for (self: AReturnExpr, TypeVisitor) */
+void nit__typing___AReturnExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable AExpr */;
+val* var2 /* : nullable AExpr */;
+val* var_nexpr /* var nexpr: nullable AExpr */;
+val* var3 /* : nullable MPropDef */;
+val* var5 /* : nullable MPropDef */;
+val* var_mpropdef /* var mpropdef: nullable MPropDef */;
+short int var6 /* : Bool */;
+int cltype;
+int idtype;
+val* var7 /* : nullable MSignature */;
+val* var9 /* : nullable MSignature */;
+val* var10 /* : nullable MType */;
+val* var12 /* : nullable MType */;
+val* var_ret_type /* var ret_type: nullable Object */;
+short int var13 /* : Bool */;
+int cltype14;
+int idtype15;
+val* var16 /* : nullable MType */;
+val* var18 /* : nullable MType */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var22 /* : Bool */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+short int var25 /* : Bool */;
+short int var27 /* : Bool */;
+short int var28 /* : Bool */;
+val* var29 /* : nullable MType */;
+val* var30 /* : nullable MType */;
+static val* varonce;
+val* var31 /* : String */;
+char* var32 /* : NativeString */;
+val* var33 /* : FlatString */;
+short int var34 /* : Bool */;
+short int var35 /* : Bool */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
+static val* varonce39;
+val* var40 /* : String */;
+char* var41 /* : NativeString */;
+val* var42 /* : FlatString */;
+var_v = p0;
 {
-var98 = nit___nit__MType___as_nullable(var95);
+{ /* Inline parser_nodes#AReturnExpr#n_expr (self) on <self:AReturnExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AReturnExpr___n_expr].val; /* _n_expr on <self:AReturnExpr> */
+var = var2;
+RET_LABEL1:(void)0;
 }
-{
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_94, var98); /* Direct call array#AbstractArray#push on <var_94:Array[MType]>*/
 }
+var_nexpr = var;
 {
-var99 = nit___nit__MClass___get_mtype(var_colit_cla, var_94);
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var5 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var3 = var5;
+RET_LABEL4:(void)0;
 }
-{
-var100 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_ittype, var99);
 }
-var84 = var100;
+var_mpropdef = var3;
+/* <var_mpropdef:nullable MPropDef> isa MMethodDef */
+cltype = type_nit__MMethodDef.color;
+idtype = type_nit__MMethodDef.id;
+if(var_mpropdef == NULL) {
+var6 = 0;
 } else {
-var84 = var_;
-}
-if (var84){
-{
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var103 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var103 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
-}
-var101 = var103;
-RET_LABEL102:(void)0;
-}
-}
-{
-{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
-var106 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
-var104 = var106;
-RET_LABEL105:(void)0;
-}
+if(cltype >= var_mpropdef->type->table_size) {
+var6 = 0;
+} else {
+var6 = var_mpropdef->type->type_table[cltype] == idtype;
 }
-{
-var107 = nit___nit__MType___supertype_to(var_ittype, var101, var104, var_colit_cla);
 }
-var_coltype = var107;
+if (var6){
 {
-{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
-var110 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
-var108 = var110;
-RET_LABEL109:(void)0;
+{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var9 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var7 = var9;
+RET_LABEL8:(void)0;
 }
 }
-var_variables = var108;
-if (var_variables == NULL) {
+if (var7 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 974);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 997);
+fatal_exit(1);
 } else {
-{ /* Inline array#AbstractArrayRead#length (var_variables) on <var_variables:nullable Array[Variable]> */
-if (unlikely(var_variables == NULL)) {
+{ /* Inline model#MSignature#return_mtype (var7) on <var7:nullable MSignature> */
+if (unlikely(var7 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__array, 24);
-show_backtrace(1);
-}
-var113 = var_variables->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_variables:nullable Array[Variable]> */
-var111 = var113;
-RET_LABEL112:(void)0;
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1768);
+fatal_exit(1);
 }
-}
-var114 = 1;
-{
-{ /* Inline kernel#Int#!= (var111,var114) on <var111:Int> */
-var117 = var111 == var114;
-var118 = !var117;
-var115 = var118;
-goto RET_LABEL116;
-RET_LABEL116:(void)0;
+var12 = var7->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var7:nullable MSignature> */
+var10 = var12;
+RET_LABEL11:(void)0;
 }
 }
-if (var115){
-if (varonce119) {
-var120 = varonce119;
+var_ret_type = var10;
 } else {
-var121 = "Type Error: \'for\' expects only one variable when using \'Iterator\'.";
-var122 = 66;
-var123 = standard___standard__NativeString___to_s_with_length(var121, var122);
-var120 = var123;
-varonce119 = var120;
-}
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var120); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
-}
+/* <var_mpropdef:nullable MPropDef> isa MAttributeDef */
+cltype14 = type_nit__MAttributeDef.color;
+idtype15 = type_nit__MAttributeDef.id;
+if(var_mpropdef == NULL) {
+var13 = 0;
 } else {
-if (var_variables == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 977);
-show_backtrace(1);
+if(cltype14 >= var_mpropdef->type->table_size) {
+var13 = 0;
 } else {
-var124 = standard___standard__SequenceRead___Collection__first(var_variables);
-}
-{
-var125 = ((val* (*)(val* self))(var_coltype->class->vft[COLOR_nit__model__MClassType__arguments]))(var_coltype) /* arguments on <var_coltype:MClassType>*/;
+var13 = var_mpropdef->type->type_table[cltype14] == idtype15;
 }
-{
-var126 = standard___standard__SequenceRead___Collection__first(var125);
 }
+if (var13){
 {
-{ /* Inline typing#Variable#declared_type= (var124,var126) on <var124:nullable Object(Variable)> */
-var124->attrs[COLOR_nit__typing__Variable___declared_type].val = var126; /* _declared_type on <var124:nullable Object(Variable)> */
-RET_LABEL127:(void)0;
-}
+{ /* Inline model#MAttributeDef#static_mtype (var_mpropdef) on <var_mpropdef:nullable MPropDef(MAttributeDef)> */
+var18 = var_mpropdef->attrs[COLOR_nit__model__MAttributeDef___static_mtype].val; /* _static_mtype on <var_mpropdef:nullable MPropDef(MAttributeDef)> */
+var16 = var18;
+RET_LABEL17:(void)0;
 }
 }
-var128 = 1;
-var_is_col = var128;
+var_ret_type = var16;
 } else {
+PRINT_ERROR("Runtime error: %s", "Aborted");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1001);
+fatal_exit(1);
 }
-var130 = NULL;
-if (var_mapit_cla == NULL) {
-var131 = 0; /* is null */
+}
+if (var_nexpr == NULL) {
+var19 = 0; /* is null */
 } else {
-var131 = 1; /* arg is null and recv is not */
+var19 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_mapit_cla,var130) on <var_mapit_cla:nullable MClass> */
-var_other89 = var130;
+{ /* Inline kernel#Object#!= (var_nexpr,((val*)NULL)) on <var_nexpr:nullable AExpr> */
+var_other = ((val*)NULL);
 {
-var134 = ((short int (*)(val* self, val* p0))(var_mapit_cla->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mapit_cla, var_other89) /* == on <var_mapit_cla:nullable MClass(MClass)>*/;
+var22 = ((short int(*)(val* self, val* p0))(var_nexpr->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_nexpr, var_other); /* == on <var_nexpr:nullable AExpr(AExpr)>*/
 }
-var135 = !var134;
-var132 = var135;
-goto RET_LABEL133;
-RET_LABEL133:(void)0;
+var23 = !var22;
+var20 = var23;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
-var131 = var132;
+var19 = var20;
 }
-var_136 = var131;
-if (var131){
-var137 = NEW_standard__Array(&type_standard__Array__nit__MType);
-var138 = 2;
-{
-standard___standard__Array___with_capacity(var137, var138); /* Direct call array#Array#with_capacity on <var137:Array[MType]>*/
+if (var19){
+if (var_ret_type == NULL) {
+var24 = 0; /* is null */
+} else {
+var24 = 1; /* arg is null and recv is not */
 }
-var_139 = var137;
+if (0) {
+{ /* Inline kernel#Object#!= (var_ret_type,((val*)NULL)) on <var_ret_type:nullable Object(nullable MType)> */
+var_other = ((val*)NULL);
 {
-{ /* Inline model#MClass#mclass_type (var_objcla) on <var_objcla:nullable MClass(MClass)> */
-var142 = var_objcla->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objcla:nullable MClass(MClass)> */
-if (unlikely(var142 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
+var27 = ((short int(*)(val* self, val* p0))(var_ret_type->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ret_type, var_other); /* == on <var_ret_type:nullable MType(MType)>*/
 }
-var140 = var142;
-RET_LABEL141:(void)0;
+var28 = !var27;
+var25 = var28;
+goto RET_LABEL26;
+RET_LABEL26:(void)0;
 }
+var24 = var25;
 }
+if (var24){
 {
-var143 = nit___nit__MType___as_nullable(var140);
+var29 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var_nexpr, var_ret_type);
 }
+} else {
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_139, var143); /* Direct call array#AbstractArray#push on <var_139:Array[MType]>*/
+var30 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var_nexpr);
 }
-{
-{ /* Inline model#MClass#mclass_type (var_objcla) on <var_objcla:nullable MClass(MClass)> */
-var146 = var_objcla->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objcla:nullable MClass(MClass)> */
-if (unlikely(var146 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
+if (likely(varonce!=NULL)) {
+var31 = varonce;
+} else {
+var32 = "Error: `return` with value in a procedure.";
+var33 = standard___standard__NativeString___to_s_with_length(var32, 42l);
+var31 = var33;
+varonce = var31;
 }
-var144 = var146;
-RET_LABEL145:(void)0;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, var_nexpr, var31); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
 }
-{
-var147 = nit___nit__MType___as_nullable(var144);
+} else {
+if (var_ret_type == NULL) {
+var34 = 0; /* is null */
+} else {
+var34 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_ret_type,((val*)NULL)) on <var_ret_type:nullable Object(nullable MType)> */
+var_other = ((val*)NULL);
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_139, var147); /* Direct call array#AbstractArray#push on <var_139:Array[MType]>*/
+var37 = ((short int(*)(val* self, val* p0))(var_ret_type->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ret_type, var_other); /* == on <var_ret_type:nullable MType(MType)>*/
 }
-{
-var148 = nit___nit__MClass___get_mtype(var_mapit_cla, var_139);
+var38 = !var37;
+var35 = var38;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
 }
-{
-var149 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_ittype, var148);
+var34 = var35;
 }
-var129 = var149;
+if (var34){
+if (likely(varonce39!=NULL)) {
+var40 = varonce39;
 } else {
-var129 = var_136;
+var41 = "Error: `return` without value in a function.";
+var42 = standard___standard__NativeString___to_s_with_length(var41, 44l);
+var40 = var42;
+varonce39 = var40;
 }
-if (var129){
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var152 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var152 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var40); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var150 = var152;
-RET_LABEL151:(void)0;
+goto RET_LABEL;
+} else {
 }
 }
 {
-{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
-var155 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
-var153 = var155;
-RET_LABEL154:(void)0;
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AReturnExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AReturnExpr> */
+RET_LABEL43:(void)0;
 }
 }
-{
-var156 = nit___nit__MType___supertype_to(var_ittype, var150, var153, var_mapit_cla);
+RET_LABEL:;
 }
-var_coltype157 = var156;
+/* method typing#AAbortExpr#accept_typing for (self: AAbortExpr, TypeVisitor) */
+void nit__typing___AAbortExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+var_v = p0;
 {
-{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
-var160 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
-var158 = var160;
-RET_LABEL159:(void)0;
-}
-}
-var_variables161 = var158;
-if (var_variables161 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 986);
-show_backtrace(1);
-} else {
-{ /* Inline array#AbstractArrayRead#length (var_variables161) on <var_variables161:nullable Array[Variable]> */
-if (unlikely(var_variables161 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__array, 24);
-show_backtrace(1);
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AAbortExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AAbortExpr> */
+RET_LABEL1:(void)0;
 }
-var164 = var_variables161->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_variables161:nullable Array[Variable]> */
-var162 = var164;
-RET_LABEL163:(void)0;
 }
+RET_LABEL:;
 }
-var165 = 2;
+/* method typing#AIfExpr#accept_typing for (self: AIfExpr, TypeVisitor) */
+void nit__typing___AIfExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : nullable AExpr */;
+val* var6 /* : nullable AExpr */;
+val* var7 /* : nullable AExpr */;
+val* var9 /* : nullable AExpr */;
+short int var11 /* : Bool */;
+val* var12 /* : nullable AExpr */;
+val* var14 /* : nullable AExpr */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var18 /* : Bool */;
+short int var19 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var20 /* : nullable AExpr */;
+val* var22 /* : nullable AExpr */;
+short int var23 /* : Bool */;
+short int var24 /* : Bool */;
+val* var_other26 /* var other: nullable Object */;
+short int var27 /* : Bool */;
+short int var29 /* : Bool */;
+val* var30 /* : nullable AExpr */;
+val* var32 /* : nullable AExpr */;
+val* var33 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline kernel#Int#!= (var162,var165) on <var162:Int> */
-var168 = var162 == var165;
-var169 = !var168;
-var166 = var169;
-goto RET_LABEL167;
-RET_LABEL167:(void)0;
+{ /* Inline parser_nodes#AIfExpr#n_expr (self) on <self:AIfExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AIfExpr___n_expr].val; /* _n_expr on <self:AIfExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1857);
+fatal_exit(1);
 }
+var = var2;
+RET_LABEL1:(void)0;
 }
-if (var166){
-if (varonce170) {
-var171 = varonce170;
-} else {
-var172 = "Type Error: \'for\' expects two variables when using \'MapIterator\'.";
-var173 = 65;
-var174 = standard___standard__NativeString___to_s_with_length(var172, var173);
-var171 = var174;
-varonce170 = var171;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var171); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
-}
-} else {
-var175 = 0;
-if (var_variables161 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 989);
-show_backtrace(1);
-} else {
-var176 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var_variables161, var175);
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
 {
-var177 = ((val* (*)(val* self))(var_coltype157->class->vft[COLOR_nit__model__MClassType__arguments]))(var_coltype157) /* arguments on <var_coltype157:MClassType>*/;
+{ /* Inline parser_nodes#AIfExpr#n_then (self) on <self:AIfExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__AIfExpr___n_then].val; /* _n_then on <self:AIfExpr> */
+var4 = var6;
+RET_LABEL5:(void)0;
 }
-var178 = 0;
-{
-var179 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var177, var178);
 }
 {
-{ /* Inline typing#Variable#declared_type= (var176,var179) on <var176:nullable Object(Variable)> */
-var176->attrs[COLOR_nit__typing__Variable___declared_type].val = var179; /* _declared_type on <var176:nullable Object(Variable)> */
-RET_LABEL180:(void)0;
-}
-}
-var181 = 1;
-if (var_variables161 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 990);
-show_backtrace(1);
-} else {
-var182 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var_variables161, var181);
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var4); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
 {
-var183 = ((val* (*)(val* self))(var_coltype157->class->vft[COLOR_nit__model__MClassType__arguments]))(var_coltype157) /* arguments on <var_coltype157:MClassType>*/;
+{ /* Inline parser_nodes#AIfExpr#n_else (self) on <self:AIfExpr> */
+var9 = self->attrs[COLOR_nit__parser_nodes__AIfExpr___n_else].val; /* _n_else on <self:AIfExpr> */
+var7 = var9;
+RET_LABEL8:(void)0;
 }
-var184 = 1;
-{
-var185 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var183, var184);
 }
 {
-{ /* Inline typing#Variable#declared_type= (var182,var185) on <var182:nullable Object(Variable)> */
-var182->attrs[COLOR_nit__typing__Variable___declared_type].val = var185; /* _declared_type on <var182:nullable Object(Variable)> */
-RET_LABEL186:(void)0;
-}
-}
-}
-var187 = 1;
-var_is_map = var187;
-} else {
-}
-var189 = !var_is_col;
-var_190 = var189;
-if (var189){
-var191 = !var_is_map;
-var188 = var191;
-} else {
-var188 = var_190;
-}
-if (var188){
-if (varonce192) {
-var193 = varonce192;
-} else {
-var194 = "Type Error: \'for\' expects method \'iterator\' to return an \'Iterator\' or \'MapIterator\' type\'.";
-var195 = 91;
-var196 = standard___standard__NativeString___to_s_with_length(var194, var195);
-var193 = var196;
-varonce192 = var193;
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var7); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var193); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AIfExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AIfExpr> */
+RET_LABEL10:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
 {
-var197 = ((short int (*)(val* self))(var_mtype->class->vft[COLOR_nit__model__MType__need_anchor]))(var_mtype) /* need_anchor on <var_mtype:MType>*/;
+{ /* Inline parser_nodes#AIfExpr#n_then (self) on <self:AIfExpr> */
+var14 = self->attrs[COLOR_nit__parser_nodes__AIfExpr___n_then].val; /* _n_then on <self:AIfExpr> */
+var12 = var14;
+RET_LABEL13:(void)0;
 }
-if (var197){
-{
-var198 = nit__typing___nit__typing__TypeVisitor___anchor_to(var_v, var_mtype);
 }
-var_mtype = var198;
+if (var12 == NULL) {
+var15 = 0; /* is null */
 } else {
+var15 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var12,((val*)NULL)) on <var12:nullable AExpr> */
+var_other = ((val*)NULL);
 {
-var199 = ((val* (*)(val* self))(var_mtype->class->vft[COLOR_nit__model__MType__as_notnullable]))(var_mtype) /* as_notnullable on <var_mtype:MType>*/;
+var18 = ((short int(*)(val* self, val* p0))(var12->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var12, var_other); /* == on <var12:nullable AExpr(AExpr)>*/
 }
-var_mtype = var199;
-/* <var_mtype:MType> isa MClassType */
-cltype201 = type_nit__MClassType.color;
-idtype202 = type_nit__MClassType.id;
-if(cltype201 >= var_mtype->type->table_size) {
-var200 = 0;
-} else {
-var200 = var_mtype->type->type_table[cltype201] == idtype202;
+var19 = !var18;
+var16 = var19;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
-if (unlikely(!var200)) {
-var_class_name = var_mtype == NULL ? "null" : var_mtype->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1004);
-show_backtrace(1);
+var15 = var16;
 }
+var_ = var15;
+if (var15){
 {
-{ /* Inline typing#AForExpr#coltype= (self,var_mtype) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___coltype].val = var_mtype; /* _coltype on <self:AForExpr> */
-RET_LABEL203:(void)0;
-}
-}
-if (varonce204) {
-var205 = varonce204;
-} else {
-var206 = "is_ok";
-var207 = 5;
-var208 = standard___standard__NativeString___to_s_with_length(var206, var207);
-var205 = var208;
-varonce204 = var205;
+{ /* Inline parser_nodes#AIfExpr#n_else (self) on <self:AIfExpr> */
+var22 = self->attrs[COLOR_nit__parser_nodes__AIfExpr___n_else].val; /* _n_else on <self:AIfExpr> */
+var20 = var22;
+RET_LABEL21:(void)0;
 }
-var209 = 0;
-{
-var210 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var205, var209);
 }
-var_ikdef = var210;
-var211 = NULL;
-if (var_ikdef == NULL) {
-var212 = 1; /* is null */
+if (var20 == NULL) {
+var23 = 1; /* is null */
 } else {
-var212 = 0; /* arg is null but recv is not */
+var23 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_ikdef,var211) on <var_ikdef:nullable CallSite> */
-var_other = var211;
+{ /* Inline kernel#Object#== (var20,((val*)NULL)) on <var20:nullable AExpr> */
+var_other26 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_ikdef,var_other) on <var_ikdef:nullable CallSite(CallSite)> */
-var217 = var_ikdef == var_other;
-var215 = var217;
-goto RET_LABEL216;
-RET_LABEL216:(void)0;
-}
+{ /* Inline kernel#Object#is_same_instance (var20,var_other26) on <var20:nullable AExpr(AExpr)> */
+var29 = var20 == var_other26;
+var27 = var29;
+goto RET_LABEL28;
+RET_LABEL28:(void)0;
 }
-var213 = var215;
-goto RET_LABEL214;
-RET_LABEL214:(void)0;
 }
-var212 = var213;
+var24 = var27;
+goto RET_LABEL25;
+RET_LABEL25:(void)0;
 }
-if (var212){
-if (varonce218) {
-var219 = varonce218;
-} else {
-var220 = "Type Error: \'for\' expects a method \'is_ok\' in \'Iterator\' type ";
-var221 = 62;
-var222 = standard___standard__NativeString___to_s_with_length(var220, var221);
-var219 = var222;
-varonce218 = var219;
+var23 = var24;
 }
-if (varonce223) {
-var224 = varonce223;
+var11 = var23;
 } else {
-var225 = ".";
-var226 = 1;
-var227 = standard___standard__NativeString___to_s_with_length(var225, var226);
-var224 = var227;
-varonce223 = var224;
-}
-var228 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var228 = array_instance Array[Object] */
-var229 = 3;
-var230 = NEW_standard__NativeArray(var229, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var230)->values[0] = (val*) var219;
-((struct instance_standard__NativeArray*)var230)->values[1] = (val*) var_ittype;
-((struct instance_standard__NativeArray*)var230)->values[2] = (val*) var224;
-{
-((void (*)(val* self, val* p0, long p1))(var228->class->vft[COLOR_standard__array__Array__with_native]))(var228, var230, var229) /* with_native on <var228:Array[Object]>*/;
-}
+var11 = var_;
 }
+if (var11){
 {
-var231 = ((val* (*)(val* self))(var228->class->vft[COLOR_standard__string__Object__to_s]))(var228) /* to_s on <var228:Array[Object]>*/;
+{ /* Inline parser_nodes#AIfExpr#n_then (self) on <self:AIfExpr> */
+var32 = self->attrs[COLOR_nit__parser_nodes__AIfExpr___n_then].val; /* _n_then on <self:AIfExpr> */
+var30 = var32;
+RET_LABEL31:(void)0;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var231); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
+if (var30 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1037);
+fatal_exit(1);
 } else {
+var33 = ((val*(*)(val* self))(var30->class->vft[COLOR_nit__typing__AExpr__mtype]))(var30); /* mtype on <var30:nullable AExpr>*/
 }
 {
-{ /* Inline typing#AForExpr#method_is_ok= (self,var_ikdef) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_is_ok].val = var_ikdef; /* _method_is_ok on <self:AForExpr> */
-RET_LABEL232:(void)0;
-}
-}
-if (varonce233) {
-var234 = varonce233;
-} else {
-var235 = "item";
-var236 = 4;
-var237 = standard___standard__NativeString___to_s_with_length(var235, var236);
-var234 = var237;
-varonce233 = var234;
+{ /* Inline typing#AExpr#mtype= (self,var33) on <self:AIfExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var33; /* _mtype on <self:AIfExpr> */
+RET_LABEL34:(void)0;
 }
-var238 = 0;
-{
-var239 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var234, var238);
 }
-var_itemdef = var239;
-var240 = NULL;
-if (var_itemdef == NULL) {
-var241 = 1; /* is null */
 } else {
-var241 = 0; /* arg is null but recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#== (var_itemdef,var240) on <var_itemdef:nullable CallSite> */
-var_other = var240;
-{
-{ /* Inline kernel#Object#is_same_instance (var_itemdef,var_other) on <var_itemdef:nullable CallSite(CallSite)> */
-var246 = var_itemdef == var_other;
-var244 = var246;
-goto RET_LABEL245;
-RET_LABEL245:(void)0;
 }
+RET_LABEL:;
 }
-var242 = var244;
-goto RET_LABEL243;
-RET_LABEL243:(void)0;
-}
-var241 = var242;
-}
-if (var241){
-if (varonce247) {
-var248 = varonce247;
-} else {
-var249 = "Type Error: \'for\' expects a method \'item\' in \'Iterator\' type ";
-var250 = 61;
-var251 = standard___standard__NativeString___to_s_with_length(var249, var250);
-var248 = var251;
-varonce247 = var248;
-}
-if (varonce252) {
-var253 = varonce252;
-} else {
-var254 = ".";
-var255 = 1;
-var256 = standard___standard__NativeString___to_s_with_length(var254, var255);
-var253 = var256;
-varonce252 = var253;
-}
-var257 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var257 = array_instance Array[Object] */
-var258 = 3;
-var259 = NEW_standard__NativeArray(var258, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var259)->values[0] = (val*) var248;
-((struct instance_standard__NativeArray*)var259)->values[1] = (val*) var_ittype;
-((struct instance_standard__NativeArray*)var259)->values[2] = (val*) var253;
+/* method typing#AIfexprExpr#accept_typing for (self: AIfexprExpr, TypeVisitor) */
+void nit__typing___AIfexprExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : AExpr */;
+val* var6 /* : AExpr */;
+val* var7 /* : nullable MType */;
+val* var_t1 /* var t1: nullable MType */;
+val* var8 /* : AExpr */;
+val* var10 /* : AExpr */;
+val* var11 /* : nullable MType */;
+val* var_t2 /* var t2: nullable MType */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
+short int var14 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var24 /* : Bool */;
+val* var25 /* : Array[MType] */;
+val* var_26 /* var : Array[MType] */;
+val* var27 /* : nullable MType */;
+val* var_t /* var t: nullable MType */;
+short int var28 /* : Bool */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+short int var33 /* : Bool */;
+val* var34 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce35;
+val* var36 /* : String */;
+char* var37 /* : NativeString */;
+val* var38 /* : FlatString */;
+static val* varonce39;
+val* var40 /* : String */;
+char* var41 /* : NativeString */;
+val* var42 /* : FlatString */;
+static val* varonce43;
+val* var44 /* : String */;
+char* var45 /* : NativeString */;
+val* var46 /* : FlatString */;
+val* var47 /* : String */;
+val* var48 /* : String */;
+val* var49 /* : String */;
+var_v = p0;
 {
-((void (*)(val* self, val* p0, long p1))(var257->class->vft[COLOR_standard__array__Array__with_native]))(var257, var259, var258) /* with_native on <var257:Array[Object]>*/;
+{ /* Inline parser_nodes#AIfexprExpr#n_expr (self) on <self:AIfexprExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_expr].val; /* _n_expr on <self:AIfexprExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1880);
+fatal_exit(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
 {
-var260 = ((val* (*)(val* self))(var257->class->vft[COLOR_standard__string__Object__to_s]))(var257) /* to_s on <var257:Array[Object]>*/;
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var260); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+{ /* Inline parser_nodes#AIfexprExpr#n_then (self) on <self:AIfexprExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_then].val; /* _n_then on <self:AIfexprExpr> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_then");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1886);
+fatal_exit(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
 {
-{ /* Inline typing#AForExpr#method_item= (self,var_itemdef) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_item].val = var_itemdef; /* _method_item on <self:AForExpr> */
-RET_LABEL261:(void)0;
+var7 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var4);
 }
+var_t1 = var7;
+{
+{ /* Inline parser_nodes#AIfexprExpr#n_else (self) on <self:AIfexprExpr> */
+var10 = self->attrs[COLOR_nit__parser_nodes__AIfexprExpr___n_else].val; /* _n_else on <self:AIfexprExpr> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_else");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1892);
+fatal_exit(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
 }
-if (varonce262) {
-var263 = varonce262;
-} else {
-var264 = "next";
-var265 = 4;
-var266 = standard___standard__NativeString___to_s_with_length(var264, var265);
-var263 = var266;
-varonce262 = var263;
 }
-var267 = 0;
 {
-var268 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var263, var267);
+var11 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var8);
 }
-var_nextdef = var268;
-var269 = NULL;
-if (var_nextdef == NULL) {
-var270 = 1; /* is null */
+var_t2 = var11;
+if (var_t1 == NULL) {
+var13 = 1; /* is null */
 } else {
-var270 = 0; /* arg is null but recv is not */
+var13 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_nextdef,var269) on <var_nextdef:nullable CallSite> */
-var_other = var269;
+{ /* Inline kernel#Object#== (var_t1,((val*)NULL)) on <var_t1:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_nextdef,var_other) on <var_nextdef:nullable CallSite(CallSite)> */
-var275 = var_nextdef == var_other;
-var273 = var275;
-goto RET_LABEL274;
-RET_LABEL274:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_t1,var_other) on <var_t1:nullable MType(MType)> */
+var18 = var_t1 == var_other;
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
 }
-var271 = var273;
-goto RET_LABEL272;
-RET_LABEL272:(void)0;
+var14 = var16;
+goto RET_LABEL15;
+RET_LABEL15:(void)0;
 }
-var270 = var271;
+var13 = var14;
 }
-if (var270){
-if (varonce276) {
-var277 = varonce276;
+var_ = var13;
+if (var13){
+var12 = var_;
 } else {
-var278 = "Type Error: \'for\' expects a method \'next\' in \'Iterator\' type ";
-var279 = 61;
-var280 = standard___standard__NativeString___to_s_with_length(var278, var279);
-var277 = var280;
-varonce276 = var277;
-}
-if (varonce281) {
-var282 = varonce281;
+if (var_t2 == NULL) {
+var19 = 1; /* is null */
 } else {
-var283 = ".";
-var284 = 1;
-var285 = standard___standard__NativeString___to_s_with_length(var283, var284);
-var282 = var285;
-varonce281 = var282;
+var19 = 0; /* arg is null but recv is not */
 }
-var286 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var286 = array_instance Array[Object] */
-var287 = 3;
-var288 = NEW_standard__NativeArray(var287, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var288)->values[0] = (val*) var277;
-((struct instance_standard__NativeArray*)var288)->values[1] = (val*) var_ittype;
-((struct instance_standard__NativeArray*)var288)->values[2] = (val*) var282;
+if (0) {
+{ /* Inline kernel#Object#== (var_t2,((val*)NULL)) on <var_t2:nullable MType> */
+var_other = ((val*)NULL);
 {
-((void (*)(val* self, val* p0, long p1))(var286->class->vft[COLOR_standard__array__Array__with_native]))(var286, var288, var287) /* with_native on <var286:Array[Object]>*/;
+{ /* Inline kernel#Object#is_same_instance (var_t2,var_other) on <var_t2:nullable MType(MType)> */
+var24 = var_t2 == var_other;
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
 }
 }
-{
-var289 = ((val* (*)(val* self))(var286->class->vft[COLOR_standard__string__Object__to_s]))(var286) /* to_s on <var286:Array[Object]>*/;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var289); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var19 = var20;
 }
+var12 = var19;
+}
+if (var12){
 goto RET_LABEL;
 } else {
 }
+var25 = NEW_standard__Array(&type_standard__Array__nit__MType);
 {
-{ /* Inline typing#AForExpr#method_next= (self,var_nextdef) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_next].val = var_nextdef; /* _method_next on <self:AForExpr> */
-RET_LABEL290:(void)0;
-}
+standard___standard__Array___with_capacity(var25, 2l); /* Direct call array#Array#with_capacity on <var25:Array[MType]>*/
 }
-if (varonce291) {
-var292 = varonce291;
-} else {
-var293 = "finish";
-var294 = 6;
-var295 = standard___standard__NativeString___to_s_with_length(var293, var294);
-var292 = var295;
-varonce291 = var292;
-}
-var296 = 0;
+var_26 = var25;
 {
-var297 = nit__typing___nit__typing__TypeVisitor___try_get_method(var_v, self, var_ittype, var292, var296);
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_26, var_t1); /* Direct call array#AbstractArray#push on <var_26:Array[MType]>*/
 }
 {
-{ /* Inline typing#AForExpr#method_finish= (self,var297) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_finish].val = var297; /* _method_finish on <self:AForExpr> */
-RET_LABEL298:(void)0;
-}
-}
-if (var_is_map){
-if (varonce299) {
-var300 = varonce299;
-} else {
-var301 = "key";
-var302 = 3;
-var303 = standard___standard__NativeString___to_s_with_length(var301, var302);
-var300 = var303;
-varonce299 = var300;
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_26, var_t2); /* Direct call array#AbstractArray#push on <var_26:Array[MType]>*/
 }
-var304 = 0;
 {
-var305 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var300, var304);
+var27 = nit__typing___nit__typing__TypeVisitor___merge_types(var_v, self, var_26);
 }
-var_keydef = var305;
-var306 = NULL;
-if (var_keydef == NULL) {
-var307 = 1; /* is null */
+var_t = var27;
+if (var_t == NULL) {
+var28 = 1; /* is null */
 } else {
-var307 = 0; /* arg is null but recv is not */
+var28 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_keydef,var306) on <var_keydef:nullable CallSite> */
-var_other = var306;
+{ /* Inline kernel#Object#== (var_t,((val*)NULL)) on <var_t:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_keydef,var_other) on <var_keydef:nullable CallSite(CallSite)> */
-var312 = var_keydef == var_other;
-var310 = var312;
-goto RET_LABEL311;
-RET_LABEL311:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_t,var_other) on <var_t:nullable MType(MType)> */
+var33 = var_t == var_other;
+var31 = var33;
+goto RET_LABEL32;
+RET_LABEL32:(void)0;
 }
 }
-var308 = var310;
-goto RET_LABEL309;
-RET_LABEL309:(void)0;
+var29 = var31;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
 }
-var307 = var308;
+var28 = var29;
 }
-if (var307){
-if (varonce313) {
-var314 = varonce313;
+if (var28){
+if (unlikely(varonce==NULL)) {
+var34 = NEW_standard__NativeArray(5l, &type_standard__NativeArray__standard__String);
+if (likely(varonce35!=NULL)) {
+var36 = varonce35;
 } else {
-var315 = "Type Error: \'for\' expects a method \'key\' in \'Iterator\' type ";
-var316 = 60;
-var317 = standard___standard__NativeString___to_s_with_length(var315, var316);
-var314 = var317;
-varonce313 = var314;
+var37 = "Type Error: ambiguous type `";
+var38 = standard___standard__NativeString___to_s_with_length(var37, 28l);
+var36 = var38;
+varonce35 = var36;
 }
-if (varonce318) {
-var319 = varonce318;
+((struct instance_standard__NativeArray*)var34)->values[0]=var36;
+if (likely(varonce39!=NULL)) {
+var40 = varonce39;
 } else {
-var320 = ".";
-var321 = 1;
-var322 = standard___standard__NativeString___to_s_with_length(var320, var321);
-var319 = var322;
-varonce318 = var319;
+var41 = "` vs `";
+var42 = standard___standard__NativeString___to_s_with_length(var41, 6l);
+var40 = var42;
+varonce39 = var40;
 }
-var323 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var323 = array_instance Array[Object] */
-var324 = 3;
-var325 = NEW_standard__NativeArray(var324, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var325)->values[0] = (val*) var314;
-((struct instance_standard__NativeArray*)var325)->values[1] = (val*) var_ittype;
-((struct instance_standard__NativeArray*)var325)->values[2] = (val*) var319;
-{
-((void (*)(val* self, val* p0, long p1))(var323->class->vft[COLOR_standard__array__Array__with_native]))(var323, var325, var324) /* with_native on <var323:Array[Object]>*/;
+((struct instance_standard__NativeArray*)var34)->values[2]=var40;
+if (likely(varonce43!=NULL)) {
+var44 = varonce43;
+} else {
+var45 = "`.";
+var46 = standard___standard__NativeString___to_s_with_length(var45, 2l);
+var44 = var46;
+varonce43 = var44;
 }
+((struct instance_standard__NativeArray*)var34)->values[4]=var44;
+} else {
+var34 = varonce;
+varonce = NULL;
 }
 {
-var326 = ((val* (*)(val* self))(var323->class->vft[COLOR_standard__string__Object__to_s]))(var323) /* to_s on <var323:Array[Object]>*/;
+var47 = ((val*(*)(val* self))(var_t1->class->vft[COLOR_standard__string__Object__to_s]))(var_t1); /* to_s on <var_t1:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var34)->values[1]=var47;
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var326); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
-}
-goto RET_LABEL;
-} else {
+var48 = ((val*(*)(val* self))(var_t2->class->vft[COLOR_standard__string__Object__to_s]))(var_t2); /* to_s on <var_t2:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var34)->values[3]=var48;
 {
-{ /* Inline typing#AForExpr#method_key= (self,var_keydef) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_key].val = var_keydef; /* _method_key on <self:AForExpr> */
-RET_LABEL327:(void)0;
+var49 = ((val*(*)(val* self))(var34->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var34); /* native_to_s on <var34:NativeArray[String]>*/
 }
+varonce = var34;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var49); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
 } else {
 }
 {
-{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
-var331 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
-var329 = var331;
-RET_LABEL330:(void)0;
-}
-}
-if (var329 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1039);
-show_backtrace(1);
-} else {
-{ /* Inline array#AbstractArrayRead#length (var329) on <var329:nullable Array[Variable]> */
-if (unlikely(var329 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__array, 24);
-show_backtrace(1);
+{ /* Inline typing#AExpr#mtype= (self,var_t) on <self:AIfexprExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_t; /* _mtype on <self:AIfexprExpr> */
+RET_LABEL50:(void)0;
 }
-var334 = var329->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var329:nullable Array[Variable]> */
-var332 = var334;
-RET_LABEL333:(void)0;
 }
+RET_LABEL:;
 }
-var335 = 1;
+/* method typing#ADoExpr#accept_typing for (self: ADoExpr, TypeVisitor) */
+void nit__typing___ADoExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable AExpr */;
+val* var2 /* : nullable AExpr */;
+var_v = p0;
 {
-{ /* Inline kernel#Int#== (var332,var335) on <var332:Int> */
-var338 = var332 == var335;
-var336 = var338;
-goto RET_LABEL337;
-RET_LABEL337:(void)0;
+{ /* Inline parser_nodes#ADoExpr#n_block (self) on <self:ADoExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ADoExpr___n_block].val; /* _n_block on <self:ADoExpr> */
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
-var_339 = var336;
-if (var336){
 {
-{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
-var342 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
-if (unlikely(var342 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1738);
-show_backtrace(1);
-}
-var340 = var342;
-RET_LABEL341:(void)0;
-}
-}
-/* <var340:AExpr> isa ARangeExpr */
-cltype344 = type_nit__ARangeExpr.color;
-idtype345 = type_nit__ARangeExpr.id;
-if(cltype344 >= var340->type->table_size) {
-var343 = 0;
-} else {
-var343 = var340->type->type_table[cltype344] == idtype345;
-}
-var328 = var343;
-} else {
-var328 = var_339;
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
-if (var328){
 {
-{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
-var348 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
-var346 = var348;
-RET_LABEL347:(void)0;
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ADoExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ADoExpr> */
+RET_LABEL3:(void)0;
 }
 }
-if (var346 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1040);
-show_backtrace(1);
-} else {
-var349 = standard___standard__SequenceRead___Collection__first(var346);
+RET_LABEL:;
 }
-var_variable = var349;
+/* method typing#AWhileExpr#accept_typing for (self: AWhileExpr, TypeVisitor) */
+void nit__typing___AWhileExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var3 /* : AExpr */;
+val* var4 /* : nullable MType */;
+val* var5 /* : nullable AExpr */;
+val* var7 /* : nullable AExpr */;
+var_v = p0;
 {
-{ /* Inline typing#Variable#declared_type (var_variable) on <var_variable:Variable> */
-var352 = var_variable->attrs[COLOR_nit__typing__Variable___declared_type].val; /* _declared_type on <var_variable:Variable> */
-var350 = var352;
-RET_LABEL351:(void)0;
-}
+{ /* Inline typing#TypeVisitor#has_loop= (var_v,1) on <var_v:TypeVisitor> */
+var_v->attrs[COLOR_nit__typing__TypeVisitor___has_loop].s = 1; /* _has_loop on <var_v:TypeVisitor> */
+RET_LABEL1:(void)0;
 }
-if (unlikely(var350 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1041);
-show_backtrace(1);
 }
-var_vtype = var350;
 {
-{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
-var355 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
-if (unlikely(var355 == NULL)) {
+{ /* Inline parser_nodes#AWhileExpr#n_expr (self) on <self:AWhileExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_expr].val; /* _n_expr on <self:AWhileExpr> */
+if (unlikely(var3 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1738);
-show_backtrace(1);
-}
-var353 = var355;
-RET_LABEL354:(void)0;
-}
-}
-/* <var353:AExpr> isa AOrangeExpr */
-cltype357 = type_nit__AOrangeExpr.color;
-idtype358 = type_nit__AOrangeExpr.id;
-if(cltype357 >= var353->type->table_size) {
-var356 = 0;
-} else {
-var356 = var353->type->type_table[cltype357] == idtype358;
-}
-if (var356){
-if (varonce359) {
-var360 = varonce359;
-} else {
-var361 = "<";
-var362 = 1;
-var363 = standard___standard__NativeString___to_s_with_length(var361, var362);
-var360 = var363;
-varonce359 = var360;
-}
-var364 = 0;
-{
-var365 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_vtype, var360, var364);
-}
-{
-{ /* Inline typing#AForExpr#method_lt= (self,var365) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_lt].val = var365; /* _method_lt on <self:AForExpr> */
-RET_LABEL366:(void)0;
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1904);
+fatal_exit(1);
 }
+var = var3;
+RET_LABEL2:(void)0;
 }
-} else {
-if (varonce367) {
-var368 = varonce367;
-} else {
-var369 = "<=";
-var370 = 2;
-var371 = standard___standard__NativeString___to_s_with_length(var369, var370);
-var368 = var371;
-varonce367 = var368;
 }
-var372 = 0;
 {
-var373 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_vtype, var368, var372);
+var4 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
 {
-{ /* Inline typing#AForExpr#method_lt= (self,var373) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_lt].val = var373; /* _method_lt on <self:AForExpr> */
-RET_LABEL374:(void)0;
-}
-}
+{ /* Inline parser_nodes#AWhileExpr#n_block (self) on <self:AWhileExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AWhileExpr___n_block].val; /* _n_block on <self:AWhileExpr> */
+var5 = var7;
+RET_LABEL6:(void)0;
 }
-if (varonce375) {
-var376 = varonce375;
-} else {
-var377 = "successor";
-var378 = 9;
-var379 = standard___standard__NativeString___to_s_with_length(var377, var378);
-var376 = var379;
-varonce375 = var376;
 }
-var380 = 0;
 {
-var381 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_vtype, var376, var380);
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var5); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
 {
-{ /* Inline typing#AForExpr#method_successor= (self,var381) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AForExpr___method_successor].val = var381; /* _method_successor on <self:AForExpr> */
-RET_LABEL382:(void)0;
-}
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AWhileExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AWhileExpr> */
+RET_LABEL8:(void)0;
 }
-} else {
 }
 RET_LABEL:;
 }
-/* method typing#AForExpr#accept_typing for (self: AForExpr, TypeVisitor) */
-void nit__typing___AForExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#ALoopExpr#accept_typing for (self: ALoopExpr, TypeVisitor) */
+void nit__typing___ALoopExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var_mtype /* var mtype: nullable MType */;
-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 /* : nullable AExpr */;
-val* var13 /* : nullable AExpr */;
-val* var14 /* : nullable AExpr */;
-val* var16 /* : nullable AExpr */;
-val* var17 /* : nullable MType */;
-short int var19 /* : Bool */;
+val* var /* : nullable AExpr */;
+val* var3 /* : nullable AExpr */;
 var_v = p0;
 {
-{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1738);
-show_backtrace(1);
-}
-var = var2;
+{ /* Inline typing#TypeVisitor#has_loop= (var_v,1) on <var_v:TypeVisitor> */
+var_v->attrs[COLOR_nit__typing__TypeVisitor___has_loop].s = 1; /* _has_loop on <var_v:TypeVisitor> */
 RET_LABEL1:(void)0;
 }
 }
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+{ /* Inline parser_nodes#ALoopExpr#n_block (self) on <self:ALoopExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ALoopExpr___n_block].val; /* _n_block on <self:ALoopExpr> */
+var = var3;
+RET_LABEL2:(void)0;
 }
-var_mtype = var3;
-var4 = NULL;
-if (var_mtype == NULL) {
-var5 = 1; /* is null */
-} else {
-var5 = 0; /* arg is null but recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var4) on <var_mtype:nullable MType> */
-var_other = var4;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
-var10 = var_mtype == var_other;
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
+{
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ALoopExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ALoopExpr> */
+RET_LABEL4:(void)0;
 }
-var6 = var8;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
 }
-var5 = var6;
+RET_LABEL:;
 }
-if (var5){
-goto RET_LABEL;
-} else {
+/* method typing#AForExpr#coltype= for (self: AForExpr, nullable MClassType) */
+void nit__typing___AForExpr___coltype_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___coltype].val = p0; /* _coltype on <self:AForExpr> */
+RET_LABEL:;
 }
-{
-nit__typing___AForExpr___do_type_iterator(self, var_v, var_mtype); /* Direct call typing#AForExpr#do_type_iterator on <self:AForExpr>*/
+/* method typing#AForExpr#method_iterator for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_iterator(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_iterator].val; /* _method_iterator on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-{
-{ /* Inline parser_nodes#AForExpr#n_block (self) on <self:AForExpr> */
-var13 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
-var11 = var13;
-RET_LABEL12:(void)0;
+/* method typing#AForExpr#method_iterator= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_iterator_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_iterator].val = p0; /* _method_iterator on <self:AForExpr> */
+RET_LABEL:;
 }
+/* method typing#AForExpr#method_is_ok for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_is_ok(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_is_ok].val; /* _method_is_ok on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-{
-nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var11); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
+/* method typing#AForExpr#method_is_ok= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_is_ok_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_is_ok].val = p0; /* _method_is_ok on <self:AForExpr> */
+RET_LABEL:;
 }
-{
-{ /* Inline parser_nodes#AForExpr#n_block (self) on <self:AForExpr> */
-var16 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
-var14 = var16;
-RET_LABEL15:(void)0;
+/* method typing#AForExpr#method_item for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_item(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_item].val; /* _method_item on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
+/* method typing#AForExpr#method_item= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_item_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_item].val = p0; /* _method_item on <self:AForExpr> */
+RET_LABEL:;
 }
-if (var14 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1061);
-show_backtrace(1);
-} else {
-var17 = ((val* (*)(val* self))(var14->class->vft[COLOR_nit__typing__AExpr__mtype]))(var14) /* mtype on <var14:nullable AExpr>*/;
+/* method typing#AForExpr#method_next for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_next(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_next].val; /* _method_next on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-{
-{ /* Inline typing#AExpr#mtype= (self,var17) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var17; /* _mtype on <self:AForExpr> */
-RET_LABEL18:(void)0;
+/* method typing#AForExpr#method_next= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_next_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_next].val = p0; /* _method_next on <self:AForExpr> */
+RET_LABEL:;
 }
+/* method typing#AForExpr#method_key for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_key(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_key].val; /* _method_key on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-var19 = 1;
-{
-{ /* Inline typing#AExpr#is_typed= (self,var19) on <self:AForExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var19; /* _is_typed on <self:AForExpr> */
-RET_LABEL20:(void)0;
+/* method typing#AForExpr#method_key= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_key_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_key].val = p0; /* _method_key on <self:AForExpr> */
+RET_LABEL:;
 }
+/* method typing#AForExpr#method_finish for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_finish(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_finish].val; /* _method_finish on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
+/* method typing#AForExpr#method_finish= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_finish_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_finish].val = p0; /* _method_finish on <self:AForExpr> */
 RET_LABEL:;
 }
-/* method typing#AAssertExpr#accept_typing for (self: AAssertExpr, TypeVisitor) */
-void nit__typing___AAssertExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AForExpr#method_lt for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_lt(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_lt].val; /* _method_lt on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method typing#AForExpr#method_lt= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_lt_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_lt].val = p0; /* _method_lt on <self:AForExpr> */
+RET_LABEL:;
+}
+/* method typing#AForExpr#method_successor for (self: AForExpr): nullable CallSite */
+val* nit__typing___AForExpr___method_successor(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AForExpr___method_successor].val; /* _method_successor on <self:AForExpr> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method typing#AForExpr#method_successor= for (self: AForExpr, nullable CallSite) */
+void nit__typing___AForExpr___method_successor_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AForExpr___method_successor].val = p0; /* _method_successor on <self:AForExpr> */
+RET_LABEL:;
+}
+/* method typing#AForExpr#do_type_iterator for (self: AForExpr, TypeVisitor, MType) */
+void nit__typing___AForExpr___do_type_iterator(val* self, val* p0, val* p1) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var4 /* : nullable AExpr */;
-val* var6 /* : nullable AExpr */;
-short int var7 /* : Bool */;
+val* var_mtype /* var mtype: MType */;
+short int var /* : Bool */;
+int cltype;
+int idtype;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+val* var3 /* : FlatString */;
+static val* varonce4;
+val* var5 /* : String */;
+char* var6 /* : NativeString */;
+val* var7 /* : FlatString */;
+val* var8 /* : nullable MClass */;
+val* var_objcla /* var objcla: nullable MClass */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var12 /* : Bool */;
+short int var14 /* : Bool */;
+static val* varonce15;
+val* var16 /* : String */;
+char* var17 /* : NativeString */;
+val* var18 /* : FlatString */;
+val* var19 /* : AExpr */;
+val* var21 /* : AExpr */;
+short int var22 /* : Bool */;
+int cltype23;
+int idtype24;
+val* var25 /* : nullable CallSite */;
+val* var_itdef /* var itdef: nullable CallSite */;
+short int var26 /* : Bool */;
+short int var27 /* : Bool */;
+short int var29 /* : Bool */;
+short int var31 /* : Bool */;
+val* var33 /* : NativeArray[String] */;
+static val* varonce32;
+static val* varonce34;
+val* var35 /* : String */;
+char* var36 /* : NativeString */;
+val* var37 /* : FlatString */;
+static val* varonce38;
+val* var39 /* : String */;
+char* var40 /* : NativeString */;
+val* var41 /* : FlatString */;
+val* var42 /* : String */;
+val* var43 /* : String */;
+val* var45 /* : MSignature */;
+val* var47 /* : MSignature */;
+val* var48 /* : nullable MType */;
+val* var50 /* : nullable MType */;
+val* var_ittype /* var ittype: nullable MType */;
+short int var51 /* : Bool */;
+short int var52 /* : Bool */;
+short int var54 /* : Bool */;
+short int var56 /* : Bool */;
+static val* varonce57;
+val* var58 /* : String */;
+char* var59 /* : NativeString */;
+val* var60 /* : FlatString */;
+static val* varonce61;
+val* var62 /* : String */;
+char* var63 /* : NativeString */;
+val* var64 /* : FlatString */;
+val* var65 /* : nullable MClass */;
+val* var_colit_cla /* var colit_cla: nullable MClass */;
+static val* varonce66;
+val* var67 /* : String */;
+char* var68 /* : NativeString */;
+val* var69 /* : FlatString */;
+val* var70 /* : nullable MClass */;
+val* var_mapit_cla /* var mapit_cla: nullable MClass */;
+short int var_is_col /* var is_col: Bool */;
+short int var_is_map /* var is_map: Bool */;
+short int var71 /* : Bool */;
+short int var72 /* : Bool */;
+short int var73 /* : Bool */;
+val* var_other75 /* var other: nullable Object */;
+short int var76 /* : Bool */;
+short int var77 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var78 /* : Array[MType] */;
+val* var_79 /* var : Array[MType] */;
+val* var80 /* : MClassType */;
+val* var82 /* : MClassType */;
+val* var83 /* : MType */;
+val* var84 /* : MClassType */;
+short int var85 /* : Bool */;
+val* var86 /* : MModule */;
+val* var88 /* : MModule */;
+val* var89 /* : nullable MClassType */;
+val* var91 /* : nullable MClassType */;
+val* var92 /* : MClassType */;
+val* var_coltype /* var coltype: MClassType */;
+val* var93 /* : nullable Array[Variable] */;
+val* var95 /* : nullable Array[Variable] */;
+val* var_variables /* var variables: nullable Array[Variable] */;
+long var96 /* : Int */;
+long var98 /* : Int */;
+short int var99 /* : Bool */;
+short int var101 /* : Bool */;
+short int var102 /* : Bool */;
+static val* varonce103;
+val* var104 /* : String */;
+char* var105 /* : NativeString */;
+val* var106 /* : FlatString */;
+val* var107 /* : nullable Object */;
+val* var108 /* : Array[MType] */;
+val* var109 /* : nullable Object */;
+short int var111 /* : Bool */;
+short int var112 /* : Bool */;
+short int var113 /* : Bool */;
+short int var115 /* : Bool */;
+short int var116 /* : Bool */;
+short int var_117 /* var : Bool */;
+val* var118 /* : Array[MType] */;
+val* var_119 /* var : Array[MType] */;
+val* var120 /* : MClassType */;
+val* var122 /* : MClassType */;
+val* var123 /* : MType */;
+val* var124 /* : MClassType */;
+val* var126 /* : MClassType */;
+val* var127 /* : MType */;
+val* var128 /* : MClassType */;
+short int var129 /* : Bool */;
+val* var130 /* : MModule */;
+val* var132 /* : MModule */;
+val* var133 /* : nullable MClassType */;
+val* var135 /* : nullable MClassType */;
+val* var136 /* : MClassType */;
+val* var_coltype137 /* var coltype: MClassType */;
+val* var138 /* : nullable Array[Variable] */;
+val* var140 /* : nullable Array[Variable] */;
+val* var_variables141 /* var variables: nullable Array[Variable] */;
+long var142 /* : Int */;
+long var144 /* : Int */;
+short int var145 /* : Bool */;
+short int var147 /* : Bool */;
+short int var148 /* : Bool */;
+static val* varonce149;
+val* var150 /* : String */;
+char* var151 /* : NativeString */;
+val* var152 /* : FlatString */;
+val* var153 /* : nullable Object */;
+val* var154 /* : Array[MType] */;
+val* var155 /* : nullable Object */;
+val* var157 /* : nullable Object */;
+val* var158 /* : Array[MType] */;
+val* var159 /* : nullable Object */;
+short int var161 /* : Bool */;
+short int var162 /* : Bool */;
+short int var_163 /* var : Bool */;
+short int var164 /* : Bool */;
+static val* varonce165;
+val* var166 /* : String */;
+char* var167 /* : NativeString */;
+val* var168 /* : FlatString */;
+short int var169 /* : Bool */;
+val* var170 /* : MType */;
+val* var171 /* : MType */;
+short int var172 /* : Bool */;
+int cltype173;
+int idtype174;
+const char* var_class_name;
+static val* varonce176;
+val* var177 /* : String */;
+char* var178 /* : NativeString */;
+val* var179 /* : FlatString */;
+val* var180 /* : nullable CallSite */;
+val* var_ikdef /* var ikdef: nullable CallSite */;
+short int var181 /* : Bool */;
+short int var182 /* : Bool */;
+short int var184 /* : Bool */;
+short int var186 /* : Bool */;
+val* var188 /* : NativeArray[String] */;
+static val* varonce187;
+static val* varonce189;
+val* var190 /* : String */;
+char* var191 /* : NativeString */;
+val* var192 /* : FlatString */;
+static val* varonce193;
+val* var194 /* : String */;
+char* var195 /* : NativeString */;
+val* var196 /* : FlatString */;
+val* var197 /* : String */;
+val* var198 /* : String */;
+static val* varonce200;
+val* var201 /* : String */;
+char* var202 /* : NativeString */;
+val* var203 /* : FlatString */;
+val* var204 /* : nullable CallSite */;
+val* var_itemdef /* var itemdef: nullable CallSite */;
+short int var205 /* : Bool */;
+short int var206 /* : Bool */;
+short int var208 /* : Bool */;
+short int var210 /* : Bool */;
+val* var212 /* : NativeArray[String] */;
+static val* varonce211;
+static val* varonce213;
+val* var214 /* : String */;
+char* var215 /* : NativeString */;
+val* var216 /* : FlatString */;
+static val* varonce217;
+val* var218 /* : String */;
+char* var219 /* : NativeString */;
+val* var220 /* : FlatString */;
+val* var221 /* : String */;
+val* var222 /* : String */;
+static val* varonce224;
+val* var225 /* : String */;
+char* var226 /* : NativeString */;
+val* var227 /* : FlatString */;
+val* var228 /* : nullable CallSite */;
+val* var_nextdef /* var nextdef: nullable CallSite */;
+short int var229 /* : Bool */;
+short int var230 /* : Bool */;
+short int var232 /* : Bool */;
+short int var234 /* : Bool */;
+val* var236 /* : NativeArray[String] */;
+static val* varonce235;
+static val* varonce237;
+val* var238 /* : String */;
+char* var239 /* : NativeString */;
+val* var240 /* : FlatString */;
+static val* varonce241;
+val* var242 /* : String */;
+char* var243 /* : NativeString */;
+val* var244 /* : FlatString */;
+val* var245 /* : String */;
+val* var246 /* : String */;
+static val* varonce248;
+val* var249 /* : String */;
+char* var250 /* : NativeString */;
+val* var251 /* : FlatString */;
+val* var252 /* : nullable CallSite */;
+static val* varonce254;
+val* var255 /* : String */;
+char* var256 /* : NativeString */;
+val* var257 /* : FlatString */;
+val* var258 /* : nullable CallSite */;
+val* var_keydef /* var keydef: nullable CallSite */;
+short int var259 /* : Bool */;
+short int var260 /* : Bool */;
+short int var262 /* : Bool */;
+short int var264 /* : Bool */;
+val* var266 /* : NativeArray[String] */;
+static val* varonce265;
+static val* varonce267;
+val* var268 /* : String */;
+char* var269 /* : NativeString */;
+val* var270 /* : FlatString */;
+static val* varonce271;
+val* var272 /* : String */;
+char* var273 /* : NativeString */;
+val* var274 /* : FlatString */;
+val* var275 /* : String */;
+val* var276 /* : String */;
+short int var278 /* : Bool */;
+val* var279 /* : nullable Array[Variable] */;
+val* var281 /* : nullable Array[Variable] */;
+long var282 /* : Int */;
+long var284 /* : Int */;
+short int var285 /* : Bool */;
+short int var287 /* : Bool */;
+short int var_288 /* var : Bool */;
+val* var289 /* : AExpr */;
+val* var291 /* : AExpr */;
+short int var292 /* : Bool */;
+int cltype293;
+int idtype294;
+val* var295 /* : nullable Array[Variable] */;
+val* var297 /* : nullable Array[Variable] */;
+val* var298 /* : nullable Object */;
+val* var_variable /* var variable: Variable */;
+val* var299 /* : nullable MType */;
+val* var301 /* : nullable MType */;
+val* var_vtype /* var vtype: MType */;
+val* var302 /* : AExpr */;
+val* var304 /* : AExpr */;
+short int var305 /* : Bool */;
+int cltype306;
+int idtype307;
+static val* varonce308;
+val* var309 /* : String */;
+char* var310 /* : NativeString */;
+val* var311 /* : FlatString */;
+val* var312 /* : nullable CallSite */;
+static val* varonce314;
+val* var315 /* : String */;
+char* var316 /* : NativeString */;
+val* var317 /* : FlatString */;
+val* var318 /* : nullable CallSite */;
+static val* varonce320;
+val* var321 /* : String */;
+char* var322 /* : NativeString */;
+val* var323 /* : FlatString */;
+val* var324 /* : nullable CallSite */;
 var_v = p0;
+var_mtype = p1;
+/* <var_mtype:MType> isa MNullType */
+cltype = type_nit__MNullType.color;
+idtype = type_nit__MNullType.id;
+if(cltype >= var_mtype->type->table_size) {
+var = 0;
+} else {
+var = var_mtype->type->type_table[cltype] == idtype;
+}
+if (var){
+if (likely(varonce!=NULL)) {
+var1 = varonce;
+} else {
+var2 = "Type Error: `for` cannot iterate over `null`.";
+var3 = standard___standard__NativeString___to_s_with_length(var2, 45l);
+var1 = var3;
+varonce = var1;
+}
 {
-{ /* Inline parser_nodes#AAssertExpr#n_expr (self) on <self:AAssertExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_expr].val; /* _n_expr on <self:AAssertExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1758);
-show_backtrace(1);
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var1); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var = var2;
-RET_LABEL1:(void)0;
+goto RET_LABEL;
+} else {
 }
+if (likely(varonce4!=NULL)) {
+var5 = varonce4;
+} else {
+var6 = "Object";
+var7 = standard___standard__NativeString___to_s_with_length(var6, 6l);
+var5 = var7;
+varonce4 = var5;
 }
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
+var8 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var5);
 }
+var_objcla = var8;
+if (var_objcla == NULL) {
+var9 = 1; /* is null */
+} else {
+var9 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_objcla,((val*)NULL)) on <var_objcla:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#AAssertExpr#n_else (self) on <self:AAssertExpr> */
-var6 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_else].val; /* _n_else on <self:AAssertExpr> */
-var4 = var6;
-RET_LABEL5:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_objcla,var_other) on <var_objcla:nullable MClass(MClass)> */
+var14 = var_objcla == var_other;
+var12 = var14;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
 }
 }
-{
-nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var4); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
+var10 = var12;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
 }
-var7 = 1;
-{
-{ /* Inline typing#AExpr#is_typed= (self,var7) on <self:AAssertExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var7; /* _is_typed on <self:AAssertExpr> */
-RET_LABEL8:(void)0;
+var9 = var10;
 }
+if (var9){
+goto RET_LABEL;
+} else {
 }
-RET_LABEL:;
+if (likely(varonce15!=NULL)) {
+var16 = varonce15;
+} else {
+var17 = "iterator";
+var18 = standard___standard__NativeString___to_s_with_length(var17, 8l);
+var16 = var18;
+varonce15 = var16;
 }
-/* method typing#AOrExpr#accept_typing for (self: AOrExpr, TypeVisitor) */
-void nit__typing___AOrExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var4 /* : AExpr */;
-val* var6 /* : AExpr */;
-val* var7 /* : nullable MType */;
-val* var8 /* : nullable MType */;
-var_v = p0;
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AOrExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrExpr> */
-if (unlikely(var2 == NULL)) {
+{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
+var21 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
+if (unlikely(var21 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1823);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1940);
+fatal_exit(1);
 }
-var = var2;
-RET_LABEL1:(void)0;
+var19 = var21;
+RET_LABEL20:(void)0;
 }
 }
+/* <var19:AExpr> isa ASelfExpr */
+cltype23 = type_nit__ASelfExpr.color;
+idtype24 = type_nit__ASelfExpr.id;
+if(cltype23 >= var19->type->table_size) {
+var22 = 0;
+} else {
+var22 = var19->type->type_table[cltype23] == idtype24;
+}
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
+var25 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var16, var22);
+}
+var_itdef = var25;
+if (var_itdef == NULL) {
+var26 = 1; /* is null */
+} else {
+var26 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_itdef,((val*)NULL)) on <var_itdef:nullable CallSite> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AOrExpr> */
-var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrExpr> */
-if (unlikely(var6 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1826);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_itdef,var_other) on <var_itdef:nullable CallSite(CallSite)> */
+var31 = var_itdef == var_other;
+var29 = var31;
+goto RET_LABEL30;
+RET_LABEL30:(void)0;
 }
-var4 = var6;
-RET_LABEL5:(void)0;
 }
+var27 = var29;
+goto RET_LABEL28;
+RET_LABEL28:(void)0;
+}
+var26 = var27;
+}
+if (var26){
+if (unlikely(varonce32==NULL)) {
+var33 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce34!=NULL)) {
+var35 = varonce34;
+} else {
+var36 = "Type Error: `for` expects a type providing an `iterator` method, got `";
+var37 = standard___standard__NativeString___to_s_with_length(var36, 70l);
+var35 = var37;
+varonce34 = var35;
+}
+((struct instance_standard__NativeArray*)var33)->values[0]=var35;
+if (likely(varonce38!=NULL)) {
+var39 = varonce38;
+} else {
+var40 = "`.";
+var41 = standard___standard__NativeString___to_s_with_length(var40, 2l);
+var39 = var41;
+varonce38 = var39;
+}
+((struct instance_standard__NativeArray*)var33)->values[2]=var39;
+} else {
+var33 = varonce32;
+varonce32 = NULL;
 }
 {
-var7 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var4);
+var42 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_standard__string__Object__to_s]))(var_mtype); /* to_s on <var_mtype:MType>*/
 }
+((struct instance_standard__NativeArray*)var33)->values[1]=var42;
 {
-var8 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
+var43 = ((val*(*)(val* self))(var33->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var33); /* native_to_s on <var33:NativeArray[String]>*/
 }
+varonce32 = var33;
 {
-{ /* Inline typing#AExpr#mtype= (self,var8) on <self:AOrExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var8; /* _mtype on <self:AOrExpr> */
-RET_LABEL9:(void)0;
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var43); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
+}
+{
+{ /* Inline typing#AForExpr#method_iterator= (self,var_itdef) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_iterator].val = var_itdef; /* _method_iterator on <self:AForExpr> */
+RET_LABEL44:(void)0;
 }
-RET_LABEL:;
 }
-/* method typing#AImpliesExpr#accept_typing for (self: AImpliesExpr, TypeVisitor) */
-void nit__typing___AImpliesExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var4 /* : AExpr */;
-val* var6 /* : AExpr */;
-val* var7 /* : nullable MType */;
-val* var8 /* : nullable MType */;
-var_v = p0;
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AImpliesExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1823);
-show_backtrace(1);
+{ /* Inline typing#CallSite#msignature (var_itdef) on <var_itdef:nullable CallSite(CallSite)> */
+var47 = var_itdef->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_itdef:nullable CallSite(CallSite)> */
+if (unlikely(var47 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 631);
+fatal_exit(1);
 }
-var = var2;
-RET_LABEL1:(void)0;
+var45 = var47;
+RET_LABEL46:(void)0;
 }
 }
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
+{ /* Inline model#MSignature#return_mtype (var45) on <var45:MSignature> */
+var50 = var45->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var45:MSignature> */
+var48 = var50;
+RET_LABEL49:(void)0;
+}
+}
+var_ittype = var48;
+if (var_ittype == NULL) {
+var51 = 1; /* is null */
+} else {
+var51 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_ittype,((val*)NULL)) on <var_ittype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AImpliesExpr> */
-var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
-if (unlikely(var6 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1826);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_ittype,var_other) on <var_ittype:nullable MType(MType)> */
+var56 = var_ittype == var_other;
+var54 = var56;
+goto RET_LABEL55;
+RET_LABEL55:(void)0;
 }
-var4 = var6;
-RET_LABEL5:(void)0;
 }
+var52 = var54;
+goto RET_LABEL53;
+RET_LABEL53:(void)0;
+}
+var51 = var52;
 }
-{
-var7 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var4);
+if (var51){
+if (likely(varonce57!=NULL)) {
+var58 = varonce57;
+} else {
+var59 = "Type Error: `for` expects the method `iterator` to return an `Iterator` or `MapIterator` type.";
+var60 = standard___standard__NativeString___to_s_with_length(var59, 94l);
+var58 = var60;
+varonce57 = var58;
 }
 {
-var8 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var58); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+}
+goto RET_LABEL;
+} else {
+}
+if (likely(varonce61!=NULL)) {
+var62 = varonce61;
+} else {
+var63 = "Iterator";
+var64 = standard___standard__NativeString___to_s_with_length(var63, 8l);
+var62 = var64;
+varonce61 = var62;
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var8) on <self:AImpliesExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var8; /* _mtype on <self:AImpliesExpr> */
-RET_LABEL9:(void)0;
+var65 = nit__typing___nit__typing__TypeVisitor___try_get_mclass(var_v, self, var62);
+}
+var_colit_cla = var65;
+if (likely(varonce66!=NULL)) {
+var67 = varonce66;
+} else {
+var68 = "MapIterator";
+var69 = standard___standard__NativeString___to_s_with_length(var68, 11l);
+var67 = var69;
+varonce66 = var67;
 }
+{
+var70 = nit__typing___nit__typing__TypeVisitor___try_get_mclass(var_v, self, var67);
 }
-RET_LABEL:;
+var_mapit_cla = var70;
+var_is_col = 0;
+var_is_map = 0;
+if (var_colit_cla == NULL) {
+var72 = 0; /* is null */
+} else {
+var72 = 1; /* arg is null and recv is not */
 }
-/* method typing#AAndExpr#accept_typing for (self: AAndExpr, TypeVisitor) */
-void nit__typing___AAndExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var4 /* : AExpr */;
-val* var6 /* : AExpr */;
-val* var7 /* : nullable MType */;
-val* var8 /* : nullable MType */;
-var_v = p0;
+if (0) {
+{ /* Inline kernel#Object#!= (var_colit_cla,((val*)NULL)) on <var_colit_cla:nullable MClass> */
+var_other75 = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AAndExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AAndExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1823);
-show_backtrace(1);
+var76 = ((short int(*)(val* self, val* p0))(var_colit_cla->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_colit_cla, var_other75); /* == on <var_colit_cla:nullable MClass(MClass)>*/
 }
-var = var2;
-RET_LABEL1:(void)0;
+var77 = !var76;
+var73 = var77;
+goto RET_LABEL74;
+RET_LABEL74:(void)0;
 }
+var72 = var73;
 }
+var_ = var72;
+if (var72){
+var78 = NEW_standard__Array(&type_standard__Array__nit__MType);
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
+standard___standard__Array___with_capacity(var78, 1l); /* Direct call array#Array#with_capacity on <var78:Array[MType]>*/
 }
+var_79 = var78;
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AAndExpr> */
-var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AAndExpr> */
-if (unlikely(var6 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1826);
-show_backtrace(1);
+{ /* Inline model#MClass#mclass_type (var_objcla) on <var_objcla:nullable MClass(MClass)> */
+var82 = var_objcla->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objcla:nullable MClass(MClass)> */
+if (unlikely(var82 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
 }
-var4 = var6;
-RET_LABEL5:(void)0;
+var80 = var82;
+RET_LABEL81:(void)0;
 }
 }
 {
-var7 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var4);
+var83 = nit___nit__MType___as_nullable(var80);
 }
 {
-var8 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_79, var83); /* Direct call array#AbstractArray#push on <var_79:Array[MType]>*/
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var8) on <self:AAndExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var8; /* _mtype on <self:AAndExpr> */
-RET_LABEL9:(void)0;
+var84 = nit___nit__MClass___get_mtype(var_colit_cla, var_79);
 }
+{
+var85 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_ittype, var84);
 }
-RET_LABEL:;
+var71 = var85;
+} else {
+var71 = var_;
 }
-/* method typing#ANotExpr#accept_typing for (self: ANotExpr, TypeVisitor) */
-void nit__typing___ANotExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var4 /* : nullable MType */;
-var_v = p0;
+if (var71){
 {
-{ /* Inline parser_nodes#ANotExpr#n_expr (self) on <self:ANotExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1857);
-show_backtrace(1);
+{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
+var88 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var88 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
+fatal_exit(1);
 }
-var = var2;
-RET_LABEL1:(void)0;
+var86 = var88;
+RET_LABEL87:(void)0;
 }
 }
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
+{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
+var91 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
+var89 = var91;
+RET_LABEL90:(void)0;
 }
-{
-var4 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var4) on <self:ANotExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var4; /* _mtype on <self:ANotExpr> */
-RET_LABEL5:(void)0;
+var92 = nit___nit__MType___supertype_to(var_ittype, var86, var89, var_colit_cla);
 }
-}
-RET_LABEL:;
-}
-/* method typing#AOrElseExpr#accept_typing for (self: AOrElseExpr, TypeVisitor) */
-void nit__typing___AOrElseExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var_t1 /* var t1: nullable MType */;
-val* var4 /* : AExpr */;
-val* var6 /* : AExpr */;
-val* var7 /* : nullable MType */;
-val* var_t2 /* var t2: nullable MType */;
-short int var8 /* : Bool */;
-val* var9 /* : null */;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var13 /* : Bool */;
-short int var15 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var16 /* : null */;
-short int var17 /* : Bool */;
-short int var18 /* : Bool */;
-short int var20 /* : Bool */;
-short int var22 /* : Bool */;
-val* var23 /* : MType */;
-val* var24 /* : Array[MType] */;
-long var25 /* : Int */;
-val* var_26 /* var : Array[MType] */;
-val* var27 /* : nullable MType */;
-val* var_t /* var t: nullable MType */;
-val* var28 /* : null */;
-short int var29 /* : Bool */;
-short int var30 /* : Bool */;
-short int var32 /* : Bool */;
-short int var34 /* : Bool */;
-val* var35 /* : MModule */;
-val* var37 /* : MModule */;
-val* var38 /* : MClassType */;
-short int var39 /* : Bool */;
-int cltype;
-int idtype;
-val* var40 /* : MType */;
-var_v = p0;
+var_coltype = var92;
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AOrElseExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1823);
-show_backtrace(1);
+{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
+var95 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
+var93 = var95;
+RET_LABEL94:(void)0;
 }
-var = var2;
-RET_LABEL1:(void)0;
 }
+var_variables = var93;
+if (var_variables == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1138);
+fatal_exit(1);
+} else {
+{ /* Inline array#AbstractArrayRead#length (var_variables) on <var_variables:nullable Array[Variable]> */
+if (unlikely(var_variables == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__array, 26);
+fatal_exit(1);
+}
+var98 = var_variables->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_variables:nullable Array[Variable]> */
+var96 = var98;
+RET_LABEL97:(void)0;
 }
-{
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-var_t1 = var3;
 {
-{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AOrElseExpr> */
-var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrElseExpr> */
-if (unlikely(var6 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1826);
-show_backtrace(1);
+{ /* Inline kernel#Int#!= (var96,1l) on <var96:Int> */
+var101 = var96 == 1l;
+var102 = !var101;
+var99 = var102;
+goto RET_LABEL100;
+RET_LABEL100:(void)0;
 }
-var4 = var6;
-RET_LABEL5:(void)0;
 }
+if (var99){
+if (likely(varonce103!=NULL)) {
+var104 = varonce103;
+} else {
+var105 = "Type Error: `for` expects only one variable when using `Iterator`.";
+var106 = standard___standard__NativeString___to_s_with_length(var105, 66l);
+var104 = var106;
+varonce103 = var104;
 }
 {
-var7 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var4);
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var104); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var_t2 = var7;
-var9 = NULL;
-if (var_t1 == NULL) {
-var10 = 1; /* is null */
 } else {
-var10 = 0; /* arg is null but recv is not */
+if (var_variables == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1141);
+fatal_exit(1);
+} else {
+var107 = standard___standard__SequenceRead___Collection__first(var_variables);
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_t1,var9) on <var_t1:nullable MType> */
-var_other = var9;
 {
-{ /* Inline kernel#Object#is_same_instance (var_t1,var_other) on <var_t1:nullable MType(MType)> */
-var15 = var_t1 == var_other;
-var13 = var15;
-goto RET_LABEL14;
-RET_LABEL14:(void)0;
+var108 = ((val*(*)(val* self))(var_coltype->class->vft[COLOR_nit__model__MClassType__arguments]))(var_coltype); /* arguments on <var_coltype:MClassType>*/
 }
+{
+var109 = standard___standard__SequenceRead___Collection__first(var108);
 }
-var11 = var13;
-goto RET_LABEL12;
-RET_LABEL12:(void)0;
+{
+{ /* Inline typing#Variable#declared_type= (var107,var109) on <var107:nullable Object(Variable)> */
+var107->attrs[COLOR_nit__typing__Variable___declared_type].val = var109; /* _declared_type on <var107:nullable Object(Variable)> */
+RET_LABEL110:(void)0;
 }
-var10 = var11;
 }
-var_ = var10;
-if (var10){
-var8 = var_;
+}
+var_is_col = 1;
 } else {
-var16 = NULL;
-if (var_t2 == NULL) {
-var17 = 1; /* is null */
+}
+if (var_mapit_cla == NULL) {
+var112 = 0; /* is null */
 } else {
-var17 = 0; /* arg is null but recv is not */
+var112 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_t2,var16) on <var_t2:nullable MType> */
-var_other = var16;
+{ /* Inline kernel#Object#!= (var_mapit_cla,((val*)NULL)) on <var_mapit_cla:nullable MClass> */
+var_other75 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_t2,var_other) on <var_t2:nullable MType(MType)> */
-var22 = var_t2 == var_other;
-var20 = var22;
-goto RET_LABEL21;
-RET_LABEL21:(void)0;
+var115 = ((short int(*)(val* self, val* p0))(var_mapit_cla->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mapit_cla, var_other75); /* == on <var_mapit_cla:nullable MClass(MClass)>*/
 }
+var116 = !var115;
+var113 = var116;
+goto RET_LABEL114;
+RET_LABEL114:(void)0;
 }
-var18 = var20;
-goto RET_LABEL19;
-RET_LABEL19:(void)0;
+var112 = var113;
 }
-var17 = var18;
+var_117 = var112;
+if (var112){
+var118 = NEW_standard__Array(&type_standard__Array__nit__MType);
+{
+standard___standard__Array___with_capacity(var118, 2l); /* Direct call array#Array#with_capacity on <var118:Array[MType]>*/
 }
-var8 = var17;
+var_119 = var118;
+{
+{ /* Inline model#MClass#mclass_type (var_objcla) on <var_objcla:nullable MClass(MClass)> */
+var122 = var_objcla->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objcla:nullable MClass(MClass)> */
+if (unlikely(var122 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var120 = var122;
+RET_LABEL121:(void)0;
 }
-if (var8){
-goto RET_LABEL;
-} else {
 }
 {
-var23 = ((val* (*)(val* self))(var_t1->class->vft[COLOR_nit__model__MType__as_notnullable]))(var_t1) /* as_notnullable on <var_t1:nullable MType(MType)>*/;
+var123 = nit___nit__MType___as_nullable(var120);
 }
-var_t1 = var23;
-var24 = NEW_standard__Array(&type_standard__Array__nit__MType);
-var25 = 2;
 {
-standard___standard__Array___with_capacity(var24, var25); /* Direct call array#Array#with_capacity on <var24:Array[MType]>*/
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_119, var123); /* Direct call array#AbstractArray#push on <var_119:Array[MType]>*/
 }
-var_26 = var24;
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_26, var_t1); /* Direct call array#AbstractArray#push on <var_26:Array[MType]>*/
+{ /* Inline model#MClass#mclass_type (var_objcla) on <var_objcla:nullable MClass(MClass)> */
+var126 = var_objcla->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objcla:nullable MClass(MClass)> */
+if (unlikely(var126 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var124 = var126;
+RET_LABEL125:(void)0;
+}
 }
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_26, var_t2); /* Direct call array#AbstractArray#push on <var_26:Array[MType]>*/
+var127 = nit___nit__MType___as_nullable(var124);
 }
 {
-var27 = nit__typing___nit__typing__TypeVisitor___merge_types(var_v, self, var_26);
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_119, var127); /* Direct call array#AbstractArray#push on <var_119:Array[MType]>*/
 }
-var_t = var27;
-var28 = NULL;
-if (var_t == NULL) {
-var29 = 1; /* is null */
+{
+var128 = nit___nit__MClass___get_mtype(var_mapit_cla, var_119);
+}
+{
+var129 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_ittype, var128);
+}
+var111 = var129;
 } else {
-var29 = 0; /* arg is null but recv is not */
+var111 = var_117;
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_t,var28) on <var_t:nullable MType> */
-var_other = var28;
+if (var111){
 {
-{ /* Inline kernel#Object#is_same_instance (var_t,var_other) on <var_t:nullable MType(MType)> */
-var34 = var_t == var_other;
-var32 = var34;
-goto RET_LABEL33;
-RET_LABEL33:(void)0;
-}
+{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
+var132 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var132 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
+fatal_exit(1);
 }
-var30 = var32;
-goto RET_LABEL31;
-RET_LABEL31:(void)0;
+var130 = var132;
+RET_LABEL131:(void)0;
 }
-var29 = var30;
 }
-if (var29){
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var37 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var37 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
+var135 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
+var133 = var135;
+RET_LABEL134:(void)0;
 }
-var35 = var37;
-RET_LABEL36:(void)0;
 }
+{
+var136 = nit___nit__MType___supertype_to(var_ittype, var130, var133, var_mapit_cla);
 }
+var_coltype137 = var136;
 {
-var38 = nit__model___MModule___object_type(var35);
+{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
+var140 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
+var138 = var140;
+RET_LABEL139:(void)0;
 }
-var_t = var38;
-/* <var_t2:nullable MType(MType)> isa MNullableType */
-cltype = type_nit__MNullableType.color;
-idtype = type_nit__MNullableType.id;
-if(cltype >= var_t2->type->table_size) {
-var39 = 0;
+}
+var_variables141 = var138;
+if (var_variables141 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1150);
+fatal_exit(1);
 } else {
-var39 = var_t2->type->type_table[cltype] == idtype;
+{ /* Inline array#AbstractArrayRead#length (var_variables141) on <var_variables141:nullable Array[Variable]> */
+if (unlikely(var_variables141 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__array, 26);
+fatal_exit(1);
+}
+var144 = var_variables141->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_variables141:nullable Array[Variable]> */
+var142 = var144;
+RET_LABEL143:(void)0;
+}
 }
-if (var39){
 {
-var40 = nit___nit__MType___as_nullable(var_t);
+{ /* Inline kernel#Int#!= (var142,2l) on <var142:Int> */
+var147 = var142 == 2l;
+var148 = !var147;
+var145 = var148;
+goto RET_LABEL146;
+RET_LABEL146:(void)0;
 }
-var_t = var40;
-} else {
 }
+if (var145){
+if (likely(varonce149!=NULL)) {
+var150 = varonce149;
 } else {
+var151 = "Type Error: `for` expects two variables when using `MapIterator`.";
+var152 = standard___standard__NativeString___to_s_with_length(var151, 65l);
+var150 = var152;
+varonce149 = var150;
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var_t) on <self:AOrElseExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_t; /* _mtype on <self:AOrElseExpr> */
-RET_LABEL41:(void)0;
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var150); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+} else {
+if (var_variables141 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1153);
+fatal_exit(1);
+} else {
+var153 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var_variables141, 0l);
 }
-RET_LABEL:;
+{
+var154 = ((val*(*)(val* self))(var_coltype137->class->vft[COLOR_nit__model__MClassType__arguments]))(var_coltype137); /* arguments on <var_coltype137:MClassType>*/
 }
-/* method typing#ATrueExpr#accept_typing for (self: ATrueExpr, TypeVisitor) */
-void nit__typing___ATrueExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MType */;
-var_v = p0;
 {
-var = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
+var155 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var154, 0l);
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var) on <self:ATrueExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var; /* _mtype on <self:ATrueExpr> */
-RET_LABEL1:(void)0;
+{ /* Inline typing#Variable#declared_type= (var153,var155) on <var153:nullable Object(Variable)> */
+var153->attrs[COLOR_nit__typing__Variable___declared_type].val = var155; /* _declared_type on <var153:nullable Object(Variable)> */
+RET_LABEL156:(void)0;
 }
 }
-RET_LABEL:;
+if (var_variables141 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1154);
+fatal_exit(1);
+} else {
+var157 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var_variables141, 1l);
 }
-/* method typing#AFalseExpr#accept_typing for (self: AFalseExpr, TypeVisitor) */
-void nit__typing___AFalseExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MType */;
-var_v = p0;
 {
-var = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
+var158 = ((val*(*)(val* self))(var_coltype137->class->vft[COLOR_nit__model__MClassType__arguments]))(var_coltype137); /* arguments on <var_coltype137:MClassType>*/
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var) on <self:AFalseExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var; /* _mtype on <self:AFalseExpr> */
-RET_LABEL1:(void)0;
+var159 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var158, 1l);
 }
+{
+{ /* Inline typing#Variable#declared_type= (var157,var159) on <var157:nullable Object(Variable)> */
+var157->attrs[COLOR_nit__typing__Variable___declared_type].val = var159; /* _declared_type on <var157:nullable Object(Variable)> */
+RET_LABEL160:(void)0;
 }
-RET_LABEL:;
 }
-/* method typing#AIntExpr#accept_typing for (self: AIntExpr, TypeVisitor) */
-void nit__typing___AIntExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-val* var4 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-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 */;
-val* var12 /* : MClassType */;
-val* var14 /* : MClassType */;
-var_v = p0;
-if (varonce) {
-var = varonce;
+}
+var_is_map = 1;
 } else {
-var1 = "Int";
-var2 = 3;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
 }
-{
-var4 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+var162 = !var_is_col;
+var_163 = var162;
+if (var162){
+var164 = !var_is_map;
+var161 = var164;
+} else {
+var161 = var_163;
 }
-var_mclass = var4;
-var5 = NULL;
-if (var_mclass == NULL) {
-var6 = 1; /* is null */
+if (var161){
+if (likely(varonce165!=NULL)) {
+var166 = varonce165;
 } else {
-var6 = 0; /* arg is null but recv is not */
+var167 = "Type Error: `for` expects the method `iterator` to return an `Iterator` or `MapIterator` type.";
+var168 = standard___standard__NativeString___to_s_with_length(var167, 94l);
+var166 = var168;
+varonce165 = var166;
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var5) on <var_mclass:nullable MClass> */
-var_other = var5;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
-var11 = var_mclass == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var166); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+{
+var169 = ((short int(*)(val* self))(var_mtype->class->vft[COLOR_nit__model__MType__need_anchor]))(var_mtype); /* need_anchor on <var_mtype:MType>*/
 }
-var6 = var7;
+if (var169){
+{
+var170 = nit__typing___nit__typing__TypeVisitor___anchor_to(var_v, var_mtype);
 }
-if (var6){
-goto RET_LABEL;
+var_mtype = var170;
 } else {
 }
 {
-{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
-var14 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
+var171 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_nit__model__MType__undecorate]))(var_mtype); /* undecorate on <var_mtype:MType>*/
 }
-var12 = var14;
-RET_LABEL13:(void)0;
+var_mtype = var171;
+/* <var_mtype:MType> isa MClassType */
+cltype173 = type_nit__MClassType.color;
+idtype174 = type_nit__MClassType.id;
+if(cltype173 >= var_mtype->type->table_size) {
+var172 = 0;
+} else {
+var172 = var_mtype->type->type_table[cltype173] == idtype174;
 }
+if (unlikely(!var172)) {
+var_class_name = var_mtype == NULL ? "null" : var_mtype->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MClassType", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1168);
+fatal_exit(1);
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var12) on <self:AIntExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var12; /* _mtype on <self:AIntExpr> */
-RET_LABEL15:(void)0;
-}
+{ /* Inline typing#AForExpr#coltype= (self,var_mtype) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___coltype].val = var_mtype; /* _coltype on <self:AForExpr> */
+RET_LABEL175:(void)0;
 }
-RET_LABEL:;
 }
-/* method typing#AFloatExpr#accept_typing for (self: AFloatExpr, TypeVisitor) */
-void nit__typing___AFloatExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-val* var4 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-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 */;
-val* var12 /* : MClassType */;
-val* var14 /* : MClassType */;
-var_v = p0;
-if (varonce) {
-var = varonce;
+if (likely(varonce176!=NULL)) {
+var177 = varonce176;
 } else {
-var1 = "Float";
-var2 = 5;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
+var178 = "is_ok";
+var179 = standard___standard__NativeString___to_s_with_length(var178, 5l);
+var177 = var179;
+varonce176 = var177;
 }
 {
-var4 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+var180 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var177, 0);
 }
-var_mclass = var4;
-var5 = NULL;
-if (var_mclass == NULL) {
-var6 = 1; /* is null */
+var_ikdef = var180;
+if (var_ikdef == NULL) {
+var181 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var181 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var5) on <var_mclass:nullable MClass> */
-var_other = var5;
+{ /* Inline kernel#Object#== (var_ikdef,((val*)NULL)) on <var_ikdef:nullable CallSite> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
-var11 = var_mclass == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_ikdef,var_other) on <var_ikdef:nullable CallSite(CallSite)> */
+var186 = var_ikdef == var_other;
+var184 = var186;
+goto RET_LABEL185;
+RET_LABEL185:(void)0;
 }
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var182 = var184;
+goto RET_LABEL183;
+RET_LABEL183:(void)0;
 }
-var6 = var7;
+var181 = var182;
 }
-if (var6){
-goto RET_LABEL;
+if (var181){
+if (unlikely(varonce187==NULL)) {
+var188 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce189!=NULL)) {
+var190 = varonce189;
 } else {
+var191 = "Type Error: `for` expects a method `is_ok` in type `";
+var192 = standard___standard__NativeString___to_s_with_length(var191, 52l);
+var190 = var192;
+varonce189 = var190;
 }
-{
-{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
-var14 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
+((struct instance_standard__NativeArray*)var188)->values[0]=var190;
+if (likely(varonce193!=NULL)) {
+var194 = varonce193;
+} else {
+var195 = "`.";
+var196 = standard___standard__NativeString___to_s_with_length(var195, 2l);
+var194 = var196;
+varonce193 = var194;
 }
-var12 = var14;
-RET_LABEL13:(void)0;
+((struct instance_standard__NativeArray*)var188)->values[2]=var194;
+} else {
+var188 = varonce187;
+varonce187 = NULL;
 }
+{
+var197 = ((val*(*)(val* self))(var_ittype->class->vft[COLOR_standard__string__Object__to_s]))(var_ittype); /* to_s on <var_ittype:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var188)->values[1]=var197;
 {
-{ /* Inline typing#AExpr#mtype= (self,var12) on <self:AFloatExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var12; /* _mtype on <self:AFloatExpr> */
-RET_LABEL15:(void)0;
+var198 = ((val*(*)(val* self))(var188->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var188); /* native_to_s on <var188:NativeArray[String]>*/
+}
+varonce187 = var188;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var198); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
 }
-RET_LABEL:;
+{
+{ /* Inline typing#AForExpr#method_is_ok= (self,var_ikdef) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_is_ok].val = var_ikdef; /* _method_is_ok on <self:AForExpr> */
+RET_LABEL199:(void)0;
 }
-/* method typing#ACharExpr#accept_typing for (self: ACharExpr, TypeVisitor) */
-void nit__typing___ACharExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-val* var4 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-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 */;
-val* var12 /* : MClassType */;
-val* var14 /* : MClassType */;
-var_v = p0;
-if (varonce) {
-var = varonce;
+}
+if (likely(varonce200!=NULL)) {
+var201 = varonce200;
 } else {
-var1 = "Char";
-var2 = 4;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
+var202 = "item";
+var203 = standard___standard__NativeString___to_s_with_length(var202, 4l);
+var201 = var203;
+varonce200 = var201;
 }
 {
-var4 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+var204 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var201, 0);
 }
-var_mclass = var4;
-var5 = NULL;
-if (var_mclass == NULL) {
-var6 = 1; /* is null */
+var_itemdef = var204;
+if (var_itemdef == NULL) {
+var205 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var205 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var5) on <var_mclass:nullable MClass> */
-var_other = var5;
+{ /* Inline kernel#Object#== (var_itemdef,((val*)NULL)) on <var_itemdef:nullable CallSite> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
-var11 = var_mclass == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_itemdef,var_other) on <var_itemdef:nullable CallSite(CallSite)> */
+var210 = var_itemdef == var_other;
+var208 = var210;
+goto RET_LABEL209;
+RET_LABEL209:(void)0;
 }
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var206 = var208;
+goto RET_LABEL207;
+RET_LABEL207:(void)0;
 }
-var6 = var7;
+var205 = var206;
 }
-if (var6){
-goto RET_LABEL;
+if (var205){
+if (unlikely(varonce211==NULL)) {
+var212 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce213!=NULL)) {
+var214 = varonce213;
 } else {
+var215 = "Type Error: `for` expects a method `item` in type `";
+var216 = standard___standard__NativeString___to_s_with_length(var215, 51l);
+var214 = var216;
+varonce213 = var214;
 }
-{
-{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
-var14 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
+((struct instance_standard__NativeArray*)var212)->values[0]=var214;
+if (likely(varonce217!=NULL)) {
+var218 = varonce217;
+} else {
+var219 = "`.";
+var220 = standard___standard__NativeString___to_s_with_length(var219, 2l);
+var218 = var220;
+varonce217 = var218;
 }
-var12 = var14;
-RET_LABEL13:(void)0;
+((struct instance_standard__NativeArray*)var212)->values[2]=var218;
+} else {
+var212 = varonce211;
+varonce211 = NULL;
 }
+{
+var221 = ((val*(*)(val* self))(var_ittype->class->vft[COLOR_standard__string__Object__to_s]))(var_ittype); /* to_s on <var_ittype:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var212)->values[1]=var221;
 {
-{ /* Inline typing#AExpr#mtype= (self,var12) on <self:ACharExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var12; /* _mtype on <self:ACharExpr> */
-RET_LABEL15:(void)0;
+var222 = ((val*(*)(val* self))(var212->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var212); /* native_to_s on <var212:NativeArray[String]>*/
+}
+varonce211 = var212;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var222); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
 }
-RET_LABEL:;
+{
+{ /* Inline typing#AForExpr#method_item= (self,var_itemdef) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_item].val = var_itemdef; /* _method_item on <self:AForExpr> */
+RET_LABEL223:(void)0;
 }
-/* method typing#AStringFormExpr#accept_typing for (self: AStringFormExpr, TypeVisitor) */
-void nit__typing___AStringFormExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-val* var4 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-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 */;
-val* var12 /* : MClassType */;
-val* var14 /* : MClassType */;
-var_v = p0;
-if (varonce) {
-var = varonce;
+}
+if (likely(varonce224!=NULL)) {
+var225 = varonce224;
 } else {
-var1 = "String";
-var2 = 6;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
+var226 = "next";
+var227 = standard___standard__NativeString___to_s_with_length(var226, 4l);
+var225 = var227;
+varonce224 = var225;
 }
 {
-var4 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+var228 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var225, 0);
 }
-var_mclass = var4;
-var5 = NULL;
-if (var_mclass == NULL) {
-var6 = 1; /* is null */
+var_nextdef = var228;
+if (var_nextdef == NULL) {
+var229 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var229 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var5) on <var_mclass:nullable MClass> */
-var_other = var5;
+{ /* Inline kernel#Object#== (var_nextdef,((val*)NULL)) on <var_nextdef:nullable CallSite> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
-var11 = var_mclass == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_nextdef,var_other) on <var_nextdef:nullable CallSite(CallSite)> */
+var234 = var_nextdef == var_other;
+var232 = var234;
+goto RET_LABEL233;
+RET_LABEL233:(void)0;
 }
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var230 = var232;
+goto RET_LABEL231;
+RET_LABEL231:(void)0;
 }
-var6 = var7;
+var229 = var230;
 }
-if (var6){
-goto RET_LABEL;
+if (var229){
+if (unlikely(varonce235==NULL)) {
+var236 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce237!=NULL)) {
+var238 = varonce237;
 } else {
+var239 = "Type Error: `for` expects a method `next` in type ";
+var240 = standard___standard__NativeString___to_s_with_length(var239, 50l);
+var238 = var240;
+varonce237 = var238;
 }
-{
-{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
-var14 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
-}
-var12 = var14;
-RET_LABEL13:(void)0;
+((struct instance_standard__NativeArray*)var236)->values[0]=var238;
+if (likely(varonce241!=NULL)) {
+var242 = varonce241;
+} else {
+var243 = ".";
+var244 = standard___standard__NativeString___to_s_with_length(var243, 1l);
+var242 = var244;
+varonce241 = var242;
 }
+((struct instance_standard__NativeArray*)var236)->values[2]=var242;
+} else {
+var236 = varonce235;
+varonce235 = NULL;
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var12) on <self:AStringFormExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var12; /* _mtype on <self:AStringFormExpr> */
-RET_LABEL15:(void)0;
+var245 = ((val*(*)(val* self))(var_ittype->class->vft[COLOR_standard__string__Object__to_s]))(var_ittype); /* to_s on <var_ittype:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var236)->values[1]=var245;
+{
+var246 = ((val*(*)(val* self))(var236->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var236); /* native_to_s on <var236:NativeArray[String]>*/
 }
-RET_LABEL:;
+varonce235 = var236;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var246); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-/* method typing#ASuperstringExpr#accept_typing for (self: ASuperstringExpr, TypeVisitor) */
-void nit__typing___ASuperstringExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-val* var4 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-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 */;
-val* var12 /* : MClassType */;
-val* var14 /* : MClassType */;
-val* var16 /* : ANodes[AExpr] */;
-val* var18 /* : ANodes[AExpr] */;
-val* var_ /* var : ANodes[AExpr] */;
-val* var19 /* : Iterator[ANode] */;
-val* var_20 /* var : Iterator[AExpr] */;
-short int var21 /* : Bool */;
-val* var22 /* : nullable Object */;
-val* var_nexpr /* var nexpr: AExpr */;
-val* var23 /* : MModule */;
-val* var25 /* : MModule */;
-val* var26 /* : MClassType */;
-val* var27 /* : nullable MType */;
-var_v = p0;
-if (varonce) {
-var = varonce;
+goto RET_LABEL;
 } else {
-var1 = "String";
-var2 = 6;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
 }
 {
-var4 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+{ /* Inline typing#AForExpr#method_next= (self,var_nextdef) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_next].val = var_nextdef; /* _method_next on <self:AForExpr> */
+RET_LABEL247:(void)0;
 }
-var_mclass = var4;
-var5 = NULL;
-if (var_mclass == NULL) {
-var6 = 1; /* is null */
+}
+if (likely(varonce248!=NULL)) {
+var249 = varonce248;
 } else {
-var6 = 0; /* arg is null but recv is not */
+var250 = "finish";
+var251 = standard___standard__NativeString___to_s_with_length(var250, 6l);
+var249 = var251;
+varonce248 = var249;
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var5) on <var_mclass:nullable MClass> */
-var_other = var5;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
-var11 = var_mclass == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
-}
+var252 = nit__typing___nit__typing__TypeVisitor___try_get_method(var_v, self, var_ittype, var249, 0);
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+{
+{ /* Inline typing#AForExpr#method_finish= (self,var252) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_finish].val = var252; /* _method_finish on <self:AForExpr> */
+RET_LABEL253:(void)0;
 }
-var6 = var7;
 }
-if (var6){
-goto RET_LABEL;
+if (var_is_map){
+if (likely(varonce254!=NULL)) {
+var255 = varonce254;
 } else {
+var256 = "key";
+var257 = standard___standard__NativeString___to_s_with_length(var256, 3l);
+var255 = var257;
+varonce254 = var255;
 }
 {
-{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
-var14 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 438);
-show_backtrace(1);
-}
-var12 = var14;
-RET_LABEL13:(void)0;
+var258 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_ittype, var255, 0);
 }
+var_keydef = var258;
+if (var_keydef == NULL) {
+var259 = 1; /* is null */
+} else {
+var259 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_keydef,((val*)NULL)) on <var_keydef:nullable CallSite> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#AExpr#mtype= (self,var12) on <self:ASuperstringExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var12; /* _mtype on <self:ASuperstringExpr> */
-RET_LABEL15:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_keydef,var_other) on <var_keydef:nullable CallSite(CallSite)> */
+var264 = var_keydef == var_other;
+var262 = var264;
+goto RET_LABEL263;
+RET_LABEL263:(void)0;
 }
 }
-{
-{ /* Inline parser_nodes#ASuperstringExpr#n_exprs (self) on <self:ASuperstringExpr> */
-var18 = self->attrs[COLOR_nit__parser_nodes__ASuperstringExpr___n_exprs].val; /* _n_exprs on <self:ASuperstringExpr> */
-if (unlikely(var18 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_exprs");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2277);
-show_backtrace(1);
+var260 = var262;
+goto RET_LABEL261;
+RET_LABEL261:(void)0;
 }
-var16 = var18;
-RET_LABEL17:(void)0;
+var259 = var260;
 }
+if (var259){
+if (unlikely(varonce265==NULL)) {
+var266 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce267!=NULL)) {
+var268 = varonce267;
+} else {
+var269 = "Type Error: `for` expects a method `key` in type `";
+var270 = standard___standard__NativeString___to_s_with_length(var269, 50l);
+var268 = var270;
+varonce267 = var268;
 }
-var_ = var16;
-{
-var19 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
+((struct instance_standard__NativeArray*)var266)->values[0]=var268;
+if (likely(varonce271!=NULL)) {
+var272 = varonce271;
+} else {
+var273 = "`.";
+var274 = standard___standard__NativeString___to_s_with_length(var273, 2l);
+var272 = var274;
+varonce271 = var272;
 }
-var_20 = var19;
-for(;;) {
-{
-var21 = ((short int (*)(val* self))(var_20->class->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_20) /* is_ok on <var_20:Iterator[AExpr]>*/;
+((struct instance_standard__NativeArray*)var266)->values[2]=var272;
+} else {
+var266 = varonce265;
+varonce265 = NULL;
 }
-if (var21){
 {
-var22 = ((val* (*)(val* self))(var_20->class->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_20) /* item on <var_20:Iterator[AExpr]>*/;
+var275 = ((val*(*)(val* self))(var_ittype->class->vft[COLOR_standard__string__Object__to_s]))(var_ittype); /* to_s on <var_ittype:nullable MType(MType)>*/
 }
-var_nexpr = var22;
+((struct instance_standard__NativeArray*)var266)->values[1]=var275;
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var25 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var25 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+var276 = ((val*(*)(val* self))(var266->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var266); /* native_to_s on <var266:NativeArray[String]>*/
 }
-var23 = var25;
-RET_LABEL24:(void)0;
+varonce265 = var266;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var276); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
 }
 {
-var26 = nit__model___MModule___object_type(var23);
+{ /* Inline typing#AForExpr#method_key= (self,var_keydef) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_key].val = var_keydef; /* _method_key on <self:AForExpr> */
+RET_LABEL277:(void)0;
 }
-{
-var27 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var_nexpr, var26);
+}
+} else {
 }
 {
-((void (*)(val* self))(var_20->class->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_20) /* next on <var_20:Iterator[AExpr]>*/;
+{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
+var281 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
+var279 = var281;
+RET_LABEL280:(void)0;
 }
+}
+if (var279 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1203);
+fatal_exit(1);
 } else {
-goto BREAK_label;
+{ /* Inline array#AbstractArrayRead#length (var279) on <var279:nullable Array[Variable]> */
+if (unlikely(var279 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__array, 26);
+fatal_exit(1);
+}
+var284 = var279->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var279:nullable Array[Variable]> */
+var282 = var284;
+RET_LABEL283:(void)0;
 }
 }
-BREAK_label: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_20) on <var_20:Iterator[AExpr]> */
-RET_LABEL28:(void)0;
+{ /* Inline kernel#Int#== (var282,1l) on <var282:Int> */
+var287 = var282 == 1l;
+var285 = var287;
+goto RET_LABEL286;
+RET_LABEL286:(void)0;
 }
 }
-RET_LABEL:;
+var_288 = var285;
+if (var285){
+{
+{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
+var291 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
+if (unlikely(var291 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1940);
+fatal_exit(1);
 }
-/* method typing#AArrayExpr#with_capacity_callsite for (self: AArrayExpr): nullable CallSite */
-val* nit__typing___AArrayExpr___with_capacity_callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__AArrayExpr___with_capacity_callsite].val; /* _with_capacity_callsite on <self:AArrayExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+var289 = var291;
+RET_LABEL290:(void)0;
 }
-/* method typing#AArrayExpr#with_capacity_callsite= for (self: AArrayExpr, nullable CallSite) */
-void nit__typing___AArrayExpr___with_capacity_callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__AArrayExpr___with_capacity_callsite].val = p0; /* _with_capacity_callsite on <self:AArrayExpr> */
-RET_LABEL:;
 }
-/* method typing#AArrayExpr#push_callsite for (self: AArrayExpr): nullable CallSite */
-val* nit__typing___AArrayExpr___push_callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__AArrayExpr___push_callsite].val; /* _push_callsite on <self:AArrayExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+/* <var289:AExpr> isa ARangeExpr */
+cltype293 = type_nit__ARangeExpr.color;
+idtype294 = type_nit__ARangeExpr.id;
+if(cltype293 >= var289->type->table_size) {
+var292 = 0;
+} else {
+var292 = var289->type->type_table[cltype293] == idtype294;
 }
-/* method typing#AArrayExpr#push_callsite= for (self: AArrayExpr, nullable CallSite) */
-void nit__typing___AArrayExpr___push_callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__AArrayExpr___push_callsite].val = p0; /* _push_callsite on <self:AArrayExpr> */
-RET_LABEL:;
+var278 = var292;
+} else {
+var278 = var_288;
 }
-/* method typing#AArrayExpr#element_mtype for (self: AArrayExpr): nullable MType */
-val* nit__typing___AArrayExpr___element_mtype(val* self) {
-val* var /* : nullable MType */;
-val* var1 /* : nullable MType */;
-var1 = self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val; /* _element_mtype on <self:AArrayExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+if (var278){
+{
+{ /* Inline scope#AForExpr#variables (self) on <self:AForExpr> */
+var297 = self->attrs[COLOR_nit__scope__AForExpr___variables].val; /* _variables on <self:AForExpr> */
+var295 = var297;
+RET_LABEL296:(void)0;
 }
-/* method typing#AArrayExpr#element_mtype= for (self: AArrayExpr, nullable MType) */
-void nit__typing___AArrayExpr___element_mtype_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val = p0; /* _element_mtype on <self:AArrayExpr> */
-RET_LABEL:;
 }
-/* method typing#AArrayExpr#set_comprehension for (self: AArrayExpr, nullable AExpr) */
-void nit__typing___AArrayExpr___set_comprehension(val* self, val* p0) {
-val* var_n /* var n: nullable AExpr */;
-val* var /* : null */;
-short int var1 /* : Bool */;
-short int var2 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var4 /* : Bool */;
-short int var6 /* : Bool */;
-short int var7 /* : Bool */;
-int cltype;
-int idtype;
-val* var8 /* : nullable AExpr */;
-val* var10 /* : nullable AExpr */;
-short int var11 /* : Bool */;
-int cltype12;
-int idtype13;
-val* var14 /* : nullable AExpr */;
-val* var16 /* : nullable AExpr */;
-val* var17 /* : nullable AExpr */;
-val* var19 /* : nullable AExpr */;
-var_n = p0;
-var = NULL;
-if (var_n == NULL) {
-var1 = 1; /* is null */
+if (var295 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1204);
+fatal_exit(1);
 } else {
-var1 = 0; /* arg is null but recv is not */
+var298 = standard___standard__SequenceRead___Collection__first(var295);
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_n,var) on <var_n:nullable AExpr> */
-var_other = var;
+var_variable = var298;
 {
-{ /* Inline kernel#Object#is_same_instance (var_n,var_other) on <var_n:nullable AExpr(AExpr)> */
-var6 = var_n == var_other;
-var4 = var6;
-goto RET_LABEL5;
-RET_LABEL5:(void)0;
+{ /* Inline typing#Variable#declared_type (var_variable) on <var_variable:Variable> */
+var301 = var_variable->attrs[COLOR_nit__typing__Variable___declared_type].val; /* _declared_type on <var_variable:Variable> */
+var299 = var301;
+RET_LABEL300:(void)0;
 }
 }
-var2 = var4;
-goto RET_LABEL3;
-RET_LABEL3:(void)0;
+if (unlikely(var299 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1205);
+fatal_exit(1);
+}
+var_vtype = var299;
+{
+{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
+var304 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
+if (unlikely(var304 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1940);
+fatal_exit(1);
 }
-var1 = var2;
+var302 = var304;
+RET_LABEL303:(void)0;
 }
-if (var1){
-goto RET_LABEL;
+}
+/* <var302:AExpr> isa AOrangeExpr */
+cltype306 = type_nit__AOrangeExpr.color;
+idtype307 = type_nit__AOrangeExpr.id;
+if(cltype306 >= var302->type->table_size) {
+var305 = 0;
 } else {
-/* <var_n:nullable AExpr(AExpr)> isa AForExpr */
-cltype = type_nit__AForExpr.color;
-idtype = type_nit__AForExpr.id;
-if(cltype >= var_n->type->table_size) {
-var7 = 0;
+var305 = var302->type->type_table[cltype306] == idtype307;
+}
+if (var305){
+if (likely(varonce308!=NULL)) {
+var309 = varonce308;
 } else {
-var7 = var_n->type->type_table[cltype] == idtype;
+var310 = "<";
+var311 = standard___standard__NativeString___to_s_with_length(var310, 1l);
+var309 = var311;
+varonce308 = var309;
 }
-if (var7){
 {
-{ /* Inline parser_nodes#AForExpr#n_block (var_n) on <var_n:nullable AExpr(AForExpr)> */
-var10 = var_n->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <var_n:nullable AExpr(AForExpr)> */
-var8 = var10;
-RET_LABEL9:(void)0;
-}
+var312 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_vtype, var309, 0);
 }
 {
-nit__typing___AArrayExpr___set_comprehension(self, var8); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
+{ /* Inline typing#AForExpr#method_lt= (self,var312) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_lt].val = var312; /* _method_lt on <self:AForExpr> */
+RET_LABEL313:(void)0;
+}
 }
 } else {
-/* <var_n:nullable AExpr(AExpr)> isa AIfExpr */
-cltype12 = type_nit__AIfExpr.color;
-idtype13 = type_nit__AIfExpr.id;
-if(cltype12 >= var_n->type->table_size) {
-var11 = 0;
+if (likely(varonce314!=NULL)) {
+var315 = varonce314;
 } else {
-var11 = var_n->type->type_table[cltype12] == idtype13;
-}
-if (var11){
-{
-{ /* Inline parser_nodes#AIfExpr#n_then (var_n) on <var_n:nullable AExpr(AIfExpr)> */
-var16 = var_n->attrs[COLOR_nit__parser_nodes__AIfExpr___n_then].val; /* _n_then on <var_n:nullable AExpr(AIfExpr)> */
-var14 = var16;
-RET_LABEL15:(void)0;
-}
+var316 = "<=";
+var317 = standard___standard__NativeString___to_s_with_length(var316, 2l);
+var315 = var317;
+varonce314 = var315;
 }
 {
-nit__typing___AArrayExpr___set_comprehension(self, var14); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
+var318 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_vtype, var315, 0);
 }
 {
-{ /* Inline parser_nodes#AIfExpr#n_else (var_n) on <var_n:nullable AExpr(AIfExpr)> */
-var19 = var_n->attrs[COLOR_nit__parser_nodes__AIfExpr___n_else].val; /* _n_else on <var_n:nullable AExpr(AIfExpr)> */
-var17 = var19;
-RET_LABEL18:(void)0;
+{ /* Inline typing#AForExpr#method_lt= (self,var318) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_lt].val = var318; /* _method_lt on <self:AForExpr> */
+RET_LABEL319:(void)0;
 }
 }
-{
-nit__typing___AArrayExpr___set_comprehension(self, var17); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
 }
+if (likely(varonce320!=NULL)) {
+var321 = varonce320;
 } else {
-{
-{ /* Inline typing#AExpr#comprehension= (var_n,self) on <var_n:nullable AExpr(AExpr)> */
-var_n->attrs[COLOR_nit__typing__AExpr___comprehension].val = self; /* _comprehension on <var_n:nullable AExpr(AExpr)> */
-RET_LABEL20:(void)0;
+var322 = "successor";
+var323 = standard___standard__NativeString___to_s_with_length(var322, 9l);
+var321 = var323;
+varonce320 = var321;
 }
+{
+var324 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_vtype, var321, 0);
 }
+{
+{ /* Inline typing#AForExpr#method_successor= (self,var324) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AForExpr___method_successor].val = var324; /* _method_successor on <self:AForExpr> */
+RET_LABEL325:(void)0;
 }
 }
+} else {
 }
 RET_LABEL:;
 }
-/* method typing#AArrayExpr#accept_typing for (self: AArrayExpr, TypeVisitor) */
-void nit__typing___AArrayExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AForExpr#accept_typing for (self: AForExpr, TypeVisitor) */
+void nit__typing___AForExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : null */;
+val* var /* : AExpr */;
+val* var3 /* : AExpr */;
+val* var4 /* : nullable MType */;
 val* var_mtype /* var mtype: nullable MType */;
-val* var1 /* : nullable AType */;
-val* var3 /* : nullable AType */;
-val* var_ntype /* var ntype: nullable AType */;
-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 */;
-val* var10 /* : nullable MType */;
-val* var11 /* : null */;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-val* var_other15 /* var other: nullable Object */;
-short int var16 /* : Bool */;
-short int var18 /* : Bool */;
-val* var19 /* : Array[nullable MType] */;
-val* var_mtypes /* var mtypes: Array[nullable MType] */;
-short int var20 /* : Bool */;
-short int var_useless /* var useless: Bool */;
-val* var21 /* : ANodes[AExpr] */;
-val* var23 /* : ANodes[AExpr] */;
-val* var_ /* var : ANodes[AExpr] */;
-val* var24 /* : Iterator[ANode] */;
-val* var_25 /* var : Iterator[AExpr] */;
-short int var26 /* : Bool */;
-val* var27 /* : nullable Object */;
-val* var_e /* var e: AExpr */;
-val* var28 /* : nullable MType */;
-val* var_t /* var t: nullable MType */;
-val* var29 /* : null */;
-short int var30 /* : Bool */;
-short int var31 /* : Bool */;
-short int var33 /* : Bool */;
-short int var35 /* : Bool */;
-val* var36 /* : null */;
-short int var37 /* : Bool */;
-short int var38 /* : Bool */;
-short int var40 /* : Bool */;
-short int var41 /* : Bool */;
-val* var42 /* : nullable MType */;
-val* var43 /* : null */;
-short int var44 /* : Bool */;
-short int var45 /* : Bool */;
-short int var47 /* : Bool */;
-short int var49 /* : Bool */;
-short int var50 /* : Bool */;
-short int var52 /* : Bool */;
-short int var54 /* : Bool */;
-short int var55 /* : Bool */;
-val* var57 /* : null */;
-short int var58 /* : Bool */;
-short int var59 /* : Bool */;
-short int var61 /* : Bool */;
-short int var63 /* : Bool */;
-val* var64 /* : nullable MType */;
-short int var65 /* : Bool */;
-val* var66 /* : null */;
-short int var67 /* : Bool */;
-short int var68 /* : Bool */;
-short int var70 /* : Bool */;
-short int var72 /* : Bool */;
-short int var_73 /* var : Bool */;
-short int var74 /* : Bool */;
-int cltype;
-int idtype;
-static val* varonce;
-val* var75 /* : String */;
-char* var76 /* : NativeString */;
-long var77 /* : Int */;
-val* var78 /* : FlatString */;
-static val* varonce79;
-val* var80 /* : String */;
-char* var81 /* : NativeString */;
-long var82 /* : Int */;
-val* var83 /* : FlatString */;
-val* var84 /* : String */;
-val* var85 /* : Array[Object] */;
-long var86 /* : Int */;
-val* var87 /* : NativeArray[Object] */;
-val* var88 /* : String */;
-val* var89 /* : null */;
-short int var90 /* : Bool */;
-short int var91 /* : Bool */;
-short int var93 /* : Bool */;
-short int var94 /* : Bool */;
-val* var95 /* : ModelBuilder */;
-val* var97 /* : ModelBuilder */;
-static val* varonce98;
-val* var99 /* : String */;
-char* var100 /* : NativeString */;
-long var101 /* : Int */;
-val* var102 /* : FlatString */;
-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 */;
-val* var113 /* : Array[Object] */;
-long var114 /* : Int */;
-val* var115 /* : NativeArray[Object] */;
-val* var116 /* : String */;
-static val* varonce118;
-val* var119 /* : String */;
-char* var120 /* : NativeString */;
-long var121 /* : Int */;
-val* var122 /* : FlatString */;
-val* var123 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-val* var124 /* : null */;
-short int var125 /* : Bool */;
-short int var126 /* : Bool */;
-short int var128 /* : Bool */;
-short int var130 /* : Bool */;
-val* var131 /* : Array[MType] */;
-long var132 /* : Int */;
-val* var_133 /* var : Array[MType] */;
-val* var134 /* : MClassType */;
-val* var_array_mtype /* var array_mtype: MClassType */;
-static val* varonce135;
-val* var136 /* : String */;
-char* var137 /* : NativeString */;
-long var138 /* : Int */;
-val* var139 /* : FlatString */;
-short int var140 /* : Bool */;
-val* var141 /* : nullable CallSite */;
-static val* varonce143;
-val* var144 /* : String */;
-char* var145 /* : NativeString */;
-long var146 /* : Int */;
-val* var147 /* : FlatString */;
-short int var148 /* : Bool */;
-val* var149 /* : nullable CallSite */;
+short int var10 /* : Bool */;
+val* var11 /* : nullable AExpr */;
+val* var13 /* : nullable AExpr */;
+val* var14 /* : nullable AExpr */;
+val* var16 /* : nullable AExpr */;
+val* var17 /* : nullable MType */;
 var_v = p0;
-var = NULL;
-var_mtype = var;
 {
-{ /* Inline parser_nodes#AArrayExpr#n_type (self) on <self:AArrayExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__AArrayExpr___n_type].val; /* _n_type on <self:AArrayExpr> */
-var1 = var3;
-RET_LABEL2:(void)0;
-}
+{ /* Inline typing#TypeVisitor#has_loop= (var_v,1) on <var_v:TypeVisitor> */
+var_v->attrs[COLOR_nit__typing__TypeVisitor___has_loop].s = 1; /* _has_loop on <var_v:TypeVisitor> */
+RET_LABEL1:(void)0;
 }
-var_ntype = var1;
-var4 = NULL;
-if (var_ntype == NULL) {
-var5 = 0; /* is null */
-} else {
-var5 = 1; /* arg is null and recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_ntype,var4) on <var_ntype:nullable AType> */
-var_other = var4;
 {
-var8 = ((short int (*)(val* self, val* p0))(var_ntype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ntype, var_other) /* == on <var_ntype:nullable AType(AType)>*/;
+{ /* Inline parser_nodes#AForExpr#n_expr (self) on <self:AForExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_expr].val; /* _n_expr on <self:AForExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1940);
+fatal_exit(1);
 }
-var9 = !var8;
-var6 = var9;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var = var3;
+RET_LABEL2:(void)0;
 }
-var5 = var6;
 }
-if (var5){
 {
-var10 = nit__typing___nit__typing__TypeVisitor___resolve_mtype(var_v, var_ntype);
+var4 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-var_mtype = var10;
-var11 = NULL;
+var_mtype = var4;
 if (var_mtype == NULL) {
-var12 = 1; /* is null */
+var5 = 1; /* is null */
 } else {
-var12 = 0; /* arg is null but recv is not */
+var5 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var11) on <var_mtype:nullable MType> */
-var_other15 = var11;
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other15) on <var_mtype:nullable MType(MType)> */
-var18 = var_mtype == var_other15;
-var16 = var18;
-goto RET_LABEL17;
-RET_LABEL17:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
+var10 = var_mtype == var_other;
+var8 = var10;
+goto RET_LABEL9;
+RET_LABEL9:(void)0;
 }
 }
-var13 = var16;
-goto RET_LABEL14;
-RET_LABEL14:(void)0;
+var6 = var8;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
 }
-var12 = var13;
+var5 = var6;
 }
-if (var12){
+if (var5){
 goto RET_LABEL;
 } else {
 }
-} else {
-}
-var19 = NEW_standard__Array(&type_standard__Array__nullable__nit__MType);
 {
-standard___standard__Array___standard__kernel__Object__init(var19); /* Direct call array#Array#init on <var19:Array[nullable MType]>*/
+nit__typing___AForExpr___do_type_iterator(self, var_v, var_mtype); /* Direct call typing#AForExpr#do_type_iterator on <self:AForExpr>*/
 }
-var_mtypes = var19;
-var20 = 0;
-var_useless = var20;
 {
-{ /* Inline parser_nodes#AArrayExpr#n_exprs (self) on <self:AArrayExpr> */
-var23 = self->attrs[COLOR_nit__parser_nodes__AArrayExpr___n_exprs].val; /* _n_exprs on <self:AArrayExpr> */
-if (unlikely(var23 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_exprs");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2160);
-show_backtrace(1);
-}
-var21 = var23;
-RET_LABEL22:(void)0;
+{ /* Inline parser_nodes#AForExpr#n_block (self) on <self:AForExpr> */
+var13 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
+var11 = var13;
+RET_LABEL12:(void)0;
 }
 }
-var_ = var21;
 {
-var24 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var11); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
-var_25 = var24;
-for(;;) {
 {
-var26 = ((short int (*)(val* self))(var_25->class->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_25) /* is_ok on <var_25:Iterator[AExpr]>*/;
+{ /* Inline parser_nodes#AForExpr#n_block (self) on <self:AForExpr> */
+var16 = self->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <self:AForExpr> */
+var14 = var16;
+RET_LABEL15:(void)0;
 }
-if (var26){
-{
-var27 = ((val* (*)(val* self))(var_25->class->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_25) /* item on <var_25:Iterator[AExpr]>*/;
 }
-var_e = var27;
+if (var14 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1227);
+fatal_exit(1);
+} else {
+var17 = ((val*(*)(val* self))(var14->class->vft[COLOR_nit__typing__AExpr__mtype]))(var14); /* mtype on <var14:nullable AExpr>*/
+}
 {
-var28 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var_e);
+{ /* Inline typing#AExpr#mtype= (self,var17) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var17; /* _mtype on <self:AForExpr> */
+RET_LABEL18:(void)0;
 }
-var_t = var28;
-var29 = NULL;
-if (var_t == NULL) {
-var30 = 1; /* is null */
-} else {
-var30 = 0; /* arg is null but recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_t,var29) on <var_t:nullable MType> */
-var_other15 = var29;
 {
-{ /* Inline kernel#Object#is_same_instance (var_t,var_other15) on <var_t:nullable MType(MType)> */
-var35 = var_t == var_other15;
-var33 = var35;
-goto RET_LABEL34;
-RET_LABEL34:(void)0;
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AForExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AForExpr> */
+RET_LABEL19:(void)0;
 }
 }
-var31 = var33;
-goto RET_LABEL32;
-RET_LABEL32:(void)0;
+RET_LABEL:;
 }
-var30 = var31;
+/* method typing#AWithExpr#method_start for (self: AWithExpr): nullable CallSite */
+val* nit__typing___AWithExpr___method_start(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AWithExpr___method_start].val; /* _method_start on <self:AWithExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-if (var30){
-goto RET_LABEL;
-} else {
+/* method typing#AWithExpr#method_start= for (self: AWithExpr, nullable CallSite) */
+void nit__typing___AWithExpr___method_start_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AWithExpr___method_start].val = p0; /* _method_start on <self:AWithExpr> */
+RET_LABEL:;
 }
-{
-nit__typing___AArrayExpr___set_comprehension(self, var_e); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
+/* method typing#AWithExpr#method_finish for (self: AWithExpr): nullable CallSite */
+val* nit__typing___AWithExpr___method_finish(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AWithExpr___method_finish].val; /* _method_finish on <self:AWithExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-var36 = NULL;
-if (var_mtype == NULL) {
-var37 = 0; /* is null */
-} else {
-var37 = 1; /* arg is null and recv is not */
+/* method typing#AWithExpr#method_finish= for (self: AWithExpr, nullable CallSite) */
+void nit__typing___AWithExpr___method_finish_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AWithExpr___method_finish].val = p0; /* _method_finish on <self:AWithExpr> */
+RET_LABEL:;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_mtype,var36) on <var_mtype:nullable MType> */
-var_other = var36;
+/* method typing#AWithExpr#accept_typing for (self: AWithExpr, TypeVisitor) */
+void nit__typing___AWithExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var_mtype /* var mtype: nullable MType */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+static val* varonce;
+val* var10 /* : String */;
+char* var11 /* : NativeString */;
+val* var12 /* : FlatString */;
+val* var13 /* : AExpr */;
+val* var15 /* : AExpr */;
+short int var16 /* : Bool */;
+int cltype;
+int idtype;
+val* var17 /* : nullable CallSite */;
+static val* varonce19;
+val* var20 /* : String */;
+char* var21 /* : NativeString */;
+val* var22 /* : FlatString */;
+val* var23 /* : AExpr */;
+val* var25 /* : AExpr */;
+short int var26 /* : Bool */;
+int cltype27;
+int idtype28;
+val* var29 /* : nullable CallSite */;
+val* var31 /* : nullable AExpr */;
+val* var33 /* : nullable AExpr */;
+val* var34 /* : nullable AExpr */;
+val* var36 /* : nullable AExpr */;
+val* var37 /* : nullable MType */;
+var_v = p0;
 {
-var40 = ((short int (*)(val* self, val* p0))(var_mtype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mtype, var_other) /* == on <var_mtype:nullable MType(MType)>*/;
+{ /* Inline parser_nodes#AWithExpr#n_expr (self) on <self:AWithExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val; /* _n_expr on <self:AWithExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1958);
+fatal_exit(1);
 }
-var41 = !var40;
-var38 = var41;
-goto RET_LABEL39;
-RET_LABEL39:(void)0;
+var = var2;
+RET_LABEL1:(void)0;
 }
-var37 = var38;
 }
-if (var37){
 {
-var42 = nit__typing___nit__typing__TypeVisitor___check_subtype(var_v, var_e, var_t, var_mtype);
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-var43 = NULL;
-if (var42 == NULL) {
-var44 = 1; /* is null */
+var_mtype = var3;
+if (var_mtype == NULL) {
+var4 = 1; /* is null */
 } else {
-var44 = 0; /* arg is null but recv is not */
+var4 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var42,var43) on <var42:nullable MType> */
-var_other15 = var43;
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var42,var_other15) on <var42:nullable MType(MType)> */
-var49 = var42 == var_other15;
-var47 = var49;
-goto RET_LABEL48;
-RET_LABEL48:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
+var9 = var_mtype == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
 }
-var45 = var47;
-goto RET_LABEL46;
-RET_LABEL46:(void)0;
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
-var44 = var45;
+var4 = var5;
 }
-if (var44){
+if (var4){
 goto RET_LABEL;
 } else {
 }
-{
-{ /* Inline kernel#Object#== (var_t,var_mtype) on <var_t:nullable MType(MType)> */
-var_other15 = var_mtype;
-{
-{ /* Inline kernel#Object#is_same_instance (var_t,var_other15) on <var_t:nullable MType(MType)> */
-var54 = var_t == var_other15;
-var52 = var54;
-goto RET_LABEL53;
-RET_LABEL53:(void)0;
+if (likely(varonce!=NULL)) {
+var10 = varonce;
+} else {
+var11 = "start";
+var12 = standard___standard__NativeString___to_s_with_length(var11, 5l);
+var10 = var12;
+varonce = var10;
 }
+{
+{ /* Inline parser_nodes#AWithExpr#n_expr (self) on <self:AWithExpr> */
+var15 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val; /* _n_expr on <self:AWithExpr> */
+if (unlikely(var15 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1958);
+fatal_exit(1);
 }
-var50 = var52;
-goto RET_LABEL51;
-RET_LABEL51:(void)0;
+var13 = var15;
+RET_LABEL14:(void)0;
 }
 }
-if (var50){
-var55 = 1;
-var_useless = var55;
+/* <var13:AExpr> isa ASelfExpr */
+cltype = type_nit__ASelfExpr.color;
+idtype = type_nit__ASelfExpr.id;
+if(cltype >= var13->type->table_size) {
+var16 = 0;
 } else {
+var16 = var13->type->type_table[cltype] == idtype;
 }
-} else {
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_mtypes, var_t); /* Direct call array#Array#add on <var_mtypes:Array[nullable MType]>*/
-}
+var17 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var10, var16);
 }
 {
-((void (*)(val* self))(var_25->class->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_25) /* next on <var_25:Iterator[AExpr]>*/;
+{ /* Inline typing#AWithExpr#method_start= (self,var17) on <self:AWithExpr> */
+self->attrs[COLOR_nit__typing__AWithExpr___method_start].val = var17; /* _method_start on <self:AWithExpr> */
+RET_LABEL18:(void)0;
 }
-} else {
-goto BREAK_label;
 }
+if (likely(varonce19!=NULL)) {
+var20 = varonce19;
+} else {
+var21 = "finish";
+var22 = standard___standard__NativeString___to_s_with_length(var21, 6l);
+var20 = var22;
+varonce19 = var20;
 }
-BREAK_label: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_25) on <var_25:Iterator[AExpr]> */
-RET_LABEL56:(void)0;
+{ /* Inline parser_nodes#AWithExpr#n_expr (self) on <self:AWithExpr> */
+var25 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_expr].val; /* _n_expr on <self:AWithExpr> */
+if (unlikely(var25 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1958);
+fatal_exit(1);
 }
+var23 = var25;
+RET_LABEL24:(void)0;
 }
-var57 = NULL;
-if (var_mtype == NULL) {
-var58 = 1; /* is null */
+}
+/* <var23:AExpr> isa ASelfExpr */
+cltype27 = type_nit__ASelfExpr.color;
+idtype28 = type_nit__ASelfExpr.id;
+if(cltype27 >= var23->type->table_size) {
+var26 = 0;
 } else {
-var58 = 0; /* arg is null but recv is not */
+var26 = var23->type->type_table[cltype27] == idtype28;
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var57) on <var_mtype:nullable MType> */
-var_other15 = var57;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other15) on <var_mtype:nullable MType(MType)> */
-var63 = var_mtype == var_other15;
-var61 = var63;
-goto RET_LABEL62;
-RET_LABEL62:(void)0;
+var29 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var20, var26);
+}
+{
+{ /* Inline typing#AWithExpr#method_finish= (self,var29) on <self:AWithExpr> */
+self->attrs[COLOR_nit__typing__AWithExpr___method_finish].val = var29; /* _method_finish on <self:AWithExpr> */
+RET_LABEL30:(void)0;
 }
 }
-var59 = var61;
-goto RET_LABEL60;
-RET_LABEL60:(void)0;
+{
+{ /* Inline parser_nodes#AWithExpr#n_block (self) on <self:AWithExpr> */
+var33 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_block].val; /* _n_block on <self:AWithExpr> */
+var31 = var33;
+RET_LABEL32:(void)0;
 }
-var58 = var59;
 }
-if (var58){
 {
-var64 = nit__typing___nit__typing__TypeVisitor___merge_types(var_v, self, var_mtypes);
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var31); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
-var_mtype = var64;
-} else {
+{
+{ /* Inline parser_nodes#AWithExpr#n_block (self) on <self:AWithExpr> */
+var36 = self->attrs[COLOR_nit__parser_nodes__AWithExpr___n_block].val; /* _n_block on <self:AWithExpr> */
+var34 = var36;
+RET_LABEL35:(void)0;
 }
-var66 = NULL;
-if (var_mtype == NULL) {
-var67 = 1; /* is null */
+}
+if (var34 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1245);
+fatal_exit(1);
 } else {
-var67 = 0; /* arg is null but recv is not */
+var37 = ((val*(*)(val* self))(var34->class->vft[COLOR_nit__typing__AExpr__mtype]))(var34); /* mtype on <var34:nullable AExpr>*/
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var66) on <var_mtype:nullable MType> */
-var_other15 = var66;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other15) on <var_mtype:nullable MType(MType)> */
-var72 = var_mtype == var_other15;
-var70 = var72;
-goto RET_LABEL71;
-RET_LABEL71:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var37) on <self:AWithExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var37; /* _mtype on <self:AWithExpr> */
+RET_LABEL38:(void)0;
 }
 }
-var68 = var70;
-goto RET_LABEL69;
-RET_LABEL69:(void)0;
+{
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AWithExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AWithExpr> */
+RET_LABEL39:(void)0;
 }
-var67 = var68;
 }
-var_73 = var67;
-if (var67){
-var65 = var_73;
-} else {
-/* <var_mtype:nullable MType(MType)> isa MNullType */
-cltype = type_nit__MNullType.color;
-idtype = type_nit__MNullType.id;
-if(cltype >= var_mtype->type->table_size) {
-var74 = 0;
-} else {
-var74 = var_mtype->type->type_table[cltype] == idtype;
+RET_LABEL:;
 }
-var65 = var74;
+/* method typing#AAssertExpr#accept_typing for (self: AAssertExpr, TypeVisitor) */
+void nit__typing___AAssertExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : nullable AExpr */;
+val* var6 /* : nullable AExpr */;
+var_v = p0;
+{
+{ /* Inline parser_nodes#AAssertExpr#n_expr (self) on <self:AAssertExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_expr].val; /* _n_expr on <self:AAssertExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1978);
+fatal_exit(1);
 }
-if (var65){
-if (varonce) {
-var75 = varonce;
-} else {
-var76 = "Type Error: ambiguous array type ";
-var77 = 33;
-var78 = standard___standard__NativeString___to_s_with_length(var76, var77);
-var75 = var78;
-varonce = var75;
+var = var2;
+RET_LABEL1:(void)0;
 }
-if (varonce79) {
-var80 = varonce79;
-} else {
-var81 = " ";
-var82 = 1;
-var83 = standard___standard__NativeString___to_s_with_length(var81, var82);
-var80 = var83;
-varonce79 = var80;
 }
 {
-var84 = standard__string___Collection___join(var_mtypes, var80);
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
-var85 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var85 = array_instance Array[Object] */
-var86 = 2;
-var87 = NEW_standard__NativeArray(var86, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var87)->values[0] = (val*) var75;
-((struct instance_standard__NativeArray*)var87)->values[1] = (val*) var84;
 {
-((void (*)(val* self, val* p0, long p1))(var85->class->vft[COLOR_standard__array__Array__with_native]))(var85, var87, var86) /* with_native on <var85:Array[Object]>*/;
+{ /* Inline parser_nodes#AAssertExpr#n_else (self) on <self:AAssertExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__AAssertExpr___n_else].val; /* _n_else on <self:AAssertExpr> */
+var4 = var6;
+RET_LABEL5:(void)0;
 }
 }
 {
-var88 = ((val* (*)(val* self))(var85->class->vft[COLOR_standard__string__Object__to_s]))(var85) /* to_s on <var85:Array[Object]>*/;
+nit__typing___nit__typing__TypeVisitor___visit_stmt(var_v, var4); /* Direct call typing#TypeVisitor#visit_stmt on <var_v:TypeVisitor>*/
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var88); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:AAssertExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:AAssertExpr> */
+RET_LABEL7:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
-if (var_useless){
-var89 = NULL;
-if (var_ntype == NULL) {
-var90 = 0; /* is null */
-} else {
-var90 = 1; /* arg is null and recv is not */
+RET_LABEL:;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_ntype,var89) on <var_ntype:nullable AType> */
-var_other = var89;
+/* method typing#AOrExpr#accept_typing for (self: AOrExpr, TypeVisitor) */
+void nit__typing___AOrExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : AExpr */;
+val* var6 /* : AExpr */;
+val* var7 /* : nullable MType */;
+val* var8 /* : nullable MType */;
+var_v = p0;
 {
-var93 = ((short int (*)(val* self, val* p0))(var_ntype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ntype, var_other) /* == on <var_ntype:nullable AType(AType)>*/;
-}
-var94 = !var93;
-var91 = var94;
-goto RET_LABEL92;
-RET_LABEL92:(void)0;
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AOrExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2053);
+fatal_exit(1);
 }
-var90 = var91;
+var = var2;
+RET_LABEL1:(void)0;
 }
-if (unlikely(!var90)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1255);
-show_backtrace(1);
 }
 {
-{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
-var97 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
-if (unlikely(var97 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
-show_backtrace(1);
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
-var95 = var97;
-RET_LABEL96:(void)0;
+{
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AOrExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrExpr> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2059);
+fatal_exit(1);
 }
+var4 = var6;
+RET_LABEL5:(void)0;
 }
-if (varonce98) {
-var99 = varonce98;
-} else {
-var100 = "useless-type";
-var101 = 12;
-var102 = standard___standard__NativeString___to_s_with_length(var100, var101);
-var99 = var102;
-varonce98 = var99;
 }
-if (varonce103) {
-var104 = varonce103;
-} else {
-var105 = "Warning: useless type declaration `";
-var106 = 35;
-var107 = standard___standard__NativeString___to_s_with_length(var105, var106);
-var104 = var107;
-varonce103 = var104;
+{
+var7 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var4);
 }
-if (varonce108) {
-var109 = varonce108;
-} else {
-var110 = "` in literal Array since it can be inferred from the elements type.";
-var111 = 67;
-var112 = standard___standard__NativeString___to_s_with_length(var110, var111);
-var109 = var112;
-varonce108 = var109;
+{
+var8 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
-var113 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var113 = array_instance Array[Object] */
-var114 = 3;
-var115 = NEW_standard__NativeArray(var114, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var115)->values[0] = (val*) var104;
-((struct instance_standard__NativeArray*)var115)->values[1] = (val*) var_mtype;
-((struct instance_standard__NativeArray*)var115)->values[2] = (val*) var109;
 {
-((void (*)(val* self, val* p0, long p1))(var113->class->vft[COLOR_standard__array__Array__with_native]))(var113, var115, var114) /* with_native on <var113:Array[Object]>*/;
+{ /* Inline typing#AExpr#mtype= (self,var8) on <self:AOrExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var8; /* _mtype on <self:AOrExpr> */
+RET_LABEL9:(void)0;
 }
 }
-{
-var116 = ((val* (*)(val* self))(var113->class->vft[COLOR_standard__string__Object__to_s]))(var113) /* to_s on <var113:Array[Object]>*/;
+RET_LABEL:;
 }
+/* method typing#AImpliesExpr#accept_typing for (self: AImpliesExpr, TypeVisitor) */
+void nit__typing___AImpliesExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : AExpr */;
+val* var6 /* : AExpr */;
+val* var7 /* : nullable MType */;
+val* var8 /* : nullable MType */;
+var_v = p0;
 {
-nit___nit__ModelBuilder___warning(var95, var_ntype, var99, var116); /* Direct call modelbuilder_base#ModelBuilder#warning on <var95:ModelBuilder>*/
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AImpliesExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AImpliesExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2053);
+fatal_exit(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
 }
-} else {
 }
 {
-{ /* Inline typing#AArrayExpr#element_mtype= (self,var_mtype) on <self:AArrayExpr> */
-self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val = var_mtype; /* _element_mtype on <self:AArrayExpr> */
-RET_LABEL117:(void)0;
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
+{
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AImpliesExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AImpliesExpr> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2059);
+fatal_exit(1);
+}
+var4 = var6;
+RET_LABEL5:(void)0;
 }
-if (varonce118) {
-var119 = varonce118;
-} else {
-var120 = "Array";
-var121 = 5;
-var122 = standard___standard__NativeString___to_s_with_length(var120, var121);
-var119 = var122;
-varonce118 = var119;
 }
 {
-var123 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var119);
+var7 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var4);
 }
-var_mclass = var123;
-var124 = NULL;
-if (var_mclass == NULL) {
-var125 = 1; /* is null */
-} else {
-var125 = 0; /* arg is null but recv is not */
+{
+var8 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var124) on <var_mclass:nullable MClass> */
-var_other15 = var124;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other15) on <var_mclass:nullable MClass(MClass)> */
-var130 = var_mclass == var_other15;
-var128 = var130;
-goto RET_LABEL129;
-RET_LABEL129:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var8) on <self:AImpliesExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var8; /* _mtype on <self:AImpliesExpr> */
+RET_LABEL9:(void)0;
 }
 }
-var126 = var128;
-goto RET_LABEL127;
-RET_LABEL127:(void)0;
+RET_LABEL:;
+}
+/* method typing#AAndExpr#accept_typing for (self: AAndExpr, TypeVisitor) */
+void nit__typing___AAndExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : AExpr */;
+val* var6 /* : AExpr */;
+val* var7 /* : nullable MType */;
+val* var8 /* : nullable MType */;
+var_v = p0;
+{
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AAndExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AAndExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2053);
+fatal_exit(1);
 }
-var125 = var126;
+var = var2;
+RET_LABEL1:(void)0;
 }
-if (var125){
-goto RET_LABEL;
-} else {
 }
-var131 = NEW_standard__Array(&type_standard__Array__nit__MType);
-var132 = 1;
 {
-standard___standard__Array___with_capacity(var131, var132); /* Direct call array#Array#with_capacity on <var131:Array[MType]>*/
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
-var_133 = var131;
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_133, var_mtype); /* Direct call array#AbstractArray#push on <var_133:Array[MType]>*/
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AAndExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AAndExpr> */
+if (unlikely(var6 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2059);
+fatal_exit(1);
 }
-{
-var134 = nit___nit__MClass___get_mtype(var_mclass, var_133);
+var4 = var6;
+RET_LABEL5:(void)0;
 }
-var_array_mtype = var134;
-if (varonce135) {
-var136 = varonce135;
-} else {
-var137 = "with_capacity";
-var138 = 13;
-var139 = standard___standard__NativeString___to_s_with_length(var137, var138);
-var136 = var139;
-varonce135 = var136;
 }
-var140 = 0;
 {
-var141 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_array_mtype, var136, var140);
+var7 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var4);
 }
 {
-{ /* Inline typing#AArrayExpr#with_capacity_callsite= (self,var141) on <self:AArrayExpr> */
-self->attrs[COLOR_nit__typing__AArrayExpr___with_capacity_callsite].val = var141; /* _with_capacity_callsite on <self:AArrayExpr> */
-RET_LABEL142:(void)0;
+var8 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
+{
+{ /* Inline typing#AExpr#mtype= (self,var8) on <self:AAndExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var8; /* _mtype on <self:AAndExpr> */
+RET_LABEL9:(void)0;
 }
-if (varonce143) {
-var144 = varonce143;
-} else {
-var145 = "push";
-var146 = 4;
-var147 = standard___standard__NativeString___to_s_with_length(var145, var146);
-var144 = var147;
-varonce143 = var144;
 }
-var148 = 0;
-{
-var149 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_array_mtype, var144, var148);
+RET_LABEL:;
 }
+/* method typing#ANotExpr#accept_typing for (self: ANotExpr, TypeVisitor) */
+void nit__typing___ANotExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var4 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline typing#AArrayExpr#push_callsite= (self,var149) on <self:AArrayExpr> */
-self->attrs[COLOR_nit__typing__AArrayExpr___push_callsite].val = var149; /* _push_callsite on <self:AArrayExpr> */
-RET_LABEL150:(void)0;
+{ /* Inline parser_nodes#ANotExpr#n_expr (self) on <self:ANotExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ANotExpr___n_expr].val; /* _n_expr on <self:ANotExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2093);
+fatal_exit(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var_array_mtype) on <self:AArrayExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_array_mtype; /* _mtype on <self:AArrayExpr> */
-RET_LABEL151:(void)0;
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr_bool(var_v, var);
 }
+{
+var4 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
-RET_LABEL:;
+{
+{ /* Inline typing#AExpr#mtype= (self,var4) on <self:ANotExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var4; /* _mtype on <self:ANotExpr> */
+RET_LABEL5:(void)0;
 }
-/* method typing#ARangeExpr#init_callsite for (self: ARangeExpr): nullable CallSite */
-val* nit__typing___ARangeExpr___init_callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__ARangeExpr___init_callsite].val; /* _init_callsite on <self:ARangeExpr> */
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method typing#ARangeExpr#init_callsite= for (self: ARangeExpr, nullable CallSite) */
-void nit__typing___ARangeExpr___init_callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ARangeExpr___init_callsite].val = p0; /* _init_callsite on <self:ARangeExpr> */
 RET_LABEL:;
 }
-/* method typing#ARangeExpr#accept_typing for (self: ARangeExpr, TypeVisitor) */
-void nit__typing___ARangeExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AOrElseExpr#accept_typing for (self: AOrElseExpr, TypeVisitor) */
+void nit__typing___AOrElseExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-val* var4 /* : nullable MClass */;
-val* var_discrete_class /* var discrete_class: nullable MClass */;
-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 */;
-val* var12 /* : MClassDef */;
-val* var14 /* : MClassDef */;
-val* var15 /* : MClassType */;
-val* var17 /* : MClassType */;
-val* var_discrete_type /* var discrete_type: MClassType */;
-val* var18 /* : AExpr */;
-val* var20 /* : AExpr */;
-val* var21 /* : nullable MType */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
 val* var_t1 /* var t1: nullable MType */;
-val* var22 /* : AExpr */;
-val* var24 /* : AExpr */;
-val* var25 /* : nullable MType */;
+val* var4 /* : AExpr */;
+val* var6 /* : AExpr */;
+val* var7 /* : nullable MType */;
 val* var_t2 /* var t2: nullable MType */;
-short int var26 /* : Bool */;
-val* var27 /* : null */;
-short int var28 /* : Bool */;
-short int var29 /* : Bool */;
-short int var31 /* : Bool */;
-short int var33 /* : Bool */;
+short int var8 /* : Bool */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var12 /* : Bool */;
+short int var14 /* : Bool */;
 short int var_ /* var : Bool */;
-val* var34 /* : null */;
-short int var35 /* : Bool */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var21 /* : Bool */;
+int cltype;
+int idtype;
+val* var22 /* : AExpr */;
+val* var24 /* : AExpr */;
+static val* varonce;
+val* var25 /* : String */;
+char* var26 /* : NativeString */;
+val* var27 /* : FlatString */;
+val* var28 /* : AExpr */;
+val* var30 /* : AExpr */;
+short int var31 /* : Bool */;
+val* var32 /* : MType */;
+val* var33 /* : Array[MType] */;
+val* var_34 /* var : Array[MType] */;
+val* var35 /* : nullable MType */;
+val* var_t /* var t: nullable MType */;
 short int var36 /* : Bool */;
-short int var38 /* : Bool */;
-short int var40 /* : Bool */;
-static val* varonce41;
-val* var42 /* : String */;
-char* var43 /* : NativeString */;
-long var44 /* : Int */;
+short int var37 /* : Bool */;
+short int var39 /* : Bool */;
+short int var41 /* : Bool */;
+static val* varonce42;
+val* var43 /* : String */;
+char* var44 /* : NativeString */;
 val* var45 /* : FlatString */;
 val* var46 /* : nullable MClass */;
-val* var_mclass /* var mclass: nullable MClass */;
-val* var47 /* : null */;
+val* var_c /* var c: nullable MClass */;
+short int var47 /* : Bool */;
 short int var48 /* : Bool */;
-short int var49 /* : Bool */;
-short int var51 /* : Bool */;
-short int var53 /* : Bool */;
-short int var54 /* : Bool */;
-val* var55 /* : Array[MType] */;
-long var56 /* : Int */;
-val* var_57 /* var : Array[MType] */;
-val* var58 /* : MClassType */;
-val* var_mtype /* var mtype: nullable Object */;
-short int var59 /* : Bool */;
-val* var60 /* : Array[MType] */;
-long var61 /* : Int */;
-val* var_62 /* var : Array[MType] */;
-val* var63 /* : MClassType */;
-static val* varonce64;
-val* var65 /* : String */;
-char* var66 /* : NativeString */;
-long var67 /* : Int */;
-val* var68 /* : FlatString */;
-static val* varonce69;
-val* var70 /* : String */;
-char* var71 /* : NativeString */;
-long var72 /* : Int */;
-val* var73 /* : FlatString */;
-val* var74 /* : Array[Object] */;
-long var75 /* : Int */;
-val* var76 /* : NativeArray[Object] */;
-val* var77 /* : String */;
-short int var79 /* : Bool */;
-int cltype;
-int idtype;
-static val* varonce80;
-val* var81 /* : String */;
-char* var82 /* : NativeString */;
-long var83 /* : Int */;
-val* var84 /* : FlatString */;
-short int var85 /* : Bool */;
-val* var86 /* : nullable CallSite */;
-val* var_callsite /* var callsite: nullable Object */;
-short int var87 /* : Bool */;
-int cltype88;
-int idtype89;
-static val* varonce90;
-val* var91 /* : String */;
-char* var92 /* : NativeString */;
-long var93 /* : Int */;
-val* var94 /* : FlatString */;
-short int var95 /* : Bool */;
-val* var96 /* : nullable CallSite */;
+short int var50 /* : Bool */;
+short int var52 /* : Bool */;
+val* var53 /* : MClassType */;
+val* var55 /* : MClassType */;
+short int var56 /* : Bool */;
+val* var57 /* : MType */;
 var_v = p0;
-if (varonce) {
-var = varonce;
-} else {
-var1 = "Discrete";
-var2 = 8;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
-}
-{
-var4 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
-}
-var_discrete_class = var4;
-var5 = NULL;
-if (var_discrete_class == NULL) {
-var6 = 1; /* is null */
-} else {
-var6 = 0; /* arg is null but recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#== (var_discrete_class,var5) on <var_discrete_class:nullable MClass> */
-var_other = var5;
-{
-{ /* Inline kernel#Object#is_same_instance (var_discrete_class,var_other) on <var_discrete_class:nullable MClass(MClass)> */
-var11 = var_discrete_class == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
-}
-}
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
-}
-var6 = var7;
-}
-if (var6){
-goto RET_LABEL;
-} else {
-}
-{
-{ /* Inline model#MClass#intro (var_discrete_class) on <var_discrete_class:nullable MClass(MClass)> */
-var14 = var_discrete_class->attrs[COLOR_nit__model__MClass___intro].val; /* _intro on <var_discrete_class:nullable MClass(MClass)> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 423);
-show_backtrace(1);
-}
-var12 = var14;
-RET_LABEL13:(void)0;
-}
-}
-{
-{ /* Inline model#MClassDef#bound_mtype (var12) on <var12:MClassDef> */
-var17 = var12->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var12:MClassDef> */
-if (unlikely(var17 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 495);
-show_backtrace(1);
-}
-var15 = var17;
-RET_LABEL16:(void)0;
-}
-}
-var_discrete_type = var15;
 {
-{ /* Inline parser_nodes#ARangeExpr#n_expr (self) on <self:ARangeExpr> */
-var20 = self->attrs[COLOR_nit__parser_nodes__ARangeExpr___n_expr].val; /* _n_expr on <self:ARangeExpr> */
-if (unlikely(var20 == NULL)) {
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AOrElseExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
+if (unlikely(var2 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2124);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2053);
+fatal_exit(1);
 }
-var18 = var20;
-RET_LABEL19:(void)0;
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
 {
-var21 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var18, var_discrete_type);
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-var_t1 = var21;
+var_t1 = var3;
 {
-{ /* Inline parser_nodes#ARangeExpr#n_expr2 (self) on <self:ARangeExpr> */
-var24 = self->attrs[COLOR_nit__parser_nodes__ARangeExpr___n_expr2].val; /* _n_expr2 on <self:ARangeExpr> */
-if (unlikely(var24 == NULL)) {
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr2 (self) on <self:AOrElseExpr> */
+var6 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr2].val; /* _n_expr2 on <self:AOrElseExpr> */
+if (unlikely(var6 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2127);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2059);
+fatal_exit(1);
 }
-var22 = var24;
-RET_LABEL23:(void)0;
+var4 = var6;
+RET_LABEL5:(void)0;
 }
 }
 {
-var25 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var22, var_discrete_type);
+var7 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var4);
 }
-var_t2 = var25;
-var27 = NULL;
+var_t2 = var7;
 if (var_t1 == NULL) {
-var28 = 1; /* is null */
+var9 = 1; /* is null */
 } else {
-var28 = 0; /* arg is null but recv is not */
+var9 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_t1,var27) on <var_t1:nullable MType> */
-var_other = var27;
+{ /* Inline kernel#Object#== (var_t1,((val*)NULL)) on <var_t1:nullable MType> */
+var_other = ((val*)NULL);
 {
 { /* Inline kernel#Object#is_same_instance (var_t1,var_other) on <var_t1:nullable MType(MType)> */
-var33 = var_t1 == var_other;
-var31 = var33;
-goto RET_LABEL32;
-RET_LABEL32:(void)0;
+var14 = var_t1 == var_other;
+var12 = var14;
+goto RET_LABEL13;
+RET_LABEL13:(void)0;
 }
 }
-var29 = var31;
-goto RET_LABEL30;
-RET_LABEL30:(void)0;
+var10 = var12;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
 }
-var28 = var29;
+var9 = var10;
 }
-var_ = var28;
-if (var28){
-var26 = var_;
+var_ = var9;
+if (var9){
+var8 = var_;
 } else {
-var34 = NULL;
 if (var_t2 == NULL) {
-var35 = 1; /* is null */
+var15 = 1; /* is null */
 } else {
-var35 = 0; /* arg is null but recv is not */
+var15 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_t2,var34) on <var_t2:nullable MType> */
-var_other = var34;
+{ /* Inline kernel#Object#== (var_t2,((val*)NULL)) on <var_t2:nullable MType> */
+var_other = ((val*)NULL);
 {
 { /* Inline kernel#Object#is_same_instance (var_t2,var_other) on <var_t2:nullable MType(MType)> */
-var40 = var_t2 == var_other;
-var38 = var40;
-goto RET_LABEL39;
-RET_LABEL39:(void)0;
+var20 = var_t2 == var_other;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
 }
-var36 = var38;
-goto RET_LABEL37;
-RET_LABEL37:(void)0;
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
-var35 = var36;
+var15 = var16;
 }
-var26 = var35;
+var8 = var15;
 }
-if (var26){
+if (var8){
 goto RET_LABEL;
 } else {
 }
-if (varonce41) {
-var42 = varonce41;
+/* <var_t1:nullable MType(MType)> isa MNullType */
+cltype = type_nit__MNullType.color;
+idtype = type_nit__MNullType.id;
+if(cltype >= var_t1->type->table_size) {
+var21 = 0;
 } else {
-var43 = "Range";
-var44 = 5;
-var45 = standard___standard__NativeString___to_s_with_length(var43, var44);
-var42 = var45;
-varonce41 = var42;
+var21 = var_t1->type->type_table[cltype] == idtype;
 }
+if (var21){
 {
-var46 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var42);
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AOrElseExpr> */
+var24 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
+if (unlikely(var24 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2053);
+fatal_exit(1);
 }
-var_mclass = var46;
-var47 = NULL;
-if (var_mclass == NULL) {
-var48 = 1; /* is null */
+var22 = var24;
+RET_LABEL23:(void)0;
+}
+}
+if (likely(varonce!=NULL)) {
+var25 = varonce;
 } else {
-var48 = 0; /* arg is null but recv is not */
+var26 = "Type Error: `or else` on `null`.";
+var27 = standard___standard__NativeString___to_s_with_length(var26, 32l);
+var25 = var27;
+varonce = var25;
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mclass,var47) on <var_mclass:nullable MClass> */
-var_other = var47;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
-var53 = var_mclass == var_other;
-var51 = var53;
-goto RET_LABEL52;
-RET_LABEL52:(void)0;
+nit__typing___nit__typing__TypeVisitor___error(var_v, var22, var25); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+} else {
+{
+{ /* Inline parser_nodes#ABinBoolExpr#n_expr (self) on <self:AOrElseExpr> */
+var30 = self->attrs[COLOR_nit__parser_nodes__ABinBoolExpr___n_expr].val; /* _n_expr on <self:AOrElseExpr> */
+if (unlikely(var30 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2053);
+fatal_exit(1);
 }
-var49 = var51;
-goto RET_LABEL50;
-RET_LABEL50:(void)0;
+var28 = var30;
+RET_LABEL29:(void)0;
 }
-var48 = var49;
 }
-if (var48){
-goto RET_LABEL;
+{
+var31 = nit__typing___nit__typing__TypeVisitor___check_can_be_null(var_v, var28, var_t1);
+}
+if (var31){
+{
+var32 = ((val*(*)(val* self))(var_t1->class->vft[COLOR_nit__model__MType__as_notnull]))(var_t1); /* as_notnull on <var_t1:nullable MType(MType)>*/
+}
+var_t1 = var32;
 } else {
 }
+}
+var33 = NEW_standard__Array(&type_standard__Array__nit__MType);
 {
-var54 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_t1, var_t2);
+standard___standard__Array___with_capacity(var33, 2l); /* Direct call array#Array#with_capacity on <var33:Array[MType]>*/
 }
-if (var54){
-var55 = NEW_standard__Array(&type_standard__Array__nit__MType);
-var56 = 1;
+var_34 = var33;
 {
-standard___standard__Array___with_capacity(var55, var56); /* Direct call array#Array#with_capacity on <var55:Array[MType]>*/
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_34, var_t1); /* Direct call array#AbstractArray#push on <var_34:Array[MType]>*/
 }
-var_57 = var55;
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_57, var_t2); /* Direct call array#AbstractArray#push on <var_57:Array[MType]>*/
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_34, var_t2); /* Direct call array#AbstractArray#push on <var_34:Array[MType]>*/
 }
 {
-var58 = nit___nit__MClass___get_mtype(var_mclass, var_57);
+var35 = nit__typing___nit__typing__TypeVisitor___merge_types(var_v, self, var_34);
 }
-var_mtype = var58;
+var_t = var35;
+if (var_t == NULL) {
+var36 = 1; /* is null */
 } else {
-{
-var59 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_t2, var_t1);
+var36 = 0; /* arg is null but recv is not */
 }
-if (var59){
-var60 = NEW_standard__Array(&type_standard__Array__nit__MType);
-var61 = 1;
+if (0) {
+{ /* Inline kernel#Object#== (var_t,((val*)NULL)) on <var_t:nullable MType> */
+var_other = ((val*)NULL);
 {
-standard___standard__Array___with_capacity(var60, var61); /* Direct call array#Array#with_capacity on <var60:Array[MType]>*/
+{ /* Inline kernel#Object#is_same_instance (var_t,var_other) on <var_t:nullable MType(MType)> */
+var41 = var_t == var_other;
+var39 = var41;
+goto RET_LABEL40;
+RET_LABEL40:(void)0;
 }
-var_62 = var60;
-{
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_62, var_t1); /* Direct call array#AbstractArray#push on <var_62:Array[MType]>*/
 }
-{
-var63 = nit___nit__MClass___get_mtype(var_mclass, var_62);
+var37 = var39;
+goto RET_LABEL38;
+RET_LABEL38:(void)0;
 }
-var_mtype = var63;
-} else {
-if (varonce64) {
-var65 = varonce64;
-} else {
-var66 = "Type Error: Cannot create range: ";
-var67 = 33;
-var68 = standard___standard__NativeString___to_s_with_length(var66, var67);
-var65 = var68;
-varonce64 = var65;
+var36 = var37;
 }
-if (varonce69) {
-var70 = varonce69;
+if (var36){
+if (likely(varonce42!=NULL)) {
+var43 = varonce42;
 } else {
-var71 = " vs ";
-var72 = 4;
-var73 = standard___standard__NativeString___to_s_with_length(var71, var72);
-var70 = var73;
-varonce69 = var70;
+var44 = "Object";
+var45 = standard___standard__NativeString___to_s_with_length(var44, 6l);
+var43 = var45;
+varonce42 = var43;
 }
-var74 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var74 = array_instance Array[Object] */
-var75 = 4;
-var76 = NEW_standard__NativeArray(var75, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var76)->values[0] = (val*) var65;
-((struct instance_standard__NativeArray*)var76)->values[1] = (val*) var_t1;
-((struct instance_standard__NativeArray*)var76)->values[2] = (val*) var70;
-((struct instance_standard__NativeArray*)var76)->values[3] = (val*) var_t2;
 {
-((void (*)(val* self, val* p0, long p1))(var74->class->vft[COLOR_standard__array__Array__with_native]))(var74, var76, var75) /* with_native on <var74:Array[Object]>*/;
+var46 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var43);
 }
+var_c = var46;
+if (var_c == NULL) {
+var47 = 1; /* is null */
+} else {
+var47 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_c,((val*)NULL)) on <var_c:nullable MClass> */
+var_other = ((val*)NULL);
 {
-var77 = ((val* (*)(val* self))(var74->class->vft[COLOR_standard__string__Object__to_s]))(var74) /* to_s on <var74:Array[Object]>*/;
+{ /* Inline kernel#Object#is_same_instance (var_c,var_other) on <var_c:nullable MClass(MClass)> */
+var52 = var_c == var_other;
+var50 = var52;
+goto RET_LABEL51;
+RET_LABEL51:(void)0;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var77); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
+var48 = var50;
+goto RET_LABEL49;
+RET_LABEL49:(void)0;
+}
+var47 = var48;
 }
+if (var47){
+goto RET_LABEL;
+} else {
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var_mtype) on <self:ARangeExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_mtype; /* _mtype on <self:ARangeExpr> */
-RET_LABEL78:(void)0;
+{ /* Inline model#MClass#mclass_type (var_c) on <var_c:nullable MClass(MClass)> */
+var55 = var_c->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_c:nullable MClass(MClass)> */
+if (unlikely(var55 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
 }
+var53 = var55;
+RET_LABEL54:(void)0;
 }
-/* <self:ARangeExpr> isa ACrangeExpr */
-cltype = type_nit__ACrangeExpr.color;
-idtype = type_nit__ACrangeExpr.id;
-if(cltype >= self->type->table_size) {
-var79 = 0;
-} else {
-var79 = self->type->type_table[cltype] == idtype;
 }
-if (var79){
-if (varonce80) {
-var81 = varonce80;
-} else {
-var82 = "init";
-var83 = 4;
-var84 = standard___standard__NativeString___to_s_with_length(var82, var83);
-var81 = var84;
-varonce80 = var81;
+var_t = var53;
+{
+var56 = nit__typing___nit__typing__TypeVisitor___can_be_null(var_v, var_t2);
 }
-var85 = 0;
+if (var56){
 {
-var86 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var81, var85);
+var57 = nit___nit__MType___as_nullable(var_t);
 }
-var_callsite = var86;
-} else {
-/* <self:ARangeExpr> isa AOrangeExpr */
-cltype88 = type_nit__AOrangeExpr.color;
-idtype89 = type_nit__AOrangeExpr.id;
-if(cltype88 >= self->type->table_size) {
-var87 = 0;
+var_t = var57;
 } else {
-var87 = self->type->type_table[cltype88] == idtype89;
 }
-if (var87){
-if (varonce90) {
-var91 = varonce90;
 } else {
-var92 = "without_last";
-var93 = 12;
-var94 = standard___standard__NativeString___to_s_with_length(var92, var93);
-var91 = var94;
-varonce90 = var91;
 }
-var95 = 0;
 {
-var96 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var91, var95);
+{ /* Inline typing#AExpr#mtype= (self,var_t) on <self:AOrElseExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_t; /* _mtype on <self:AOrElseExpr> */
+RET_LABEL58:(void)0;
 }
-var_callsite = var96;
-} else {
-PRINT_ERROR("Runtime error: %s", "Aborted");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1304);
-show_backtrace(1);
 }
+RET_LABEL:;
+}
+/* method typing#ATrueExpr#accept_typing for (self: ATrueExpr, TypeVisitor) */
+void nit__typing___ATrueExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable MType */;
+var_v = p0;
+{
+var = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
 {
-{ /* Inline typing#ARangeExpr#init_callsite= (self,var_callsite) on <self:ARangeExpr> */
-self->attrs[COLOR_nit__typing__ARangeExpr___init_callsite].val = var_callsite; /* _init_callsite on <self:ARangeExpr> */
-RET_LABEL97:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var) on <self:ATrueExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var; /* _mtype on <self:ATrueExpr> */
+RET_LABEL1:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method typing#ANullExpr#accept_typing for (self: ANullExpr, TypeVisitor) */
-void nit__typing___ANullExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AFalseExpr#accept_typing for (self: AFalseExpr, TypeVisitor) */
+void nit__typing___AFalseExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : MModule */;
-val* var2 /* : MModule */;
-val* var3 /* : Model */;
-val* var5 /* : Model */;
-val* var6 /* : MNullType */;
-val* var8 /* : MNullType */;
+val* var /* : nullable MType */;
 var_v = p0;
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var2 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+var = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
-var = var2;
+{
+{ /* Inline typing#AExpr#mtype= (self,var) on <self:AFalseExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var; /* _mtype on <self:AFalseExpr> */
 RET_LABEL1:(void)0;
 }
 }
-{
-{ /* Inline mmodule#MModule#model (var) on <var:MModule> */
-var5 = var->attrs[COLOR_nit__mmodule__MModule___model].val; /* _model on <var:MModule> */
-if (unlikely(var5 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__mmodule, 73);
-show_backtrace(1);
+RET_LABEL:;
 }
-var3 = var5;
-RET_LABEL4:(void)0;
+/* method typing#AIntExpr#accept_typing for (self: AIntExpr, TypeVisitor) */
+void nit__typing___AIntExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+static val* varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassType */;
+val* var12 /* : MClassType */;
+var_v = p0;
+if (likely(varonce!=NULL)) {
+var = varonce;
+} else {
+var1 = "Int";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 3l);
+var = var2;
+varonce = var;
 }
+{
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+}
+var_mclass = var3;
+if (var_mclass == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline model#Model#null_type (var3) on <var3:Model> */
-var8 = var3->attrs[COLOR_nit__model__Model___null_type].val; /* _null_type on <var3:Model> */
-if (unlikely(var8 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _null_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 94);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var9 = var_mclass == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var6 = var8;
-RET_LABEL7:(void)0;
 }
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
+goto RET_LABEL;
+} else {
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var6) on <self:ANullExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var6; /* _mtype on <self:ANullExpr> */
-RET_LABEL9:(void)0;
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var12 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
 }
+var10 = var12;
+RET_LABEL11:(void)0;
 }
-RET_LABEL:;
 }
-/* method typing#AIsaExpr#cast_type for (self: AIsaExpr): nullable MType */
-val* nit__typing___AIsaExpr___cast_type(val* self) {
-val* var /* : nullable MType */;
-val* var1 /* : nullable MType */;
-var1 = self->attrs[COLOR_nit__typing__AIsaExpr___cast_type].val; /* _cast_type on <self:AIsaExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+{
+{ /* Inline typing#AExpr#mtype= (self,var10) on <self:AIntExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var10; /* _mtype on <self:AIntExpr> */
+RET_LABEL13:(void)0;
+}
 }
-/* method typing#AIsaExpr#cast_type= for (self: AIsaExpr, nullable MType) */
-void nit__typing___AIsaExpr___cast_type_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__AIsaExpr___cast_type].val = p0; /* _cast_type on <self:AIsaExpr> */
 RET_LABEL:;
 }
-/* method typing#AIsaExpr#accept_typing for (self: AIsaExpr, TypeVisitor) */
-void nit__typing___AIsaExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AByteExpr#accept_typing for (self: AByteExpr, TypeVisitor) */
+void nit__typing___AByteExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : AType */;
-val* var5 /* : AType */;
-val* var6 /* : nullable MType */;
-val* var_mtype /* var mtype: nullable MType */;
-val* var8 /* : AExpr */;
-val* var10 /* : AExpr */;
-val* var11 /* : nullable Variable */;
-val* var_variable /* var variable: nullable Variable */;
-val* var12 /* : null */;
-short int var13 /* : Bool */;
-short int var14 /* : Bool */;
+static val* varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var16 /* : Bool */;
-short int var17 /* : Bool */;
-val* var18 /* : nullable FlowContext */;
-val* var20 /* : nullable FlowContext */;
-val* var21 /* : FlowContext */;
-val* var23 /* : FlowContext */;
-val* var24 /* : nullable MType */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassType */;
+val* var12 /* : MClassType */;
 var_v = p0;
-{
-{ /* Inline parser_nodes#AIsaExpr#n_expr (self) on <self:AIsaExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1905);
-show_backtrace(1);
-}
+if (likely(varonce!=NULL)) {
+var = varonce;
+} else {
+var1 = "Byte";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 4l);
 var = var2;
-RET_LABEL1:(void)0;
+varonce = var;
+}
+{
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
 }
+var_mclass = var3;
+if (var_mclass == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#AIsaExpr#n_type (self) on <self:AIsaExpr> */
-var5 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val; /* _n_type on <self:AIsaExpr> */
-if (unlikely(var5 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1908);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var9 = var_mclass == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var3 = var5;
-RET_LABEL4:(void)0;
 }
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
-{
-var6 = nit__typing___nit__typing__TypeVisitor___visit_expr_cast(var_v, self, var, var3);
+var4 = var5;
+}
+if (var4){
+goto RET_LABEL;
+} else {
 }
-var_mtype = var6;
 {
-{ /* Inline typing#AIsaExpr#cast_type= (self,var_mtype) on <self:AIsaExpr> */
-self->attrs[COLOR_nit__typing__AIsaExpr___cast_type].val = var_mtype; /* _cast_type on <self:AIsaExpr> */
-RET_LABEL7:(void)0;
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var12 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
 }
 }
 {
-{ /* Inline parser_nodes#AIsaExpr#n_expr (self) on <self:AIsaExpr> */
-var10 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
-if (unlikely(var10 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1905);
-show_backtrace(1);
+{ /* Inline typing#AExpr#mtype= (self,var10) on <self:AByteExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var10; /* _mtype on <self:AByteExpr> */
+RET_LABEL13:(void)0;
 }
-var8 = var10;
-RET_LABEL9:(void)0;
 }
+RET_LABEL:;
+}
+/* method typing#AFloatExpr#accept_typing for (self: AFloatExpr, TypeVisitor) */
+void nit__typing___AFloatExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+static val* varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassType */;
+val* var12 /* : MClassType */;
+var_v = p0;
+if (likely(varonce!=NULL)) {
+var = varonce;
+} else {
+var1 = "Float";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 5l);
+var = var2;
+varonce = var;
 }
 {
-var11 = ((val* (*)(val* self))(var8->class->vft[COLOR_nit__typing__AExpr__its_variable]))(var8) /* its_variable on <var8:AExpr>*/;
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
 }
-var_variable = var11;
-var12 = NULL;
-if (var_variable == NULL) {
-var13 = 0; /* is null */
+var_mclass = var3;
+if (var_mclass == NULL) {
+var4 = 1; /* is null */
 } else {
-var13 = 1; /* arg is null and recv is not */
+var4 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_variable,var12) on <var_variable:nullable Variable> */
-var_other = var12;
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-var16 = ((short int (*)(val* self, val* p0))(var_variable->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_variable, var_other) /* == on <var_variable:nullable Variable(Variable)>*/;
-}
-var17 = !var16;
-var14 = var17;
-goto RET_LABEL15;
-RET_LABEL15:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var9 = var_mclass == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var13 = var14;
 }
-if (var13){
-{
-{ /* Inline flow#AExpr#after_flow_context (self) on <self:AIsaExpr> */
-var20 = self->attrs[COLOR_nit__flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:AIsaExpr> */
-var18 = var20;
-RET_LABEL19:(void)0;
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
+var4 = var5;
 }
-if (var18 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1332);
-show_backtrace(1);
+if (var4){
+goto RET_LABEL;
 } else {
-{ /* Inline flow#FlowContext#when_true (var18) on <var18:nullable FlowContext> */
-if (unlikely(var18 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__flow, 224);
-show_backtrace(1);
-}
-var23 = var18->attrs[COLOR_nit__flow__FlowContext___when_true].val; /* _when_true on <var18:nullable FlowContext> */
-if (unlikely(var23 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__flow, 224);
-show_backtrace(1);
-}
-var21 = var23;
-RET_LABEL22:(void)0;
-}
 }
 {
-nit__typing___FlowContext___set_var(var21, var_variable, var_mtype); /* Direct call typing#FlowContext#set_var on <var21:FlowContext>*/
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var12 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
 }
-} else {
+var10 = var12;
+RET_LABEL11:(void)0;
 }
-{
-var24 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var24) on <self:AIsaExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var24; /* _mtype on <self:AIsaExpr> */
-RET_LABEL25:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var10) on <self:AFloatExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var10; /* _mtype on <self:AFloatExpr> */
+RET_LABEL13:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method typing#AAsCastExpr#accept_typing for (self: AAsCastExpr, TypeVisitor) */
-void nit__typing___AAsCastExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#ACharExpr#accept_typing for (self: ACharExpr, TypeVisitor) */
+void nit__typing___ACharExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : AType */;
-val* var5 /* : AType */;
-val* var6 /* : nullable MType */;
-var_v = p0;
-{
-{ /* Inline parser_nodes#AAsCastForm#n_expr (self) on <self:AAsCastExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AAsCastForm___n_expr].val; /* _n_expr on <self:AAsCastExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2299);
-show_backtrace(1);
-}
-var = var2;
-RET_LABEL1:(void)0;
+static val* varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassType */;
+val* var12 /* : MClassType */;
+var_v = p0;
+if (likely(varonce!=NULL)) {
+var = varonce;
+} else {
+var1 = "Char";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 4l);
+var = var2;
+varonce = var;
 }
+{
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
+}
+var_mclass = var3;
+if (var_mclass == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#AAsCastExpr#n_type (self) on <self:AAsCastExpr> */
-var5 = self->attrs[COLOR_nit__parser_nodes__AAsCastExpr___n_type].val; /* _n_type on <self:AAsCastExpr> */
-if (unlikely(var5 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2316);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var9 = var_mclass == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var3 = var5;
-RET_LABEL4:(void)0;
 }
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
+goto RET_LABEL;
+} else {
 }
 {
-var6 = nit__typing___nit__typing__TypeVisitor___visit_expr_cast(var_v, self, var, var3);
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var12 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
+}
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var6) on <self:AAsCastExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var6; /* _mtype on <self:AAsCastExpr> */
-RET_LABEL7:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var10) on <self:ACharExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var10; /* _mtype on <self:ACharExpr> */
+RET_LABEL13:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method typing#AAsNotnullExpr#accept_typing for (self: AAsNotnullExpr, TypeVisitor) */
-void nit__typing___AAsNotnullExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AStringFormExpr#accept_typing for (self: AStringFormExpr, TypeVisitor) */
+void nit__typing___AStringFormExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var_mtype /* var mtype: nullable MType */;
-val* var4 /* : null */;
+static val* varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var4 /* : Bool */;
 short int var5 /* : Bool */;
-short int var6 /* : Bool */;
 val* var_other /* var other: nullable Object */;
-short int var8 /* : Bool */;
-short int var10 /* : Bool */;
-short int var11 /* : Bool */;
-int cltype;
-int idtype;
-static val* varonce;
-val* var12 /* : String */;
-char* var13 /* : NativeString */;
-long var14 /* : Int */;
-val* var15 /* : FlatString */;
-short int var16 /* : Bool */;
-int cltype17;
-int idtype18;
-val* var19 /* : MType */;
-val* var21 /* : MType */;
-short int var24 /* : Bool */;
-int cltype25;
-int idtype26;
-val* var27 /* : ModelBuilder */;
-val* var29 /* : ModelBuilder */;
-static val* varonce30;
-val* var31 /* : String */;
-char* var32 /* : NativeString */;
-long var33 /* : Int */;
-val* var34 /* : FlatString */;
-static val* varonce35;
-val* var36 /* : String */;
-char* var37 /* : NativeString */;
-long var38 /* : Int */;
-val* var39 /* : FlatString */;
-static val* varonce40;
-val* var41 /* : String */;
-char* var42 /* : NativeString */;
-long var43 /* : Int */;
-val* var44 /* : FlatString */;
-val* var45 /* : Array[Object] */;
-long var46 /* : Int */;
-val* var47 /* : NativeArray[Object] */;
-val* var48 /* : String */;
-short int var49 /* : Bool */;
-val* var50 /* : MType */;
-val* var_u /* var u: MType */;
-short int var51 /* : Bool */;
-int cltype52;
-int idtype53;
-short int var54 /* : Bool */;
-val* var55 /* : ModelBuilder */;
-val* var57 /* : ModelBuilder */;
-static val* varonce58;
-val* var59 /* : String */;
-char* var60 /* : NativeString */;
-long var61 /* : Int */;
-val* var62 /* : FlatString */;
-static val* varonce63;
-val* var64 /* : String */;
-char* var65 /* : NativeString */;
-long var66 /* : Int */;
-val* var67 /* : FlatString */;
-static val* varonce68;
-val* var69 /* : String */;
-char* var70 /* : NativeString */;
-long var71 /* : Int */;
-val* var72 /* : FlatString */;
-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 */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassType */;
+val* var12 /* : MClassType */;
 var_v = p0;
-{
-{ /* Inline parser_nodes#AAsCastForm#n_expr (self) on <self:AAsNotnullExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AAsCastForm___n_expr].val; /* _n_expr on <self:AAsNotnullExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2299);
-show_backtrace(1);
-}
+if (likely(varonce!=NULL)) {
+var = varonce;
+} else {
+var1 = "String";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 6l);
 var = var2;
-RET_LABEL1:(void)0;
-}
+varonce = var;
 }
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
 }
-var_mtype = var3;
-var4 = NULL;
-if (var_mtype == NULL) {
-var5 = 1; /* is null */
+var_mclass = var3;
+if (var_mclass == NULL) {
+var4 = 1; /* is null */
 } else {
-var5 = 0; /* arg is null but recv is not */
+var4 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var4) on <var_mtype:nullable MType> */
-var_other = var4;
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
-var10 = var_mtype == var_other;
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var9 = var_mclass == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
 }
-var6 = var8;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
-var5 = var6;
+var4 = var5;
 }
-if (var5){
+if (var4){
 goto RET_LABEL;
 } else {
 }
-/* <var_mtype:nullable MType(MType)> isa MNullType */
-cltype = type_nit__MNullType.color;
-idtype = type_nit__MNullType.id;
-if(cltype >= var_mtype->type->table_size) {
-var11 = 0;
-} else {
-var11 = var_mtype->type->type_table[cltype] == idtype;
+{
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var12 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var10 = var12;
+RET_LABEL11:(void)0;
 }
-if (var11){
-if (varonce) {
-var12 = varonce;
-} else {
-var13 = "Type error: as(not null) on null";
-var14 = 32;
-var15 = standard___standard__NativeString___to_s_with_length(var13, var14);
-var12 = var15;
-varonce = var12;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var12); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+{ /* Inline typing#AExpr#mtype= (self,var10) on <self:AStringFormExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var10; /* _mtype on <self:AStringFormExpr> */
+RET_LABEL13:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
-/* <var_mtype:nullable MType(MType)> isa MNullableType */
-cltype17 = type_nit__MNullableType.color;
-idtype18 = type_nit__MNullableType.id;
-if(cltype17 >= var_mtype->type->table_size) {
-var16 = 0;
+RET_LABEL:;
+}
+/* method typing#ASuperstringExpr#accept_typing for (self: ASuperstringExpr, TypeVisitor) */
+void nit__typing___ASuperstringExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+static val* varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassType */;
+val* var12 /* : MClassType */;
+static val* varonce14;
+val* var15 /* : String */;
+char* var16 /* : NativeString */;
+val* var17 /* : FlatString */;
+val* var18 /* : nullable MClass */;
+val* var_objclass /* var objclass: nullable MClass */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+short int var24 /* : Bool */;
+val* var25 /* : MClassType */;
+val* var27 /* : MClassType */;
+val* var_objtype /* var objtype: MClassType */;
+val* var28 /* : ANodes[AExpr] */;
+val* var30 /* : ANodes[AExpr] */;
+val* var_ /* var : ANodes[AExpr] */;
+val* var31 /* : Iterator[ANode] */;
+val* var_32 /* var : Iterator[AExpr] */;
+short int var33 /* : Bool */;
+val* var34 /* : nullable Object */;
+val* var_nexpr /* var nexpr: AExpr */;
+val* var35 /* : nullable MType */;
+var_v = p0;
+if (likely(varonce!=NULL)) {
+var = varonce;
 } else {
-var16 = var_mtype->type->type_table[cltype17] == idtype18;
+var1 = "String";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 6l);
+var = var2;
+varonce = var;
 }
-if (var16){
 {
-{ /* Inline model#MNullableType#mtype (var_mtype) on <var_mtype:nullable MType(MNullableType)> */
-var21 = var_mtype->attrs[COLOR_nit__model__MNullableType___mtype].val; /* _mtype on <var_mtype:nullable MType(MNullableType)> */
-if (unlikely(var21 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1506);
-show_backtrace(1);
-}
-var19 = var21;
-RET_LABEL20:(void)0;
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
 }
+var_mclass = var3;
+if (var_mclass == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#AExpr#mtype= (self,var19) on <self:AAsNotnullExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var19; /* _mtype on <self:AAsNotnullExpr> */
-RET_LABEL22:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var9 = var_mclass == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+}
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
 }
+var4 = var5;
 }
+if (var4){
 goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var_mtype) on <self:AAsNotnullExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_mtype; /* _mtype on <self:AAsNotnullExpr> */
-RET_LABEL23:(void)0;
+{ /* Inline model#MClass#mclass_type (var_mclass) on <var_mclass:nullable MClass(MClass)> */
+var12 = var_mclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_mclass:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
 }
+var10 = var12;
+RET_LABEL11:(void)0;
 }
-/* <var_mtype:nullable MType(MType)> isa MClassType */
-cltype25 = type_nit__MClassType.color;
-idtype26 = type_nit__MClassType.id;
-if(cltype25 >= var_mtype->type->table_size) {
-var24 = 0;
-} else {
-var24 = var_mtype->type->type_table[cltype25] == idtype26;
 }
-if (var24){
 {
-{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
-var29 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
-if (unlikely(var29 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
-show_backtrace(1);
-}
-var27 = var29;
-RET_LABEL28:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var10) on <self:ASuperstringExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var10; /* _mtype on <self:ASuperstringExpr> */
+RET_LABEL13:(void)0;
 }
 }
-if (varonce30) {
-var31 = varonce30;
+if (likely(varonce14!=NULL)) {
+var15 = varonce14;
 } else {
-var32 = "useless-type-test";
-var33 = 17;
-var34 = standard___standard__NativeString___to_s_with_length(var32, var33);
-var31 = var34;
-varonce30 = var31;
+var16 = "Object";
+var17 = standard___standard__NativeString___to_s_with_length(var16, 6l);
+var15 = var17;
+varonce14 = var15;
 }
-if (varonce35) {
-var36 = varonce35;
-} else {
-var37 = "Warning: expression is already not null, since it is a `";
-var38 = 56;
-var39 = standard___standard__NativeString___to_s_with_length(var37, var38);
-var36 = var39;
-varonce35 = var36;
+{
+var18 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var15);
 }
-if (varonce40) {
-var41 = varonce40;
+var_objclass = var18;
+if (var_objclass == NULL) {
+var19 = 1; /* is null */
 } else {
-var42 = "`.";
-var43 = 2;
-var44 = standard___standard__NativeString___to_s_with_length(var42, var43);
-var41 = var44;
-varonce40 = var41;
+var19 = 0; /* arg is null but recv is not */
 }
-var45 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var45 = array_instance Array[Object] */
-var46 = 3;
-var47 = NEW_standard__NativeArray(var46, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var47)->values[0] = (val*) var36;
-((struct instance_standard__NativeArray*)var47)->values[1] = (val*) var_mtype;
-((struct instance_standard__NativeArray*)var47)->values[2] = (val*) var41;
+if (0) {
+{ /* Inline kernel#Object#== (var_objclass,((val*)NULL)) on <var_objclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-((void (*)(val* self, val* p0, long p1))(var45->class->vft[COLOR_standard__array__Array__with_native]))(var45, var47, var46) /* with_native on <var45:Array[Object]>*/;
+{ /* Inline kernel#Object#is_same_instance (var_objclass,var_other) on <var_objclass:nullable MClass(MClass)> */
+var24 = var_objclass == var_other;
+var22 = var24;
+goto RET_LABEL23;
+RET_LABEL23:(void)0;
 }
 }
-{
-var48 = ((val* (*)(val* self))(var45->class->vft[COLOR_standard__string__Object__to_s]))(var45) /* to_s on <var45:Array[Object]>*/;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
-{
-nit___nit__ModelBuilder___warning(var27, self, var31, var48); /* Direct call modelbuilder_base#ModelBuilder#warning on <var27:ModelBuilder>*/
+var19 = var20;
 }
+if (var19){
 goto RET_LABEL;
 } else {
 }
 {
-var49 = ((short int (*)(val* self))(var_mtype->class->vft[COLOR_nit__model__MType__need_anchor]))(var_mtype) /* need_anchor on <var_mtype:nullable MType(MType)>*/;
-}
-if (unlikely(!var49)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1366);
-show_backtrace(1);
+{ /* Inline model#MClass#mclass_type (var_objclass) on <var_objclass:nullable MClass(MClass)> */
+var27 = var_objclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_objclass:nullable MClass(MClass)> */
+if (unlikely(var27 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
 }
-{
-var50 = nit__typing___nit__typing__TypeVisitor___anchor_to(var_v, var_mtype);
+var25 = var27;
+RET_LABEL26:(void)0;
 }
-var_u = var50;
-/* <var_u:MType> isa MNullableType */
-cltype52 = type_nit__MNullableType.color;
-idtype53 = type_nit__MNullableType.id;
-if(cltype52 >= var_u->type->table_size) {
-var51 = 0;
-} else {
-var51 = var_u->type->type_table[cltype52] == idtype53;
 }
-var54 = !var51;
-if (var54){
+var_objtype = var25;
 {
-{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
-var57 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
-if (unlikely(var57 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
-show_backtrace(1);
+{ /* Inline parser_nodes#ASuperstringExpr#n_exprs (self) on <self:ASuperstringExpr> */
+var30 = self->attrs[COLOR_nit__parser_nodes__ASuperstringExpr___n_exprs].val; /* _n_exprs on <self:ASuperstringExpr> */
+if (unlikely(var30 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_exprs");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2626);
+fatal_exit(1);
 }
-var55 = var57;
-RET_LABEL56:(void)0;
+var28 = var30;
+RET_LABEL29:(void)0;
 }
 }
-if (varonce58) {
-var59 = varonce58;
-} else {
-var60 = "useless-type-test";
-var61 = 17;
-var62 = standard___standard__NativeString___to_s_with_length(var60, var61);
-var59 = var62;
-varonce58 = var59;
+var_ = var28;
+{
+var31 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
 }
-if (varonce63) {
-var64 = varonce63;
-} else {
-var65 = "Warning: expression is already not null, since it is a `";
-var66 = 56;
-var67 = standard___standard__NativeString___to_s_with_length(var65, var66);
-var64 = var67;
-varonce63 = var64;
+var_32 = var31;
+for(;;) {
+{
+var33 = ((short int(*)(val* self))((((long)var_32&3)?class_info[((long)var_32&3)]:var_32->class)->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_32); /* is_ok on <var_32:Iterator[AExpr]>*/
 }
-if (varonce68) {
-var69 = varonce68;
-} else {
-var70 = ": ";
-var71 = 2;
-var72 = standard___standard__NativeString___to_s_with_length(var70, var71);
-var69 = var72;
-varonce68 = var69;
-}
-if (varonce73) {
-var74 = varonce73;
-} else {
-var75 = "`.";
-var76 = 2;
-var77 = standard___standard__NativeString___to_s_with_length(var75, var76);
-var74 = var77;
-varonce73 = var74;
-}
-var78 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var78 = array_instance Array[Object] */
-var79 = 5;
-var80 = NEW_standard__NativeArray(var79, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var80)->values[0] = (val*) var64;
-((struct instance_standard__NativeArray*)var80)->values[1] = (val*) var_mtype;
-((struct instance_standard__NativeArray*)var80)->values[2] = (val*) var69;
-((struct instance_standard__NativeArray*)var80)->values[3] = (val*) var_u;
-((struct instance_standard__NativeArray*)var80)->values[4] = (val*) var74;
+if (var33){
 {
-((void (*)(val* self, val* p0, long p1))(var78->class->vft[COLOR_standard__array__Array__with_native]))(var78, var80, var79) /* with_native on <var78:Array[Object]>*/;
-}
+var34 = ((val*(*)(val* self))((((long)var_32&3)?class_info[((long)var_32&3)]:var_32->class)->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_32); /* item on <var_32:Iterator[AExpr]>*/
 }
+var_nexpr = var34;
 {
-var81 = ((val* (*)(val* self))(var78->class->vft[COLOR_standard__string__Object__to_s]))(var78) /* to_s on <var78:Array[Object]>*/;
+var35 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var_nexpr, var_objtype);
 }
 {
-nit___nit__ModelBuilder___warning(var55, self, var59, var81); /* Direct call modelbuilder_base#ModelBuilder#warning on <var55:ModelBuilder>*/
+((void(*)(val* self))((((long)var_32&3)?class_info[((long)var_32&3)]:var_32->class)->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_32); /* next on <var_32:Iterator[AExpr]>*/
 }
-goto RET_LABEL;
 } else {
+goto BREAK_label;
 }
-RET_LABEL:;
-}
-/* method typing#AParExpr#accept_typing for (self: AParExpr, TypeVisitor) */
-void nit__typing___AParExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-var_v = p0;
-{
-{ /* Inline parser_nodes#AParExpr#n_expr (self) on <self:AParExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AParExpr___n_expr].val; /* _n_expr on <self:AParExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2288);
-show_backtrace(1);
-}
-var = var2;
-RET_LABEL1:(void)0;
-}
-}
-{
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
+BREAK_label: (void)0;
 {
-{ /* Inline typing#AExpr#mtype= (self,var3) on <self:AParExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var3; /* _mtype on <self:AParExpr> */
-RET_LABEL4:(void)0;
-}
+((void(*)(val* self))((((long)var_32&3)?class_info[((long)var_32&3)]:var_32->class)->vft[COLOR_standard__abstract_collection__Iterator__finish]))(var_32); /* finish on <var_32:Iterator[AExpr]>*/
 }
 RET_LABEL:;
 }
-/* method typing#AOnceExpr#accept_typing for (self: AOnceExpr, TypeVisitor) */
-void nit__typing___AOnceExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-var_v = p0;
-{
-{ /* Inline parser_nodes#AOnceExpr#n_expr (self) on <self:AOnceExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_expr].val; /* _n_expr on <self:AOnceExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1794);
-show_backtrace(1);
-}
-var = var2;
-RET_LABEL1:(void)0;
-}
-}
-{
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+/* method typing#AArrayExpr#with_capacity_callsite for (self: AArrayExpr): nullable CallSite */
+val* nit__typing___AArrayExpr___with_capacity_callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AArrayExpr___with_capacity_callsite].val; /* _with_capacity_callsite on <self:AArrayExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-{
-{ /* Inline typing#AExpr#mtype= (self,var3) on <self:AOnceExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var3; /* _mtype on <self:AOnceExpr> */
-RET_LABEL4:(void)0;
+/* method typing#AArrayExpr#with_capacity_callsite= for (self: AArrayExpr, nullable CallSite) */
+void nit__typing___AArrayExpr___with_capacity_callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AArrayExpr___with_capacity_callsite].val = p0; /* _with_capacity_callsite on <self:AArrayExpr> */
+RET_LABEL:;
 }
+/* method typing#AArrayExpr#push_callsite for (self: AArrayExpr): nullable CallSite */
+val* nit__typing___AArrayExpr___push_callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__AArrayExpr___push_callsite].val; /* _push_callsite on <self:AArrayExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
+/* method typing#AArrayExpr#push_callsite= for (self: AArrayExpr, nullable CallSite) */
+void nit__typing___AArrayExpr___push_callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AArrayExpr___push_callsite].val = p0; /* _push_callsite on <self:AArrayExpr> */
 RET_LABEL:;
 }
-/* method typing#ASelfExpr#its_variable for (self: ASelfExpr): nullable Variable */
-val* nit__typing___ASelfExpr___AExpr__its_variable(val* self) {
-val* var /* : nullable Variable */;
-val* var1 /* : nullable Variable */;
-var1 = self->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val; /* _its_variable on <self:ASelfExpr> */
+/* method typing#AArrayExpr#element_mtype for (self: AArrayExpr): nullable MType */
+val* nit__typing___AArrayExpr___element_mtype(val* self) {
+val* var /* : nullable MType */;
+val* var1 /* : nullable MType */;
+var1 = self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val; /* _element_mtype on <self:AArrayExpr> */
 var = var1;
 RET_LABEL:;
 return var;
 }
-/* method typing#ASelfExpr#its_variable= for (self: ASelfExpr, nullable Variable) */
-void nit__typing___ASelfExpr___its_variable_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val = p0; /* _its_variable on <self:ASelfExpr> */
+/* method typing#AArrayExpr#element_mtype= for (self: AArrayExpr, nullable MType) */
+void nit__typing___AArrayExpr___element_mtype_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val = p0; /* _element_mtype on <self:AArrayExpr> */
 RET_LABEL:;
 }
-/* method typing#ASelfExpr#accept_typing for (self: ASelfExpr, TypeVisitor) */
-void nit__typing___ASelfExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
+/* method typing#AArrayExpr#set_comprehension for (self: AArrayExpr, nullable AExpr) */
+void nit__typing___AArrayExpr___set_comprehension(val* self, val* p0) {
+val* var_n /* var n: nullable AExpr */;
 short int var /* : Bool */;
 short int var1 /* : Bool */;
+val* var_other /* var other: nullable Object */;
 short int var3 /* : Bool */;
-short int var_ /* var : Bool */;
-short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+short int var6 /* : Bool */;
 int cltype;
 int idtype;
-short int var5 /* : Bool */;
-static val* varonce;
-val* var6 /* : String */;
-char* var7 /* : NativeString */;
-long var8 /* : Int */;
-val* var9 /* : FlatString */;
-val* var10 /* : Variable */;
-val* var12 /* : Variable */;
-val* var_variable /* var variable: Variable */;
-val* var14 /* : nullable MType */;
-var_v = p0;
+val* var7 /* : nullable AExpr */;
+val* var9 /* : nullable AExpr */;
+short int var10 /* : Bool */;
+int cltype11;
+int idtype12;
+val* var13 /* : nullable AExpr */;
+val* var15 /* : nullable AExpr */;
+val* var16 /* : nullable AExpr */;
+val* var18 /* : nullable AExpr */;
+var_n = p0;
+if (var_n == NULL) {
+var = 1; /* is null */
+} else {
+var = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_n,((val*)NULL)) on <var_n:nullable AExpr> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#TypeVisitor#is_toplevel_context (var_v) on <var_v:TypeVisitor> */
-var3 = var_v->attrs[COLOR_nit__typing__TypeVisitor___is_toplevel_context].s; /* _is_toplevel_context on <var_v:TypeVisitor> */
+{ /* Inline kernel#Object#is_same_instance (var_n,var_other) on <var_n:nullable AExpr(AExpr)> */
+var5 = var_n == var_other;
+var3 = var5;
+goto RET_LABEL4;
+RET_LABEL4:(void)0;
+}
+}
 var1 = var3;
+goto RET_LABEL2;
 RET_LABEL2:(void)0;
 }
+var = var1;
 }
-var_ = var1;
-if (var1){
-/* <self:ASelfExpr> isa AImplicitSelfExpr */
-cltype = type_nit__AImplicitSelfExpr.color;
-idtype = type_nit__AImplicitSelfExpr.id;
-if(cltype >= self->type->table_size) {
-var4 = 0;
+if (var){
+goto RET_LABEL;
 } else {
-var4 = self->type->type_table[cltype] == idtype;
-}
-var5 = !var4;
-var = var5;
+/* <var_n:nullable AExpr(AExpr)> isa AForExpr */
+cltype = type_nit__AForExpr.color;
+idtype = type_nit__AForExpr.id;
+if(cltype >= var_n->type->table_size) {
+var6 = 0;
 } else {
-var = var_;
+var6 = var_n->type->type_table[cltype] == idtype;
+}
+if (var6){
+{
+{ /* Inline parser_nodes#AForExpr#n_block (var_n) on <var_n:nullable AExpr(AForExpr)> */
+var9 = var_n->attrs[COLOR_nit__parser_nodes__AForExpr___n_block].val; /* _n_block on <var_n:nullable AExpr(AForExpr)> */
+var7 = var9;
+RET_LABEL8:(void)0;
 }
-if (var){
-if (varonce) {
-var6 = varonce;
-} else {
-var7 = "Error: self cannot be used in top-level method.";
-var8 = 47;
-var9 = standard___standard__NativeString___to_s_with_length(var7, var8);
-var6 = var9;
-varonce = var6;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var6); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+nit__typing___AArrayExpr___set_comprehension(self, var7); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
 }
 } else {
+/* <var_n:nullable AExpr(AExpr)> isa AIfExpr */
+cltype11 = type_nit__AIfExpr.color;
+idtype12 = type_nit__AIfExpr.id;
+if(cltype11 >= var_n->type->table_size) {
+var10 = 0;
+} else {
+var10 = var_n->type->type_table[cltype11] == idtype12;
 }
+if (var10){
 {
-{ /* Inline typing#TypeVisitor#selfvariable (var_v) on <var_v:TypeVisitor> */
-var12 = var_v->attrs[COLOR_nit__typing__TypeVisitor___selfvariable].val; /* _selfvariable on <var_v:TypeVisitor> */
-if (unlikely(var12 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _selfvariable");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 50);
-show_backtrace(1);
+{ /* Inline parser_nodes#AIfExpr#n_then (var_n) on <var_n:nullable AExpr(AIfExpr)> */
+var15 = var_n->attrs[COLOR_nit__parser_nodes__AIfExpr___n_then].val; /* _n_then on <var_n:nullable AExpr(AIfExpr)> */
+var13 = var15;
+RET_LABEL14:(void)0;
 }
-var10 = var12;
-RET_LABEL11:(void)0;
 }
+{
+nit__typing___AArrayExpr___set_comprehension(self, var13); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
 }
-var_variable = var10;
 {
-{ /* Inline typing#ASelfExpr#its_variable= (self,var_variable) on <self:ASelfExpr> */
-self->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val = var_variable; /* _its_variable on <self:ASelfExpr> */
-RET_LABEL13:(void)0;
+{ /* Inline parser_nodes#AIfExpr#n_else (var_n) on <var_n:nullable AExpr(AIfExpr)> */
+var18 = var_n->attrs[COLOR_nit__parser_nodes__AIfExpr___n_else].val; /* _n_else on <var_n:nullable AExpr(AIfExpr)> */
+var16 = var18;
+RET_LABEL17:(void)0;
 }
 }
 {
-var14 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var_variable);
+nit__typing___AArrayExpr___set_comprehension(self, var16); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
 }
+} else {
 {
-{ /* Inline typing#AExpr#mtype= (self,var14) on <self:ASelfExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var14; /* _mtype on <self:ASelfExpr> */
-RET_LABEL15:(void)0;
+{ /* Inline typing#AExpr#comprehension= (var_n,self) on <var_n:nullable AExpr(AExpr)> */
+var_n->attrs[COLOR_nit__typing__AExpr___comprehension].val = self; /* _comprehension on <var_n:nullable AExpr(AExpr)> */
+RET_LABEL19:(void)0;
+}
 }
 }
-RET_LABEL:;
 }
-/* method typing#ASendExpr#callsite for (self: ASendExpr): nullable CallSite */
-val* nit__typing___ASendExpr___callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__ASendExpr___callsite].val; /* _callsite on <self:ASendExpr> */
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method typing#ASendExpr#callsite= for (self: ASendExpr, nullable CallSite) */
-void nit__typing___ASendExpr___callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ASendExpr___callsite].val = p0; /* _callsite on <self:ASendExpr> */
 RET_LABEL:;
 }
-/* method typing#ASendExpr#accept_typing for (self: ASendExpr, TypeVisitor) */
-void nit__typing___ASendExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AArrayExpr#accept_typing for (self: AArrayExpr, TypeVisitor) */
+void nit__typing___AArrayExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var_recvtype /* var recvtype: nullable MType */;
-val* var4 /* : String */;
-val* var_name /* var name: String */;
-val* var5 /* : null */;
+val* var_mtype /* var mtype: nullable MType */;
+val* var /* : nullable AType */;
+val* var2 /* : nullable AType */;
+val* var_ntype /* var ntype: nullable AType */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var_other /* var other: nullable Object */;
 short int var6 /* : Bool */;
 short int var7 /* : Bool */;
-val* var_other /* var other: nullable Object */;
+val* var8 /* : nullable MType */;
 short int var9 /* : Bool */;
-short int var11 /* : Bool */;
-val* var12 /* : AExpr */;
-val* var14 /* : AExpr */;
+short int var10 /* : Bool */;
+val* var_other12 /* var other: nullable Object */;
+short int var13 /* : Bool */;
 short int var15 /* : Bool */;
-int cltype;
-int idtype;
-val* var16 /* : nullable CallSite */;
-val* var_callsite /* var callsite: nullable CallSite */;
-val* var17 /* : null */;
-short int var18 /* : Bool */;
-short int var19 /* : Bool */;
-short int var21 /* : Bool */;
-short int var23 /* : Bool */;
-val* var25 /* : MSignature */;
-val* var27 /* : MSignature */;
-val* var_msignature /* var msignature: MSignature */;
-val* var28 /* : Array[AExpr] */;
-val* var_args /* var args: Array[AExpr] */;
-short int var29 /* : Bool */;
-val* var30 /* : MMethod */;
-val* var32 /* : MMethod */;
-short int var33 /* : Bool */;
+val* var16 /* : Array[nullable MType] */;
+val* var_mtypes /* var mtypes: Array[nullable MType] */;
+short int var_useless /* var useless: Bool */;
+val* var17 /* : ANodes[AExpr] */;
+val* var19 /* : ANodes[AExpr] */;
+val* var_ /* var : ANodes[AExpr] */;
+val* var20 /* : Iterator[ANode] */;
+val* var_21 /* var : Iterator[AExpr] */;
+short int var22 /* : Bool */;
+val* var23 /* : nullable Object */;
+val* var_e /* var e: AExpr */;
+val* var24 /* : nullable MType */;
+val* var_t /* var t: nullable MType */;
+short int var25 /* : Bool */;
+short int var26 /* : Bool */;
+short int var28 /* : Bool */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+short int var32 /* : Bool */;
+short int var34 /* : Bool */;
 short int var35 /* : Bool */;
-val* var36 /* : nullable MPropDef */;
-val* var38 /* : nullable MPropDef */;
-val* var_vmpropdef /* var vmpropdef: nullable MPropDef */;
-short int var39 /* : Bool */;
+val* var36 /* : nullable MType */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
 short int var40 /* : Bool */;
-int cltype41;
-int idtype42;
-short int var_ /* var : Bool */;
-val* var43 /* : MProperty */;
-val* var45 /* : MProperty */;
-short int var46 /* : Bool */;
+short int var42 /* : Bool */;
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+short int var47 /* : Bool */;
 short int var48 /* : Bool */;
 short int var49 /* : Bool */;
-static val* varonce;
-val* var50 /* : String */;
-char* var51 /* : NativeString */;
-long var52 /* : Int */;
-val* var53 /* : FlatString */;
-short int var54 /* : Bool */;
-short int var55 /* : Bool */;
-short int var56 /* : Bool */;
-int cltype57;
-int idtype58;
-short int var_59 /* var : Bool */;
-val* var60 /* : MProperty */;
-val* var62 /* : MProperty */;
-short int var63 /* : Bool */;
-short int var65 /* : Bool */;
-short int var_66 /* var : Bool */;
-val* var67 /* : MMethod */;
-val* var69 /* : MMethod */;
+short int var51 /* : Bool */;
+short int var53 /* : Bool */;
+val* var54 /* : nullable MType */;
+val* var56 /* : nullable MType */;
+short int var57 /* : Bool */;
+short int var58 /* : Bool */;
+short int var60 /* : Bool */;
+short int var61 /* : Bool */;
+val* var62 /* : nullable MType */;
+val* var64 /* : nullable MType */;
+val* var65 /* : nullable MType */;
+short int var66 /* : Bool */;
+short int var67 /* : Bool */;
+short int var68 /* : Bool */;
 short int var70 /* : Bool */;
 short int var72 /* : Bool */;
-short int var73 /* : Bool */;
-static val* varonce74;
-val* var75 /* : String */;
-char* var76 /* : NativeString */;
-long var77 /* : Int */;
-val* var78 /* : FlatString */;
-static val* varonce79;
-val* var80 /* : String */;
-char* var81 /* : NativeString */;
-long var82 /* : Int */;
+short int var_73 /* var : Bool */;
+short int var74 /* : Bool */;
+int cltype;
+int idtype;
+val* var75 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce76;
+val* var77 /* : String */;
+char* var78 /* : NativeString */;
+val* var79 /* : FlatString */;
+static val* varonce80;
+val* var81 /* : String */;
+char* var82 /* : NativeString */;
 val* var83 /* : FlatString */;
-val* var84 /* : MMethod */;
-val* var86 /* : MMethod */;
-val* var87 /* : Array[Object] */;
-long var88 /* : Int */;
-val* var89 /* : NativeArray[Object] */;
-val* var90 /* : String */;
-val* var91 /* : nullable MType */;
-val* var93 /* : nullable MType */;
-val* var_ret /* var ret: nullable MType */;
-val* var94 /* : null */;
-short int var95 /* : Bool */;
-short int var96 /* : Bool */;
-val* var_other98 /* var other: nullable Object */;
-short int var99 /* : Bool */;
-short int var100 /* : Bool */;
-short int var102 /* : Bool */;
+val* var84 /* : String */;
+val* var85 /* : String */;
+short int var86 /* : Bool */;
+short int var87 /* : Bool */;
+short int var89 /* : Bool */;
+short int var90 /* : Bool */;
+val* var91 /* : ModelBuilder */;
+val* var93 /* : ModelBuilder */;
+static val* varonce94;
+val* var95 /* : String */;
+char* var96 /* : NativeString */;
+val* var97 /* : FlatString */;
+val* var99 /* : NativeArray[String] */;
+static val* varonce98;
+static val* varonce100;
+val* var101 /* : String */;
+char* var102 /* : NativeString */;
+val* var103 /* : FlatString */;
+static val* varonce104;
+val* var105 /* : String */;
+char* var106 /* : NativeString */;
+val* var107 /* : FlatString */;
+val* var108 /* : String */;
+val* var109 /* : String */;
+static val* varonce111;
+val* var112 /* : String */;
+char* var113 /* : NativeString */;
+val* var114 /* : FlatString */;
+val* var115 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var116 /* : Bool */;
+short int var117 /* : Bool */;
+short int var119 /* : Bool */;
+short int var121 /* : Bool */;
+val* var122 /* : Array[MType] */;
+val* var_123 /* var : Array[MType] */;
+val* var124 /* : MClassType */;
+val* var_array_mtype /* var array_mtype: MClassType */;
+static val* varonce125;
+val* var126 /* : String */;
+char* var127 /* : NativeString */;
+val* var128 /* : FlatString */;
+val* var129 /* : nullable CallSite */;
+static val* varonce131;
+val* var132 /* : String */;
+char* var133 /* : NativeString */;
+val* var134 /* : FlatString */;
+val* var135 /* : nullable CallSite */;
 var_v = p0;
+var_mtype = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1802);
-show_backtrace(1);
-}
+{ /* Inline parser_nodes#AArrayExpr#n_type (self) on <self:AArrayExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AArrayExpr___n_type].val; /* _n_type on <self:AArrayExpr> */
 var = var2;
 RET_LABEL1:(void)0;
 }
 }
+var_ntype = var;
+if (var_ntype == NULL) {
+var3 = 0; /* is null */
+} else {
+var3 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_ntype,((val*)NULL)) on <var_ntype:nullable AType> */
+var_other = ((val*)NULL);
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+var6 = ((short int(*)(val* self, val* p0))(var_ntype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ntype, var_other); /* == on <var_ntype:nullable AType(AType)>*/
 }
-var_recvtype = var3;
+var7 = !var6;
+var4 = var7;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
+}
+var3 = var4;
+}
+if (var3){
 {
-var4 = ((val* (*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__property_name]))(self) /* property_name on <self:ASendExpr>*/;
+var8 = nit__typing___nit__typing__TypeVisitor___resolve_mtype(var_v, var_ntype);
 }
-var_name = var4;
-var5 = NULL;
-if (var_recvtype == NULL) {
-var6 = 1; /* is null */
+var_mtype = var8;
+if (var_mtype == NULL) {
+var9 = 1; /* is null */
 } else {
-var6 = 0; /* arg is null but recv is not */
+var9 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_recvtype,var5) on <var_recvtype:nullable MType> */
-var_other = var5;
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_recvtype,var_other) on <var_recvtype:nullable MType(MType)> */
-var11 = var_recvtype == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other12) on <var_mtype:nullable MType(MType)> */
+var15 = var_mtype == var_other12;
+var13 = var15;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
 }
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var10 = var13;
+goto RET_LABEL11;
+RET_LABEL11:(void)0;
 }
-var6 = var7;
+var9 = var10;
 }
-if (var6){
+if (var9){
 goto RET_LABEL;
 } else {
 }
+} else {
+}
+var16 = NEW_standard__Array(&type_standard__Array__nullable__nit__MType);
 {
-{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendExpr> */
-var14 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendExpr> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1802);
-show_backtrace(1);
+standard___standard__Array___standard__kernel__Object__init(var16); /* Direct call array#Array#init on <var16:Array[nullable MType]>*/
 }
-var12 = var14;
-RET_LABEL13:(void)0;
+var_mtypes = var16;
+var_useless = 0;
+{
+{ /* Inline parser_nodes#AArrayExpr#n_exprs (self) on <self:AArrayExpr> */
+var19 = self->attrs[COLOR_nit__parser_nodes__AArrayExpr___n_exprs].val; /* _n_exprs on <self:AArrayExpr> */
+if (unlikely(var19 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_exprs");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2456);
+fatal_exit(1);
 }
+var17 = var19;
+RET_LABEL18:(void)0;
 }
-/* <var12:AExpr> isa ASelfExpr */
-cltype = type_nit__ASelfExpr.color;
-idtype = type_nit__ASelfExpr.id;
-if(cltype >= var12->type->table_size) {
-var15 = 0;
-} else {
-var15 = var12->type->type_table[cltype] == idtype;
 }
+var_ = var17;
 {
-var16 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_recvtype, var_name, var15);
+var20 = nit___nit__ANodes___standard__abstract_collection__Collection__iterator(var_);
 }
-var_callsite = var16;
-var17 = NULL;
-if (var_callsite == NULL) {
-var18 = 1; /* is null */
+var_21 = var20;
+for(;;) {
+{
+var22 = ((short int(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_standard__abstract_collection__Iterator__is_ok]))(var_21); /* is_ok on <var_21:Iterator[AExpr]>*/
+}
+if (var22){
+{
+var23 = ((val*(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_standard__abstract_collection__Iterator__item]))(var_21); /* item on <var_21:Iterator[AExpr]>*/
+}
+var_e = var23;
+{
+var24 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var_e);
+}
+var_t = var24;
+if (var_t == NULL) {
+var25 = 1; /* is null */
 } else {
-var18 = 0; /* arg is null but recv is not */
+var25 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_callsite,var17) on <var_callsite:nullable CallSite> */
-var_other = var17;
+{ /* Inline kernel#Object#== (var_t,((val*)NULL)) on <var_t:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
-var23 = var_callsite == var_other;
-var21 = var23;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_t,var_other12) on <var_t:nullable MType(MType)> */
+var30 = var_t == var_other12;
+var28 = var30;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
 }
 }
-var19 = var21;
-goto RET_LABEL20;
-RET_LABEL20:(void)0;
+var26 = var28;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
 }
-var18 = var19;
+var25 = var26;
 }
-if (var18){
+if (var25){
 goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline typing#ASendExpr#callsite= (self,var_callsite) on <self:ASendExpr> */
-self->attrs[COLOR_nit__typing__ASendExpr___callsite].val = var_callsite; /* _callsite on <self:ASendExpr> */
-RET_LABEL24:(void)0;
+nit__typing___AArrayExpr___set_comprehension(self, var_e); /* Direct call typing#AArrayExpr#set_comprehension on <self:AArrayExpr>*/
 }
+if (var_mtype == NULL) {
+var31 = 0; /* is null */
+} else {
+var31 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var27 = var_callsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var27 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 494);
-show_backtrace(1);
-}
-var25 = var27;
-RET_LABEL26:(void)0;
-}
+var34 = ((short int(*)(val* self, val* p0))(var_mtype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mtype, var_other); /* == on <var_mtype:nullable MType(MType)>*/
 }
-var_msignature = var25;
-{
-var28 = ((val* (*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__compute_raw_arguments]))(self) /* compute_raw_arguments on <self:ASendExpr>*/;
+var35 = !var34;
+var32 = var35;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
 }
-var_args = var28;
-{
-var29 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
+var31 = var32;
 }
+if (var31){
 {
-{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var32 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var32 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 487);
-show_backtrace(1);
-}
-var30 = var32;
-RET_LABEL31:(void)0;
+var36 = nit__typing___nit__typing__TypeVisitor___check_subtype(var_v, var_e, var_t, var_mtype, 0);
 }
+if (var36 == NULL) {
+var37 = 1; /* is null */
+} else {
+var37 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var36,((val*)NULL)) on <var36:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-{ /* Inline model#MMethod#is_init (var30) on <var30:MMethod> */
-var35 = var30->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var30:MMethod> */
-var33 = var35;
-RET_LABEL34:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var36,var_other12) on <var36:nullable MType(MType)> */
+var42 = var36 == var_other12;
+var40 = var42;
+goto RET_LABEL41;
+RET_LABEL41:(void)0;
 }
 }
-if (var33){
-{
-{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
-var38 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
-var36 = var38;
-RET_LABEL37:(void)0;
+var38 = var40;
+goto RET_LABEL39;
+RET_LABEL39:(void)0;
 }
+var37 = var38;
 }
-var_vmpropdef = var36;
-/* <var_vmpropdef:nullable MPropDef> isa MMethodDef */
-cltype41 = type_nit__MMethodDef.color;
-idtype42 = type_nit__MMethodDef.id;
-if(var_vmpropdef == NULL) {
-var40 = 0;
-} else {
-if(cltype41 >= var_vmpropdef->type->table_size) {
-var40 = 0;
+if (var37){
+goto RET_LABEL;
 } else {
-var40 = var_vmpropdef->type->type_table[cltype41] == idtype42;
 }
-}
-var_ = var40;
-if (var40){
 {
-{ /* Inline model#MPropDef#mproperty (var_vmpropdef) on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
-var45 = var_vmpropdef->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
-if (unlikely(var45 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
+{ /* Inline kernel#Object#== (var_t,var_mtype) on <var_t:nullable MType(MType)> */
+var_other12 = var_mtype;
+{
+{ /* Inline kernel#Object#is_same_instance (var_t,var_other12) on <var_t:nullable MType(MType)> */
+var47 = var_t == var_other12;
+var45 = var47;
+goto RET_LABEL46;
+RET_LABEL46:(void)0;
+}
 }
 var43 = var45;
+goto RET_LABEL44;
 RET_LABEL44:(void)0;
 }
 }
-{
-{ /* Inline model#MMethod#is_init (var43) on <var43:MProperty(MMethod)> */
-var48 = var43->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var43:MProperty(MMethod)> */
-var46 = var48;
-RET_LABEL47:(void)0;
-}
-}
-var39 = var46;
+if (var43){
+var_useless = 1;
 } else {
-var39 = var_;
 }
-var49 = !var39;
-if (var49){
-if (varonce) {
-var50 = varonce;
 } else {
-var51 = "Can call a init only in another init";
-var52 = 36;
-var53 = standard___standard__NativeString___to_s_with_length(var51, var52);
-var50 = var53;
-varonce = var50;
-}
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var50); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
-}
-} else {
-}
-/* <var_vmpropdef:nullable MPropDef> isa MMethodDef */
-cltype57 = type_nit__MMethodDef.color;
-idtype58 = type_nit__MMethodDef.id;
-if(var_vmpropdef == NULL) {
-var56 = 0;
-} else {
-if(cltype57 >= var_vmpropdef->type->table_size) {
-var56 = 0;
-} else {
-var56 = var_vmpropdef->type->type_table[cltype57] == idtype58;
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_mtypes, var_t); /* Direct call array#Array#add on <var_mtypes:Array[nullable MType]>*/
 }
 }
-var_59 = var56;
-if (var56){
 {
-{ /* Inline model#MPropDef#mproperty (var_vmpropdef) on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
-var62 = var_vmpropdef->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
-if (unlikely(var62 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
+((void(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_standard__abstract_collection__Iterator__next]))(var_21); /* next on <var_21:Iterator[AExpr]>*/
 }
-var60 = var62;
-RET_LABEL61:(void)0;
+} else {
+goto BREAK_label;
 }
 }
+BREAK_label: (void)0;
 {
-{ /* Inline model#MMethod#is_root_init (var60) on <var60:MProperty(MMethod)> */
-var65 = var60->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var60:MProperty(MMethod)> */
-var63 = var65;
-RET_LABEL64:(void)0;
+((void(*)(val* self))((((long)var_21&3)?class_info[((long)var_21&3)]:var_21->class)->vft[COLOR_standard__abstract_collection__Iterator__finish]))(var_21); /* finish on <var_21:Iterator[AExpr]>*/
 }
-}
-var55 = var63;
+if (var_mtype == NULL) {
+var48 = 1; /* is null */
 } else {
-var55 = var_59;
+var48 = 0; /* arg is null but recv is not */
 }
-var_66 = var55;
-if (var55){
+if (0) {
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var69 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var69 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 487);
-show_backtrace(1);
-}
-var67 = var69;
-RET_LABEL68:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other12) on <var_mtype:nullable MType(MType)> */
+var53 = var_mtype == var_other12;
+var51 = var53;
+goto RET_LABEL52;
+RET_LABEL52:(void)0;
 }
 }
-{
-{ /* Inline model#MMethod#is_root_init (var67) on <var67:MMethod> */
-var72 = var67->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var67:MMethod> */
-var70 = var72;
-RET_LABEL71:(void)0;
+var49 = var51;
+goto RET_LABEL50;
+RET_LABEL50:(void)0;
 }
+var48 = var49;
 }
-var73 = !var70;
-var54 = var73;
-} else {
-var54 = var_66;
+if (var48){
+{
+{ /* Inline typing#AArrayExpr#element_mtype (self) on <self:AArrayExpr> */
+var56 = self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val; /* _element_mtype on <self:AArrayExpr> */
+var54 = var56;
+RET_LABEL55:(void)0;
 }
-if (var54){
-if (varonce74) {
-var75 = varonce74;
-} else {
-var76 = "Error: ";
-var77 = 7;
-var78 = standard___standard__NativeString___to_s_with_length(var76, var77);
-var75 = var78;
-varonce74 = var75;
 }
-if (varonce79) {
-var80 = varonce79;
+if (var54 == NULL) {
+var57 = 0; /* is null */
 } else {
-var81 = " cannot call a factory ";
-var82 = 23;
-var83 = standard___standard__NativeString___to_s_with_length(var81, var82);
-var80 = var83;
-varonce79 = var80;
+var57 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var54,((val*)NULL)) on <var54:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var86 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var86 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 487);
-show_backtrace(1);
+var60 = ((short int(*)(val* self, val* p0))(var54->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var54, var_other); /* == on <var54:nullable MType(MType)>*/
 }
-var84 = var86;
-RET_LABEL85:(void)0;
+var61 = !var60;
+var58 = var61;
+goto RET_LABEL59;
+RET_LABEL59:(void)0;
 }
+var57 = var58;
 }
-var87 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var87 = array_instance Array[Object] */
-var88 = 4;
-var89 = NEW_standard__NativeArray(var88, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var89)->values[0] = (val*) var75;
-((struct instance_standard__NativeArray*)var89)->values[1] = (val*) var_vmpropdef;
-((struct instance_standard__NativeArray*)var89)->values[2] = (val*) var80;
-((struct instance_standard__NativeArray*)var89)->values[3] = (val*) var84;
+if (var57){
 {
-((void (*)(val* self, val* p0, long p1))(var87->class->vft[COLOR_standard__array__Array__with_native]))(var87, var89, var88) /* with_native on <var87:Array[Object]>*/;
-}
+{ /* Inline typing#AArrayExpr#element_mtype (self) on <self:AArrayExpr> */
+var64 = self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val; /* _element_mtype on <self:AArrayExpr> */
+var62 = var64;
+RET_LABEL63:(void)0;
 }
-{
-var90 = ((val* (*)(val* self))(var87->class->vft[COLOR_standard__string__Object__to_s]))(var87) /* to_s on <var87:Array[Object]>*/;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var90); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
-}
-} else {
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_mtypes, var62); /* Direct call array#Array#add on <var_mtypes:Array[nullable MType]>*/
 }
 } else {
 }
 {
-{ /* Inline model#MSignature#return_mtype (var_msignature) on <var_msignature:MSignature> */
-var93 = var_msignature->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var_msignature:MSignature> */
-var91 = var93;
-RET_LABEL92:(void)0;
+var65 = nit__typing___nit__typing__TypeVisitor___merge_types(var_v, self, var_mtypes);
 }
+var_mtype = var65;
+} else {
 }
-var_ret = var91;
-var94 = NULL;
-if (var_ret == NULL) {
-var95 = 0; /* is null */
+if (var_mtype == NULL) {
+var67 = 1; /* is null */
 } else {
-var95 = 1; /* arg is null and recv is not */
+var67 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_ret,var94) on <var_ret:nullable MType> */
-var_other98 = var94;
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other12 = ((val*)NULL);
 {
-var99 = ((short int (*)(val* self, val* p0))(var_ret->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ret, var_other98) /* == on <var_ret:nullable MType(MType)>*/;
-}
-var100 = !var99;
-var96 = var100;
-goto RET_LABEL97;
-RET_LABEL97:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other12) on <var_mtype:nullable MType(MType)> */
+var72 = var_mtype == var_other12;
+var70 = var72;
+goto RET_LABEL71;
+RET_LABEL71:(void)0;
 }
-var95 = var96;
 }
-if (var95){
-{
-{ /* Inline typing#AExpr#mtype= (self,var_ret) on <self:ASendExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_ret; /* _mtype on <self:ASendExpr> */
-RET_LABEL101:(void)0;
+var68 = var70;
+goto RET_LABEL69;
+RET_LABEL69:(void)0;
 }
+var67 = var68;
 }
+var_73 = var67;
+if (var67){
+var66 = var_73;
 } else {
-var102 = 1;
-{
-{ /* Inline typing#AExpr#is_typed= (self,var102) on <self:ASendExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var102; /* _is_typed on <self:ASendExpr> */
-RET_LABEL103:(void)0;
-}
+/* <var_mtype:nullable MType(MType)> isa MNullType */
+cltype = type_nit__MNullType.color;
+idtype = type_nit__MNullType.id;
+if(cltype >= var_mtype->type->table_size) {
+var74 = 0;
+} else {
+var74 = var_mtype->type->type_table[cltype] == idtype;
 }
+var66 = var74;
 }
-RET_LABEL:;
+if (var66){
+if (unlikely(varonce==NULL)) {
+var75 = NEW_standard__NativeArray(2l, &type_standard__NativeArray__standard__String);
+if (likely(varonce76!=NULL)) {
+var77 = varonce76;
+} else {
+var78 = "Type Error: ambiguous array type ";
+var79 = standard___standard__NativeString___to_s_with_length(var78, 33l);
+var77 = var79;
+varonce76 = var77;
 }
-/* method typing#ASendExpr#raw_arguments for (self: ASendExpr): Array[AExpr] */
-val* nit__typing___ASendExpr___raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : Array[AExpr] */;
-{
-var1 = ((val* (*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__compute_raw_arguments]))(self) /* compute_raw_arguments on <self:ASendExpr>*/;
+((struct instance_standard__NativeArray*)var75)->values[0]=var77;
+} else {
+var75 = varonce;
+varonce = NULL;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+if (likely(varonce80!=NULL)) {
+var81 = varonce80;
+} else {
+var82 = " ";
+var83 = standard___standard__NativeString___to_s_with_length(var82, 1l);
+var81 = var83;
+varonce80 = var81;
 }
-/* method typing#ABinopExpr#compute_raw_arguments for (self: ABinopExpr): Array[AExpr] */
-val* nit__typing___ABinopExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : Array[AExpr] */;
-long var2 /* : Int */;
-val* var_ /* var : Array[AExpr] */;
-val* var3 /* : AExpr */;
-val* var5 /* : AExpr */;
-var1 = NEW_standard__Array(&type_standard__Array__nit__AExpr);
-var2 = 1;
 {
-standard___standard__Array___with_capacity(var1, var2); /* Direct call array#Array#with_capacity on <var1:Array[AExpr]>*/
+var84 = standard__string___Collection___join(var_mtypes, var81);
 }
-var_ = var1;
+((struct instance_standard__NativeArray*)var75)->values[1]=var84;
 {
-{ /* Inline parser_nodes#ABinopExpr#n_expr2 (self) on <self:ABinopExpr> */
-var5 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ABinopExpr> */
-if (unlikely(var5 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1809);
-show_backtrace(1);
-}
-var3 = var5;
-RET_LABEL4:(void)0;
-}
+var85 = ((val*(*)(val* self))(var75->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var75); /* native_to_s on <var75:NativeArray[String]>*/
 }
+varonce = var75;
 {
-standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_, var3); /* Direct call array#AbstractArray#push on <var_:Array[AExpr]>*/
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var85); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var = var_;
 goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method typing#AEqExpr#property_name for (self: AEqExpr): String */
-val* nit__typing___AEqExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
 } else {
-var2 = "==";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+if (var_useless){
+if (var_ntype == NULL) {
+var86 = 0; /* is null */
+} else {
+var86 = 1; /* arg is null and recv is not */
 }
-/* method typing#AEqExpr#accept_typing for (self: AEqExpr, TypeVisitor) */
-void nit__typing___AEqExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-var_v = p0;
+if (0) {
+{ /* Inline kernel#Object#!= (var_ntype,((val*)NULL)) on <var_ntype:nullable AType> */
+var_other = ((val*)NULL);
 {
-((void (*)(val* self, val* p0))(self->class->vft[COLOR_nit__typing___AEqExpr___AExpr__accept_typing]))(self, p0) /* accept_typing on <self:AEqExpr>*/;
+var89 = ((short int(*)(val* self, val* p0))(var_ntype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ntype, var_other); /* == on <var_ntype:nullable AType(AType)>*/
+}
+var90 = !var89;
+var87 = var90;
+goto RET_LABEL88;
+RET_LABEL88:(void)0;
+}
+var86 = var87;
+}
+if (unlikely(!var86)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1459);
+fatal_exit(1);
 }
 {
-nit__typing___nit__typing__TypeVisitor___null_test(var_v, self); /* Direct call typing#TypeVisitor#null_test on <var_v:TypeVisitor>*/
+{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
+var93 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
+if (unlikely(var93 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
+fatal_exit(1);
 }
-RET_LABEL:;
+var91 = var93;
+RET_LABEL92:(void)0;
 }
-/* method typing#ANeExpr#property_name for (self: ANeExpr): String */
-val* nit__typing___ANeExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+}
+if (likely(varonce94!=NULL)) {
+var95 = varonce94;
 } else {
-var2 = "!=";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var96 = "useless-type";
+var97 = standard___standard__NativeString___to_s_with_length(var96, 12l);
+var95 = var97;
+varonce94 = var95;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+if (unlikely(varonce98==NULL)) {
+var99 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce100!=NULL)) {
+var101 = varonce100;
+} else {
+var102 = "Warning: useless type declaration `";
+var103 = standard___standard__NativeString___to_s_with_length(var102, 35l);
+var101 = var103;
+varonce100 = var101;
+}
+((struct instance_standard__NativeArray*)var99)->values[0]=var101;
+if (likely(varonce104!=NULL)) {
+var105 = varonce104;
+} else {
+var106 = "` in literal Array since it can be inferred from the elements type.";
+var107 = standard___standard__NativeString___to_s_with_length(var106, 67l);
+var105 = var107;
+varonce104 = var105;
+}
+((struct instance_standard__NativeArray*)var99)->values[2]=var105;
+} else {
+var99 = varonce98;
+varonce98 = NULL;
 }
-/* method typing#ANeExpr#accept_typing for (self: ANeExpr, TypeVisitor) */
-void nit__typing___ANeExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-var_v = p0;
 {
-((void (*)(val* self, val* p0))(self->class->vft[COLOR_nit__typing___ANeExpr___AExpr__accept_typing]))(self, p0) /* accept_typing on <self:ANeExpr>*/;
+var108 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_standard__string__Object__to_s]))(var_mtype); /* to_s on <var_mtype:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var99)->values[1]=var108;
 {
-nit__typing___nit__typing__TypeVisitor___null_test(var_v, self); /* Direct call typing#TypeVisitor#null_test on <var_v:TypeVisitor>*/
+var109 = ((val*(*)(val* self))(var99->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var99); /* native_to_s on <var99:NativeArray[String]>*/
 }
-RET_LABEL:;
+varonce98 = var99;
+{
+nit___nit__ModelBuilder___warning(var91, var_ntype, var95, var109); /* Direct call modelbuilder_base#ModelBuilder#warning on <var91:ModelBuilder>*/
 }
-/* method typing#ALtExpr#property_name for (self: ALtExpr): String */
-val* nit__typing___ALtExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
 } else {
-var2 = "<";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline typing#AArrayExpr#element_mtype= (self,var_mtype) on <self:AArrayExpr> */
+self->attrs[COLOR_nit__typing__AArrayExpr___element_mtype].val = var_mtype; /* _element_mtype on <self:AArrayExpr> */
+RET_LABEL110:(void)0;
 }
-/* method typing#ALeExpr#property_name for (self: ALeExpr): String */
-val* nit__typing___ALeExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+}
+if (likely(varonce111!=NULL)) {
+var112 = varonce111;
 } else {
-var2 = "<=";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var113 = "Array";
+var114 = standard___standard__NativeString___to_s_with_length(var113, 5l);
+var112 = var114;
+varonce111 = var112;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var115 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var112);
 }
-/* method typing#ALlExpr#property_name for (self: ALlExpr): String */
-val* nit__typing___ALlExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+var_mclass = var115;
+if (var_mclass == NULL) {
+var116 = 1; /* is null */
 } else {
-var2 = "<<";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var116 = 0; /* arg is null but recv is not */
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other12 = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other12) on <var_mclass:nullable MClass(MClass)> */
+var121 = var_mclass == var_other12;
+var119 = var121;
+goto RET_LABEL120;
+RET_LABEL120:(void)0;
 }
-/* method typing#AGtExpr#property_name for (self: AGtExpr): String */
-val* nit__typing___AGtExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = ">";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var117 = var119;
+goto RET_LABEL118;
+RET_LABEL118:(void)0;
 }
-/* method typing#AGeExpr#property_name for (self: AGeExpr): String */
-val* nit__typing___AGeExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = ">=";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var116 = var117;
 }
-var = var1;
+if (var116){
 goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method typing#AGgExpr#property_name for (self: AGgExpr): String */
-val* nit__typing___AGgExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
 } else {
-var2 = ">>";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var122 = NEW_standard__Array(&type_standard__Array__nit__MType);
+{
+standard___standard__Array___with_capacity(var122, 1l); /* Direct call array#Array#with_capacity on <var122:Array[MType]>*/
 }
-/* method typing#APlusExpr#property_name for (self: APlusExpr): String */
-val* nit__typing___APlusExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "+";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var_123 = var122;
+{
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_123, var_mtype); /* Direct call array#AbstractArray#push on <var_123:Array[MType]>*/
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var124 = nit___nit__MClass___get_mtype(var_mclass, var_123);
 }
-/* method typing#AMinusExpr#property_name for (self: AMinusExpr): String */
-val* nit__typing___AMinusExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+var_array_mtype = var124;
+if (likely(varonce125!=NULL)) {
+var126 = varonce125;
 } else {
-var2 = "-";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var127 = "with_capacity";
+var128 = standard___standard__NativeString___to_s_with_length(var127, 13l);
+var126 = var128;
+varonce125 = var126;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var129 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_array_mtype, var126, 0);
 }
-/* method typing#AStarshipExpr#property_name for (self: AStarshipExpr): String */
-val* nit__typing___AStarshipExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "<=>";
-var3 = 3;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+{
+{ /* Inline typing#AArrayExpr#with_capacity_callsite= (self,var129) on <self:AArrayExpr> */
+self->attrs[COLOR_nit__typing__AArrayExpr___with_capacity_callsite].val = var129; /* _with_capacity_callsite on <self:AArrayExpr> */
+RET_LABEL130:(void)0;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method typing#AStarExpr#property_name for (self: AStarExpr): String */
-val* nit__typing___AStarExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+if (likely(varonce131!=NULL)) {
+var132 = varonce131;
 } else {
-var2 = "*";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var133 = "push";
+var134 = standard___standard__NativeString___to_s_with_length(var133, 4l);
+var132 = var134;
+varonce131 = var132;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var135 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_array_mtype, var132, 0);
 }
-/* method typing#AStarstarExpr#property_name for (self: AStarstarExpr): String */
-val* nit__typing___AStarstarExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "**";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+{
+{ /* Inline typing#AArrayExpr#push_callsite= (self,var135) on <self:AArrayExpr> */
+self->attrs[COLOR_nit__typing__AArrayExpr___push_callsite].val = var135; /* _push_callsite on <self:AArrayExpr> */
+RET_LABEL136:(void)0;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method typing#ASlashExpr#property_name for (self: ASlashExpr): String */
-val* nit__typing___ASlashExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "/";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+{
+{ /* Inline typing#AExpr#mtype= (self,var_array_mtype) on <self:AArrayExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_array_mtype; /* _mtype on <self:AArrayExpr> */
+RET_LABEL137:(void)0;
+}
 }
+RET_LABEL:;
+}
+/* method typing#ARangeExpr#init_callsite for (self: ARangeExpr): nullable CallSite */
+val* nit__typing___ARangeExpr___init_callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__ARangeExpr___init_callsite].val; /* _init_callsite on <self:ARangeExpr> */
 var = var1;
-goto RET_LABEL;
 RET_LABEL:;
 return var;
 }
-/* method typing#APercentExpr#property_name for (self: APercentExpr): String */
-val* nit__typing___APercentExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "%";
-var3 = 1;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
-}
-var = var1;
-goto RET_LABEL;
+/* method typing#ARangeExpr#init_callsite= for (self: ARangeExpr, nullable CallSite) */
+void nit__typing___ARangeExpr___init_callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ARangeExpr___init_callsite].val = p0; /* _init_callsite on <self:ARangeExpr> */
 RET_LABEL:;
-return var;
 }
-/* method typing#AUminusExpr#property_name for (self: AUminusExpr): String */
-val* nit__typing___AUminusExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
+/* method typing#ARangeExpr#accept_typing for (self: ARangeExpr, TypeVisitor) */
+void nit__typing___ARangeExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
 static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+val* var /* : String */;
+char* var1 /* : NativeString */;
+val* var2 /* : FlatString */;
+val* var3 /* : nullable MClass */;
+val* var_discrete_class /* var discrete_class: nullable MClass */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : MClassDef */;
+val* var12 /* : MClassDef */;
+val* var13 /* : MClassType */;
+val* var15 /* : MClassType */;
+val* var_discrete_type /* var discrete_type: MClassType */;
+val* var16 /* : AExpr */;
+val* var18 /* : AExpr */;
+val* var19 /* : nullable MType */;
+val* var_t1 /* var t1: nullable MType */;
+val* var20 /* : AExpr */;
+val* var22 /* : AExpr */;
+val* var23 /* : nullable MType */;
+val* var_t2 /* var t2: nullable MType */;
+short int var24 /* : Bool */;
+short int var25 /* : Bool */;
+short int var26 /* : Bool */;
+short int var28 /* : Bool */;
+short int var30 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var31 /* : Bool */;
+short int var32 /* : Bool */;
+short int var34 /* : Bool */;
+short int var36 /* : Bool */;
+static val* varonce37;
+val* var38 /* : String */;
+char* var39 /* : NativeString */;
+val* var40 /* : FlatString */;
+val* var41 /* : nullable MClass */;
+val* var_mclass /* var mclass: nullable MClass */;
+short int var42 /* : Bool */;
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+short int var47 /* : Bool */;
+short int var48 /* : Bool */;
+val* var49 /* : Array[MType] */;
+val* var_50 /* var : Array[MType] */;
+val* var51 /* : MClassType */;
+val* var_mtype /* var mtype: nullable Object */;
+short int var52 /* : Bool */;
+val* var53 /* : Array[MType] */;
+val* var_54 /* var : Array[MType] */;
+val* var55 /* : MClassType */;
+val* var57 /* : NativeArray[String] */;
+static val* varonce56;
+static val* varonce58;
+val* var59 /* : String */;
+char* var60 /* : NativeString */;
+val* var61 /* : FlatString */;
+static val* varonce62;
+val* var63 /* : String */;
+char* var64 /* : NativeString */;
+val* var65 /* : FlatString */;
+static val* varonce66;
+val* var67 /* : String */;
+char* var68 /* : NativeString */;
+val* var69 /* : FlatString */;
+val* var70 /* : String */;
+val* var71 /* : String */;
+val* var72 /* : String */;
+short int var74 /* : Bool */;
+int cltype;
+int idtype;
+static val* varonce75;
+val* var76 /* : String */;
+char* var77 /* : NativeString */;
+val* var78 /* : FlatString */;
+val* var79 /* : nullable CallSite */;
+val* var_callsite /* var callsite: nullable Object */;
+short int var80 /* : Bool */;
+int cltype81;
+int idtype82;
+static val* varonce83;
+val* var84 /* : String */;
+char* var85 /* : NativeString */;
+val* var86 /* : FlatString */;
+val* var87 /* : nullable CallSite */;
+var_v = p0;
+if (likely(varonce!=NULL)) {
+var = varonce;
 } else {
-var2 = "unary -";
-var3 = 7;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var1 = "Discrete";
+var2 = standard___standard__NativeString___to_s_with_length(var1, 8l);
+var = var2;
+varonce = var;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var3 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var);
 }
-/* method typing#AUminusExpr#compute_raw_arguments for (self: AUminusExpr): Array[AExpr] */
-val* nit__typing___AUminusExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : Array[AExpr] */;
-var1 = NEW_standard__Array(&type_standard__Array__nit__AExpr);
+var_discrete_class = var3;
+if (var_discrete_class == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_discrete_class,((val*)NULL)) on <var_discrete_class:nullable MClass> */
+var_other = ((val*)NULL);
 {
-standard___standard__Array___standard__kernel__Object__init(var1); /* Direct call array#Array#init on <var1:Array[AExpr]>*/
+{ /* Inline kernel#Object#is_same_instance (var_discrete_class,var_other) on <var_discrete_class:nullable MClass(MClass)> */
+var9 = var_discrete_class == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var = var1;
+}
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
 goto RET_LABEL;
-RET_LABEL:;
-return var;
+} else {
 }
-/* method typing#ACallExpr#property_name for (self: ACallExpr): String */
-val* nit__typing___ACallExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-val* var1 /* : TId */;
-val* var3 /* : TId */;
-val* var4 /* : String */;
 {
-{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1999);
-show_backtrace(1);
+{ /* Inline model#MClass#intro (var_discrete_class) on <var_discrete_class:nullable MClass(MClass)> */
+var12 = var_discrete_class->attrs[COLOR_nit__model__MClass___intro].val; /* _intro on <var_discrete_class:nullable MClass(MClass)> */
+if (unlikely(var12 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _intro");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 460);
+fatal_exit(1);
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var10 = var12;
+RET_LABEL11:(void)0;
 }
 }
 {
-var4 = nit__lexer_work___Token___text(var1);
+{ /* Inline model#MClassDef#bound_mtype (var10) on <var10:MClassDef> */
+var15 = var10->attrs[COLOR_nit__model__MClassDef___bound_mtype].val; /* _bound_mtype on <var10:MClassDef> */
+if (unlikely(var15 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _bound_mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 556);
+fatal_exit(1);
 }
-var = var4;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var13 = var15;
+RET_LABEL14:(void)0;
 }
-/* method typing#ACallExpr#compute_raw_arguments for (self: ACallExpr): Array[AExpr] */
-val* nit__typing___ACallExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
+}
+var_discrete_type = var13;
 {
-{ /* Inline parser_nodes#ACallFormExpr#n_args (self) on <self:ACallExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2002);
-show_backtrace(1);
+{ /* Inline parser_nodes#ARangeExpr#n_expr (self) on <self:ARangeExpr> */
+var18 = self->attrs[COLOR_nit__parser_nodes__ARangeExpr___n_expr].val; /* _n_expr on <self:ARangeExpr> */
+if (unlikely(var18 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2417);
+fatal_exit(1);
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var16 = var18;
+RET_LABEL17:(void)0;
 }
 }
 {
-var4 = nit__typing___AExprs___to_a(var1);
-}
-var = var4;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var19 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var16, var_discrete_type);
 }
-/* method typing#ACallAssignExpr#property_name for (self: ACallAssignExpr): String */
-val* nit__typing___ACallAssignExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-val* var1 /* : TId */;
-val* var3 /* : TId */;
-val* var4 /* : String */;
-static val* varonce;
-val* var5 /* : String */;
-char* var6 /* : NativeString */;
-long var7 /* : Int */;
-val* var8 /* : FlatString */;
-val* var9 /* : String */;
+var_t1 = var19;
 {
-{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallAssignExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallAssignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1999);
-show_backtrace(1);
+{ /* Inline parser_nodes#ARangeExpr#n_expr2 (self) on <self:ARangeExpr> */
+var22 = self->attrs[COLOR_nit__parser_nodes__ARangeExpr___n_expr2].val; /* _n_expr2 on <self:ARangeExpr> */
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2423);
+fatal_exit(1);
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var20 = var22;
+RET_LABEL21:(void)0;
 }
 }
 {
-var4 = nit__lexer_work___Token___text(var1);
+var23 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var20, var_discrete_type);
 }
-if (varonce) {
-var5 = varonce;
+var_t2 = var23;
+if (var_t1 == NULL) {
+var25 = 1; /* is null */
 } else {
-var6 = "=";
-var7 = 1;
-var8 = standard___standard__NativeString___to_s_with_length(var6, var7);
-var5 = var8;
-varonce = var5;
+var25 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_t1,((val*)NULL)) on <var_t1:nullable MType> */
+var_other = ((val*)NULL);
 {
-var9 = ((val* (*)(val* self, val* p0))(var4->class->vft[COLOR_standard__string__String___43d]))(var4, var5) /* + on <var4:String>*/;
+{ /* Inline kernel#Object#is_same_instance (var_t1,var_other) on <var_t1:nullable MType(MType)> */
+var30 = var_t1 == var_other;
+var28 = var30;
+goto RET_LABEL29;
+RET_LABEL29:(void)0;
 }
-var = var9;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method typing#ACallAssignExpr#compute_raw_arguments for (self: ACallAssignExpr): Array[AExpr] */
-val* nit__typing___ACallAssignExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
-val* var_res /* var res: Array[AExpr] */;
-val* var5 /* : AExpr */;
-val* var7 /* : AExpr */;
-{
-{ /* Inline parser_nodes#ACallFormExpr#n_args (self) on <self:ACallAssignExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallAssignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2002);
-show_backtrace(1);
+var26 = var28;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var25 = var26;
 }
+var_ = var25;
+if (var25){
+var24 = var_;
+} else {
+if (var_t2 == NULL) {
+var31 = 1; /* is null */
+} else {
+var31 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_t2,((val*)NULL)) on <var_t2:nullable MType> */
+var_other = ((val*)NULL);
 {
-var4 = nit__typing___AExprs___to_a(var1);
+{ /* Inline kernel#Object#is_same_instance (var_t2,var_other) on <var_t2:nullable MType(MType)> */
+var36 = var_t2 == var_other;
+var34 = var36;
+goto RET_LABEL35;
+RET_LABEL35:(void)0;
 }
-var_res = var4;
-{
-{ /* Inline parser_nodes#AAssignFormExpr#n_value (self) on <self:ACallAssignExpr> */
-var7 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ACallAssignExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1772);
-show_backtrace(1);
 }
-var5 = var7;
-RET_LABEL6:(void)0;
+var32 = var34;
+goto RET_LABEL33;
+RET_LABEL33:(void)0;
 }
+var31 = var32;
 }
-{
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_res, var5); /* Direct call array#Array#add on <var_res:Array[AExpr]>*/
+var24 = var31;
 }
-var = var_res;
+if (var24){
 goto RET_LABEL;
-RET_LABEL:;
-return var;
+} else {
 }
-/* method typing#ABraExpr#property_name for (self: ABraExpr): String */
-val* nit__typing___ABraExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+if (likely(varonce37!=NULL)) {
+var38 = varonce37;
 } else {
-var2 = "[]";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
+var39 = "Range";
+var40 = standard___standard__NativeString___to_s_with_length(var39, 5l);
+var38 = var40;
+varonce37 = var38;
 }
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+var41 = nit__typing___nit__typing__TypeVisitor___get_mclass(var_v, self, var38);
 }
-/* method typing#ABraExpr#compute_raw_arguments for (self: ABraExpr): Array[AExpr] */
-val* nit__typing___ABraExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
+var_mclass = var41;
+if (var_mclass == NULL) {
+var42 = 1; /* is null */
+} else {
+var42 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_mclass,((val*)NULL)) on <var_mclass:nullable MClass> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ABraFormExpr#n_args (self) on <self:ABraExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2071);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_mclass,var_other) on <var_mclass:nullable MClass(MClass)> */
+var47 = var_mclass == var_other;
+var45 = var47;
+goto RET_LABEL46;
+RET_LABEL46:(void)0;
 }
-var1 = var3;
-RET_LABEL2:(void)0;
 }
+var43 = var45;
+goto RET_LABEL44;
+RET_LABEL44:(void)0;
 }
-{
-var4 = nit__typing___AExprs___to_a(var1);
+var42 = var43;
 }
-var = var4;
+if (var42){
 goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method typing#ABraAssignExpr#property_name for (self: ABraAssignExpr): String */
-val* nit__typing___ABraAssignExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
 } else {
-var2 = "[]=";
-var3 = 3;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
-}
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method typing#ABraAssignExpr#compute_raw_arguments for (self: ABraAssignExpr): Array[AExpr] */
-val* nit__typing___ABraAssignExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
-val* var_res /* var res: Array[AExpr] */;
-val* var5 /* : AExpr */;
-val* var7 /* : AExpr */;
 {
-{ /* Inline parser_nodes#ABraFormExpr#n_args (self) on <self:ABraAssignExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraAssignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2071);
-show_backtrace(1);
-}
-var1 = var3;
-RET_LABEL2:(void)0;
-}
+var48 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_t1, var_t2);
 }
+if (var48){
+var49 = NEW_standard__Array(&type_standard__Array__nit__MType);
 {
-var4 = nit__typing___AExprs___to_a(var1);
+standard___standard__Array___with_capacity(var49, 1l); /* Direct call array#Array#with_capacity on <var49:Array[MType]>*/
 }
-var_res = var4;
+var_50 = var49;
 {
-{ /* Inline parser_nodes#AAssignFormExpr#n_value (self) on <self:ABraAssignExpr> */
-var7 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ABraAssignExpr> */
-if (unlikely(var7 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1772);
-show_backtrace(1);
-}
-var5 = var7;
-RET_LABEL6:(void)0;
-}
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_50, var_t2); /* Direct call array#AbstractArray#push on <var_50:Array[MType]>*/
 }
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_res, var5); /* Direct call array#Array#add on <var_res:Array[AExpr]>*/
-}
-var = var_res;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
-}
-/* method typing#ASendReassignFormExpr#write_callsite for (self: ASendReassignFormExpr): nullable CallSite */
-val* nit__typing___ASendReassignFormExpr___write_callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__ASendReassignFormExpr___write_callsite].val; /* _write_callsite on <self:ASendReassignFormExpr> */
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method typing#ASendReassignFormExpr#write_callsite= for (self: ASendReassignFormExpr, nullable CallSite) */
-void nit__typing___ASendReassignFormExpr___write_callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ASendReassignFormExpr___write_callsite].val = p0; /* _write_callsite on <self:ASendReassignFormExpr> */
-RET_LABEL:;
+var51 = nit___nit__MClass___get_mtype(var_mclass, var_50);
 }
-/* method typing#ASendReassignFormExpr#accept_typing for (self: ASendReassignFormExpr, TypeVisitor) */
-void nit__typing___ASendReassignFormExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var_recvtype /* var recvtype: nullable MType */;
-val* var4 /* : String */;
-val* var_name /* var name: String */;
-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 */;
-val* var12 /* : AExpr */;
-val* var14 /* : AExpr */;
-short int var15 /* : Bool */;
-int cltype;
-int idtype;
-short int var_for_self /* var for_self: Bool */;
-val* var16 /* : nullable CallSite */;
-val* var_callsite /* var callsite: nullable CallSite */;
-val* var17 /* : null */;
-short int var18 /* : Bool */;
-short int var19 /* : Bool */;
-short int var21 /* : Bool */;
-short int var23 /* : Bool */;
-val* var25 /* : Array[AExpr] */;
-val* var_args /* var args: Array[AExpr] */;
-short int var26 /* : Bool */;
-val* var27 /* : MSignature */;
-val* var29 /* : MSignature */;
-val* var30 /* : nullable MType */;
-val* var32 /* : nullable MType */;
-val* var_readtype /* var readtype: nullable MType */;
-val* var33 /* : null */;
-short int var34 /* : Bool */;
-short int var35 /* : Bool */;
-short int var37 /* : Bool */;
-short int var39 /* : Bool */;
-static val* varonce;
-val* var40 /* : String */;
-char* var41 /* : NativeString */;
-long var42 /* : Int */;
-val* var43 /* : FlatString */;
-static val* varonce44;
-val* var45 /* : String */;
-char* var46 /* : NativeString */;
-long var47 /* : Int */;
-val* var48 /* : FlatString */;
-val* var49 /* : Array[Object] */;
-long var50 /* : Int */;
-val* var51 /* : NativeArray[Object] */;
-val* var52 /* : String */;
-static val* varonce53;
-val* var54 /* : String */;
-char* var55 /* : NativeString */;
-long var56 /* : Int */;
-val* var57 /* : FlatString */;
-val* var58 /* : String */;
-val* var59 /* : AExpr */;
-val* var61 /* : AExpr */;
-short int var62 /* : Bool */;
-int cltype63;
-int idtype64;
-val* var65 /* : nullable CallSite */;
-val* var_wcallsite /* var wcallsite: nullable CallSite */;
-val* var66 /* : null */;
-short int var67 /* : Bool */;
-short int var68 /* : Bool */;
-short int var70 /* : Bool */;
-short int var72 /* : Bool */;
-val* var74 /* : MSignature */;
-val* var76 /* : MSignature */;
-val* var77 /* : Array[MParameter] */;
-val* var79 /* : Array[MParameter] */;
-val* var80 /* : nullable Object */;
-val* var81 /* : MType */;
-val* var83 /* : MType */;
-val* var84 /* : nullable MType */;
-val* var_wtype /* var wtype: nullable MType */;
-val* var85 /* : null */;
-short int var86 /* : Bool */;
-short int var87 /* : Bool */;
-short int var89 /* : Bool */;
-short int var91 /* : Bool */;
-val* var92 /* : Array[nullable Object] */;
-val* var93 /* : AExpr */;
-val* var95 /* : AExpr */;
-short int var96 /* : Bool */;
-short int var97 /* : Bool */;
-var_v = p0;
+var_mtype = var51;
+} else {
 {
-{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendReassignFormExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendReassignFormExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1802);
-show_backtrace(1);
-}
-var = var2;
-RET_LABEL1:(void)0;
-}
+var52 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var_t2, var_t1);
 }
+if (var52){
+var53 = NEW_standard__Array(&type_standard__Array__nit__MType);
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+standard___standard__Array___with_capacity(var53, 1l); /* Direct call array#Array#with_capacity on <var53:Array[MType]>*/
 }
-var_recvtype = var3;
+var_54 = var53;
 {
-var4 = ((val* (*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__property_name]))(self) /* property_name on <self:ASendReassignFormExpr>*/;
-}
-var_name = var4;
-var5 = NULL;
-if (var_recvtype == NULL) {
-var6 = 1; /* is null */
-} else {
-var6 = 0; /* arg is null but recv is not */
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_54, var_t1); /* Direct call array#AbstractArray#push on <var_54:Array[MType]>*/
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_recvtype,var5) on <var_recvtype:nullable MType> */
-var_other = var5;
 {
-{ /* Inline kernel#Object#is_same_instance (var_recvtype,var_other) on <var_recvtype:nullable MType(MType)> */
-var11 = var_recvtype == var_other;
-var9 = var11;
-goto RET_LABEL10;
-RET_LABEL10:(void)0;
-}
-}
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
-}
-var6 = var7;
+var55 = nit___nit__MClass___get_mtype(var_mclass, var_54);
 }
-if (var6){
-goto RET_LABEL;
+var_mtype = var55;
 } else {
-}
-{
-{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendReassignFormExpr> */
-var14 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendReassignFormExpr> */
-if (unlikely(var14 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1802);
-show_backtrace(1);
-}
-var12 = var14;
-RET_LABEL13:(void)0;
-}
-}
-/* <var12:AExpr> isa ASelfExpr */
-cltype = type_nit__ASelfExpr.color;
-idtype = type_nit__ASelfExpr.id;
-if(cltype >= var12->type->table_size) {
-var15 = 0;
+if (unlikely(varonce56==NULL)) {
+var57 = NEW_standard__NativeArray(5l, &type_standard__NativeArray__standard__String);
+if (likely(varonce58!=NULL)) {
+var59 = varonce58;
 } else {
-var15 = var12->type->type_table[cltype] == idtype;
-}
-var_for_self = var15;
-{
-var16 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_recvtype, var_name, var_for_self);
+var60 = "Type Error: cannot create range: `";
+var61 = standard___standard__NativeString___to_s_with_length(var60, 34l);
+var59 = var61;
+varonce58 = var59;
 }
-var_callsite = var16;
-var17 = NULL;
-if (var_callsite == NULL) {
-var18 = 1; /* is null */
+((struct instance_standard__NativeArray*)var57)->values[0]=var59;
+if (likely(varonce62!=NULL)) {
+var63 = varonce62;
 } else {
-var18 = 0; /* arg is null but recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#== (var_callsite,var17) on <var_callsite:nullable CallSite> */
-var_other = var17;
-{
-{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
-var23 = var_callsite == var_other;
-var21 = var23;
-goto RET_LABEL22;
-RET_LABEL22:(void)0;
-}
-}
-var19 = var21;
-goto RET_LABEL20;
-RET_LABEL20:(void)0;
+var64 = "` vs `";
+var65 = standard___standard__NativeString___to_s_with_length(var64, 6l);
+var63 = var65;
+varonce62 = var63;
 }
-var18 = var19;
+((struct instance_standard__NativeArray*)var57)->values[2]=var63;
+if (likely(varonce66!=NULL)) {
+var67 = varonce66;
+} else {
+var68 = "`.";
+var69 = standard___standard__NativeString___to_s_with_length(var68, 2l);
+var67 = var69;
+varonce66 = var67;
 }
-if (var18){
-goto RET_LABEL;
+((struct instance_standard__NativeArray*)var57)->values[4]=var67;
 } else {
+var57 = varonce56;
+varonce56 = NULL;
 }
 {
-{ /* Inline typing#ASendExpr#callsite= (self,var_callsite) on <self:ASendReassignFormExpr> */
-self->attrs[COLOR_nit__typing__ASendExpr___callsite].val = var_callsite; /* _callsite on <self:ASendReassignFormExpr> */
-RET_LABEL24:(void)0;
-}
+var70 = ((val*(*)(val* self))(var_t1->class->vft[COLOR_standard__string__Object__to_s]))(var_t1); /* to_s on <var_t1:nullable MType(MType)>*/
 }
+((struct instance_standard__NativeArray*)var57)->values[1]=var70;
 {
-var25 = ((val* (*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__compute_raw_arguments]))(self) /* compute_raw_arguments on <self:ASendReassignFormExpr>*/;
+var71 = ((val*(*)(val* self))(var_t2->class->vft[COLOR_standard__string__Object__to_s]))(var_t2); /* to_s on <var_t2:nullable MType(MType)>*/
 }
-var_args = var25;
+((struct instance_standard__NativeArray*)var57)->values[3]=var71;
 {
-var26 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
+var72 = ((val*(*)(val* self))(var57->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var57); /* native_to_s on <var57:NativeArray[String]>*/
 }
+varonce56 = var57;
 {
-{ /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var29 = var_callsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var29 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 494);
-show_backtrace(1);
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var72); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var27 = var29;
-RET_LABEL28:(void)0;
+goto RET_LABEL;
 }
 }
 {
-{ /* Inline model#MSignature#return_mtype (var27) on <var27:MSignature> */
-var32 = var27->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var27:MSignature> */
-var30 = var32;
-RET_LABEL31:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var_mtype) on <self:ARangeExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_mtype; /* _mtype on <self:ARangeExpr> */
+RET_LABEL73:(void)0;
 }
 }
-var_readtype = var30;
-var33 = NULL;
-if (var_readtype == NULL) {
-var34 = 1; /* is null */
+/* <self:ARangeExpr> isa ACrangeExpr */
+cltype = type_nit__ACrangeExpr.color;
+idtype = type_nit__ACrangeExpr.id;
+if(cltype >= self->type->table_size) {
+var74 = 0;
 } else {
-var34 = 0; /* arg is null but recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#== (var_readtype,var33) on <var_readtype:nullable MType> */
-var_other = var33;
-{
-{ /* Inline kernel#Object#is_same_instance (var_readtype,var_other) on <var_readtype:nullable MType(MType)> */
-var39 = var_readtype == var_other;
-var37 = var39;
-goto RET_LABEL38;
-RET_LABEL38:(void)0;
+var74 = self->type->type_table[cltype] == idtype;
 }
+if (var74){
+if (likely(varonce75!=NULL)) {
+var76 = varonce75;
+} else {
+var77 = "init";
+var78 = standard___standard__NativeString___to_s_with_length(var77, 4l);
+var76 = var78;
+varonce75 = var76;
 }
-var35 = var37;
-goto RET_LABEL36;
-RET_LABEL36:(void)0;
-}
-var34 = var35;
+{
+var79 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var76, 0);
 }
-if (var34){
-if (varonce) {
-var40 = varonce;
+var_callsite = var79;
 } else {
-var41 = "Error: ";
-var42 = 7;
-var43 = standard___standard__NativeString___to_s_with_length(var41, var42);
-var40 = var43;
-varonce = var40;
+/* <self:ARangeExpr> isa AOrangeExpr */
+cltype81 = type_nit__AOrangeExpr.color;
+idtype82 = type_nit__AOrangeExpr.id;
+if(cltype81 >= self->type->table_size) {
+var80 = 0;
+} else {
+var80 = self->type->type_table[cltype81] == idtype82;
 }
-if (varonce44) {
-var45 = varonce44;
+if (var80){
+if (likely(varonce83!=NULL)) {
+var84 = varonce83;
 } else {
-var46 = " is not a function";
-var47 = 18;
-var48 = standard___standard__NativeString___to_s_with_length(var46, var47);
-var45 = var48;
-varonce44 = var45;
+var85 = "without_last";
+var86 = standard___standard__NativeString___to_s_with_length(var85, 12l);
+var84 = var86;
+varonce83 = var84;
 }
-var49 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var49 = array_instance Array[Object] */
-var50 = 3;
-var51 = NEW_standard__NativeArray(var50, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var51)->values[0] = (val*) var40;
-((struct instance_standard__NativeArray*)var51)->values[1] = (val*) var_name;
-((struct instance_standard__NativeArray*)var51)->values[2] = (val*) var45;
 {
-((void (*)(val* self, val* p0, long p1))(var49->class->vft[COLOR_standard__array__Array__with_native]))(var49, var51, var50) /* with_native on <var49:Array[Object]>*/;
+var87 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_mtype, var84, 0);
 }
+var_callsite = var87;
+} else {
+PRINT_ERROR("Runtime error: %s", "Aborted");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1508);
+fatal_exit(1);
 }
-{
-var52 = ((val* (*)(val* self))(var49->class->vft[COLOR_standard__string__Object__to_s]))(var49) /* to_s on <var49:Array[Object]>*/;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var52); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
-}
-goto RET_LABEL;
-} else {
+{ /* Inline typing#ARangeExpr#init_callsite= (self,var_callsite) on <self:ARangeExpr> */
+self->attrs[COLOR_nit__typing__ARangeExpr___init_callsite].val = var_callsite; /* _init_callsite on <self:ARangeExpr> */
+RET_LABEL88:(void)0;
 }
-if (varonce53) {
-var54 = varonce53;
-} else {
-var55 = "=";
-var56 = 1;
-var57 = standard___standard__NativeString___to_s_with_length(var55, var56);
-var54 = var57;
-varonce53 = var54;
 }
-{
-var58 = ((val* (*)(val* self, val* p0))(var_name->class->vft[COLOR_standard__string__String___43d]))(var_name, var54) /* + on <var_name:String>*/;
+RET_LABEL:;
 }
+/* method typing#ANullExpr#accept_typing for (self: ANullExpr, TypeVisitor) */
+void nit__typing___ANullExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : MModule */;
+val* var2 /* : MModule */;
+val* var3 /* : Model */;
+val* var5 /* : Model */;
+val* var6 /* : MNullType */;
+val* var8 /* : MNullType */;
+var_v = p0;
 {
-{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendReassignFormExpr> */
-var61 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendReassignFormExpr> */
-if (unlikely(var61 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1802);
-show_backtrace(1);
-}
-var59 = var61;
-RET_LABEL60:(void)0;
+{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
+var2 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
+fatal_exit(1);
 }
+var = var2;
+RET_LABEL1:(void)0;
 }
-/* <var59:AExpr> isa ASelfExpr */
-cltype63 = type_nit__ASelfExpr.color;
-idtype64 = type_nit__ASelfExpr.id;
-if(cltype63 >= var59->type->table_size) {
-var62 = 0;
-} else {
-var62 = var59->type->type_table[cltype63] == idtype64;
 }
 {
-var65 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_recvtype, var58, var62);
+{ /* Inline mmodule#MModule#model (var) on <var:MModule> */
+var5 = var->attrs[COLOR_nit__mmodule__MModule___model].val; /* _model on <var:MModule> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _model");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__mmodule, 73);
+fatal_exit(1);
+}
+var3 = var5;
+RET_LABEL4:(void)0;
 }
-var_wcallsite = var65;
-var66 = NULL;
-if (var_wcallsite == NULL) {
-var67 = 1; /* is null */
-} else {
-var67 = 0; /* arg is null but recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_wcallsite,var66) on <var_wcallsite:nullable CallSite> */
-var_other = var66;
 {
-{ /* Inline kernel#Object#is_same_instance (var_wcallsite,var_other) on <var_wcallsite:nullable CallSite(CallSite)> */
-var72 = var_wcallsite == var_other;
-var70 = var72;
-goto RET_LABEL71;
-RET_LABEL71:(void)0;
+{ /* Inline model#Model#null_type (var3) on <var3:Model> */
+var8 = var3->attrs[COLOR_nit__model__Model___null_type].val; /* _null_type on <var3:Model> */
+if (unlikely(var8 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _null_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 94);
+fatal_exit(1);
 }
+var6 = var8;
+RET_LABEL7:(void)0;
 }
-var68 = var70;
-goto RET_LABEL69;
-RET_LABEL69:(void)0;
 }
-var67 = var68;
+{
+{ /* Inline typing#AExpr#mtype= (self,var6) on <self:ANullExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var6; /* _mtype on <self:ANullExpr> */
+RET_LABEL9:(void)0;
 }
-if (var67){
-goto RET_LABEL;
-} else {
 }
-{
-{ /* Inline typing#ASendReassignFormExpr#write_callsite= (self,var_wcallsite) on <self:ASendReassignFormExpr> */
-self->attrs[COLOR_nit__typing__ASendReassignFormExpr___write_callsite].val = var_wcallsite; /* _write_callsite on <self:ASendReassignFormExpr> */
-RET_LABEL73:(void)0;
+RET_LABEL:;
+}
+/* method typing#AIsaExpr#cast_type for (self: AIsaExpr): nullable MType */
+val* nit__typing___AIsaExpr___cast_type(val* self) {
+val* var /* : nullable MType */;
+val* var1 /* : nullable MType */;
+var1 = self->attrs[COLOR_nit__typing__AIsaExpr___cast_type].val; /* _cast_type on <self:AIsaExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
+/* method typing#AIsaExpr#cast_type= for (self: AIsaExpr, nullable MType) */
+void nit__typing___AIsaExpr___cast_type_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__AIsaExpr___cast_type].val = p0; /* _cast_type on <self:AIsaExpr> */
+RET_LABEL:;
 }
+/* method typing#AIsaExpr#accept_typing for (self: AIsaExpr, TypeVisitor) */
+void nit__typing___AIsaExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : AType */;
+val* var5 /* : AType */;
+val* var6 /* : nullable MType */;
+val* var_mtype /* var mtype: nullable MType */;
+val* var8 /* : AExpr */;
+val* var10 /* : AExpr */;
+val* var11 /* : nullable Variable */;
+val* var_variable /* var variable: nullable Variable */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+val* var17 /* : nullable FlowContext */;
+val* var19 /* : nullable FlowContext */;
+val* var20 /* : FlowContext */;
+val* var22 /* : FlowContext */;
+val* var23 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline typing#CallSite#msignature (var_wcallsite) on <var_wcallsite:nullable CallSite(CallSite)> */
-var76 = var_wcallsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_wcallsite:nullable CallSite(CallSite)> */
-if (unlikely(var76 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 494);
-show_backtrace(1);
+{ /* Inline parser_nodes#AIsaExpr#n_expr (self) on <self:AIsaExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2149);
+fatal_exit(1);
 }
-var74 = var76;
-RET_LABEL75:(void)0;
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
 {
-{ /* Inline model#MSignature#mparameters (var74) on <var74:MSignature> */
-var79 = var74->attrs[COLOR_nit__model__MSignature___mparameters].val; /* _mparameters on <var74:MSignature> */
-if (unlikely(var79 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1592);
-show_backtrace(1);
+{ /* Inline parser_nodes#AIsaExpr#n_type (self) on <self:AIsaExpr> */
+var5 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_type].val; /* _n_type on <self:AIsaExpr> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2155);
+fatal_exit(1);
 }
-var77 = var79;
-RET_LABEL78:(void)0;
+var3 = var5;
+RET_LABEL4:(void)0;
 }
 }
 {
-var80 = standard___standard__SequenceRead___last(var77);
+var6 = nit__typing___nit__typing__TypeVisitor___visit_expr_cast(var_v, self, var, var3);
 }
+var_mtype = var6;
 {
-{ /* Inline model#MParameter#mtype (var80) on <var80:nullable Object(MParameter)> */
-var83 = var80->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var80:nullable Object(MParameter)> */
-if (unlikely(var83 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1690);
-show_backtrace(1);
+{ /* Inline typing#AIsaExpr#cast_type= (self,var_mtype) on <self:AIsaExpr> */
+self->attrs[COLOR_nit__typing__AIsaExpr___cast_type].val = var_mtype; /* _cast_type on <self:AIsaExpr> */
+RET_LABEL7:(void)0;
 }
-var81 = var83;
-RET_LABEL82:(void)0;
+}
+{
+{ /* Inline parser_nodes#AIsaExpr#n_expr (self) on <self:AIsaExpr> */
+var10 = self->attrs[COLOR_nit__parser_nodes__AIsaExpr___n_expr].val; /* _n_expr on <self:AIsaExpr> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2149);
+fatal_exit(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
 }
 }
 {
-var84 = nit__typing___AReassignFormExpr___resolve_reassignment(self, var_v, var_readtype, var81);
+var11 = ((val*(*)(val* self))(var8->class->vft[COLOR_nit__typing__AExpr__its_variable]))(var8); /* its_variable on <var8:AExpr>*/
 }
-var_wtype = var84;
-var85 = NULL;
-if (var_wtype == NULL) {
-var86 = 1; /* is null */
+var_variable = var11;
+if (var_variable == NULL) {
+var12 = 0; /* is null */
 } else {
-var86 = 0; /* arg is null but recv is not */
+var12 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_wtype,var85) on <var_wtype:nullable MType> */
-var_other = var85;
+{ /* Inline kernel#Object#!= (var_variable,((val*)NULL)) on <var_variable:nullable Variable> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_wtype,var_other) on <var_wtype:nullable MType(MType)> */
-var91 = var_wtype == var_other;
-var89 = var91;
-goto RET_LABEL90;
-RET_LABEL90:(void)0;
+var15 = ((short int(*)(val* self, val* p0))(var_variable->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_variable, var_other); /* == on <var_variable:nullable Variable(Variable)>*/
 }
+var16 = !var15;
+var13 = var16;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
-var87 = var89;
-goto RET_LABEL88;
-RET_LABEL88:(void)0;
+var12 = var13;
 }
-var86 = var87;
+if (var12){
+{
+{ /* Inline flow#AExpr#after_flow_context (self) on <self:AIsaExpr> */
+var19 = self->attrs[COLOR_nit__flow__AExpr___after_flow_context].val; /* _after_flow_context on <self:AIsaExpr> */
+var17 = var19;
+RET_LABEL18:(void)0;
 }
-if (var86){
-goto RET_LABEL;
-} else {
 }
-{
-var92 = standard__array___Collection___to_a(var_args);
+if (var17 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1536);
+fatal_exit(1);
+} else {
+{ /* Inline flow#FlowContext#when_true (var17) on <var17:nullable FlowContext> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__flow, 225);
+fatal_exit(1);
 }
-var_args = var92;
-{
-{ /* Inline parser_nodes#AReassignFormExpr#n_value (self) on <self:ASendReassignFormExpr> */
-var95 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:ASendReassignFormExpr> */
-if (unlikely(var95 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1783);
-show_backtrace(1);
+var22 = var17->attrs[COLOR_nit__flow__FlowContext___when_true].val; /* _when_true on <var17:nullable FlowContext> */
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _when_true");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__flow, 225);
+fatal_exit(1);
 }
-var93 = var95;
-RET_LABEL94:(void)0;
+var20 = var22;
+RET_LABEL21:(void)0;
 }
 }
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_args, var93); /* Direct call array#Array#add on <var_args:Array[AExpr]>*/
+nit__typing___FlowContext___set_var(var20, var_v, var_variable, var_mtype); /* Direct call typing#FlowContext#set_var on <var20:FlowContext>*/
+}
+} else {
 }
 {
-var96 = nit___nit__CallSite___check_signature(var_wcallsite, var_v, var_args);
+var23 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
 }
-var97 = 1;
 {
-{ /* Inline typing#AExpr#is_typed= (self,var97) on <self:ASendReassignFormExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var97; /* _is_typed on <self:ASendReassignFormExpr> */
-RET_LABEL98:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var23) on <self:AIsaExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var23; /* _mtype on <self:AIsaExpr> */
+RET_LABEL24:(void)0;
 }
 }
 RET_LABEL:;
 }
-/* method typing#ACallReassignExpr#property_name for (self: ACallReassignExpr): String */
-val* nit__typing___ACallReassignExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-val* var1 /* : TId */;
-val* var3 /* : TId */;
-val* var4 /* : String */;
+/* method typing#AAsCastExpr#accept_typing for (self: AAsCastExpr, TypeVisitor) */
+void nit__typing___AAsCastExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : AType */;
+val* var5 /* : AType */;
+val* var6 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallReassignExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallReassignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1999);
-show_backtrace(1);
-}
-var1 = var3;
-RET_LABEL2:(void)0;
-}
+{ /* Inline parser_nodes#AAsCastForm#n_expr (self) on <self:AAsCastExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AAsCastForm___n_expr].val; /* _n_expr on <self:AAsCastExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2648);
+fatal_exit(1);
 }
-{
-var4 = nit__lexer_work___Token___text(var1);
+var = var2;
+RET_LABEL1:(void)0;
 }
-var = var4;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
 }
-/* method typing#ACallReassignExpr#compute_raw_arguments for (self: ACallReassignExpr): Array[AExpr] */
-val* nit__typing___ACallReassignExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
 {
-{ /* Inline parser_nodes#ACallFormExpr#n_args (self) on <self:ACallReassignExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallReassignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2002);
-show_backtrace(1);
+{ /* Inline parser_nodes#AAsCastExpr#n_type (self) on <self:AAsCastExpr> */
+var5 = self->attrs[COLOR_nit__parser_nodes__AAsCastExpr___n_type].val; /* _n_type on <self:AAsCastExpr> */
+if (unlikely(var5 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2665);
+fatal_exit(1);
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var3 = var5;
+RET_LABEL4:(void)0;
 }
 }
 {
-var4 = nit__typing___AExprs___to_a(var1);
+var6 = nit__typing___nit__typing__TypeVisitor___visit_expr_cast(var_v, self, var, var3);
 }
-var = var4;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+{
+{ /* Inline typing#AExpr#mtype= (self,var6) on <self:AAsCastExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var6; /* _mtype on <self:AAsCastExpr> */
+RET_LABEL7:(void)0;
 }
-/* method typing#ABraReassignExpr#property_name for (self: ABraReassignExpr): String */
-val* nit__typing___ABraReassignExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
-} else {
-var2 = "[]";
-var3 = 2;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
 }
-var = var1;
-goto RET_LABEL;
 RET_LABEL:;
-return var;
 }
-/* method typing#ABraReassignExpr#compute_raw_arguments for (self: ABraReassignExpr): Array[AExpr] */
-val* nit__typing___ABraReassignExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
+/* method typing#AAsNotnullExpr#accept_typing for (self: AAsNotnullExpr, TypeVisitor) */
+void nit__typing___AAsNotnullExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var_mtype /* var mtype: nullable MType */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+short int var10 /* : Bool */;
+int cltype;
+int idtype;
+static val* varonce;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+val* var13 /* : FlatString */;
+val* var14 /* : AExpr */;
+val* var16 /* : AExpr */;
+short int var17 /* : Bool */;
+val* var18 /* : MType */;
+var_v = p0;
 {
-{ /* Inline parser_nodes#ABraFormExpr#n_args (self) on <self:ABraReassignExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraReassignExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2071);
-show_backtrace(1);
+{ /* Inline parser_nodes#AAsCastForm#n_expr (self) on <self:AAsNotnullExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AAsCastForm___n_expr].val; /* _n_expr on <self:AAsNotnullExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2648);
+fatal_exit(1);
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
 {
-var4 = nit__typing___AExprs___to_a(var1);
-}
-var = var4;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-/* method typing#AInitExpr#property_name for (self: AInitExpr): String */
-val* nit__typing___AInitExpr___ASendExpr__property_name(val* self) {
-val* var /* : String */;
-static val* varonce;
-val* var1 /* : String */;
-char* var2 /* : NativeString */;
-long var3 /* : Int */;
-val* var4 /* : FlatString */;
-if (varonce) {
-var1 = varonce;
+var_mtype = var3;
+if (var_mtype == NULL) {
+var4 = 1; /* is null */
 } else {
-var2 = "init";
-var3 = 4;
-var4 = standard___standard__NativeString___to_s_with_length(var2, var3);
-var1 = var4;
-varonce = var1;
-}
-var = var1;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+var4 = 0; /* arg is null but recv is not */
 }
-/* method typing#AInitExpr#compute_raw_arguments for (self: AInitExpr): Array[AExpr] */
-val* nit__typing___AInitExpr___ASendExpr__compute_raw_arguments(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : AExprs */;
-val* var3 /* : AExprs */;
-val* var4 /* : Array[AExpr] */;
+if (0) {
+{ /* Inline kernel#Object#== (var_mtype,((val*)NULL)) on <var_mtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline parser_nodes#AInitExpr#n_args (self) on <self:AInitExpr> */
-var3 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_args].val; /* _n_args on <self:AInitExpr> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2063);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
+var9 = var_mtype == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var1 = var3;
-RET_LABEL2:(void)0;
 }
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
+goto RET_LABEL;
+} else {
+}
+/* <var_mtype:nullable MType(MType)> isa MNullType */
+cltype = type_nit__MNullType.color;
+idtype = type_nit__MNullType.id;
+if(cltype >= var_mtype->type->table_size) {
+var10 = 0;
+} else {
+var10 = var_mtype->type->type_table[cltype] == idtype;
+}
+if (var10){
+if (likely(varonce!=NULL)) {
+var11 = varonce;
+} else {
+var12 = "Type Error: `as(not null)` on `null`.";
+var13 = standard___standard__NativeString___to_s_with_length(var12, 37l);
+var11 = var13;
+varonce = var11;
 }
 {
-var4 = nit__typing___AExprs___to_a(var1);
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var11); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var = var4;
 goto RET_LABEL;
-RET_LABEL:;
-return var;
+} else {
 }
-/* method typing#AExprs#to_a for (self: AExprs): Array[AExpr] */
-val* nit__typing___AExprs___to_a(val* self) {
-val* var /* : Array[AExpr] */;
-val* var1 /* : ANodes[AExpr] */;
-val* var3 /* : ANodes[AExpr] */;
-val* var4 /* : Array[nullable Object] */;
 {
-{ /* Inline parser_nodes#AExprs#n_exprs (self) on <self:AExprs> */
-var3 = self->attrs[COLOR_nit__parser_nodes__AExprs___n_exprs].val; /* _n_exprs on <self:AExprs> */
-if (unlikely(var3 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_exprs");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2408);
-show_backtrace(1);
+{ /* Inline parser_nodes#AAsCastForm#n_expr (self) on <self:AAsNotnullExpr> */
+var16 = self->attrs[COLOR_nit__parser_nodes__AAsCastForm___n_expr].val; /* _n_expr on <self:AAsNotnullExpr> */
+if (unlikely(var16 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2648);
+fatal_exit(1);
 }
-var1 = var3;
-RET_LABEL2:(void)0;
+var14 = var16;
+RET_LABEL15:(void)0;
 }
 }
 {
-var4 = standard__array___Collection___to_a(var1);
+var17 = nit__typing___nit__typing__TypeVisitor___check_can_be_null(var_v, var14, var_mtype);
 }
-var = var4;
-goto RET_LABEL;
-RET_LABEL:;
-return var;
+if (var17){
+{
+var18 = ((val*(*)(val* self))(var_mtype->class->vft[COLOR_nit__model__MType__as_notnull]))(var_mtype); /* as_notnull on <var_mtype:nullable MType(MType)>*/
 }
-/* method typing#ASuperExpr#callsite for (self: ASuperExpr): nullable CallSite */
-val* nit__typing___ASuperExpr___callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__ASuperExpr___callsite].val; /* _callsite on <self:ASuperExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+var_mtype = var18;
+} else {
 }
-/* method typing#ASuperExpr#callsite= for (self: ASuperExpr, nullable CallSite) */
-void nit__typing___ASuperExpr___callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ASuperExpr___callsite].val = p0; /* _callsite on <self:ASuperExpr> */
-RET_LABEL:;
+{
+{ /* Inline typing#AExpr#mtype= (self,var_mtype) on <self:AAsNotnullExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_mtype; /* _mtype on <self:AAsNotnullExpr> */
+RET_LABEL19:(void)0;
 }
-/* method typing#ASuperExpr#mpropdef for (self: ASuperExpr): nullable MMethodDef */
-val* nit__typing___ASuperExpr___mpropdef(val* self) {
-val* var /* : nullable MMethodDef */;
-val* var1 /* : nullable MMethodDef */;
-var1 = self->attrs[COLOR_nit__typing__ASuperExpr___mpropdef].val; /* _mpropdef on <self:ASuperExpr> */
-var = var1;
-RET_LABEL:;
-return var;
 }
-/* method typing#ASuperExpr#mpropdef= for (self: ASuperExpr, nullable MMethodDef) */
-void nit__typing___ASuperExpr___mpropdef_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ASuperExpr___mpropdef].val = p0; /* _mpropdef on <self:ASuperExpr> */
 RET_LABEL:;
 }
-/* method typing#ASuperExpr#accept_typing for (self: ASuperExpr, TypeVisitor) */
-void nit__typing___ASuperExpr___AExpr__accept_typing(val* self, val* p0) {
+/* method typing#AParExpr#accept_typing for (self: AParExpr, TypeVisitor) */
+void nit__typing___AParExpr___AExpr__accept_typing(val* self, val* p0) {
 val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MClassType */;
-val* var2 /* : nullable MClassType */;
-val* var_anchor /* var anchor: nullable MClassType */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var7 /* : Bool */;
-short int var8 /* : Bool */;
-val* var9 /* : Variable */;
-val* var11 /* : Variable */;
-val* var12 /* : nullable MType */;
-val* var_recvtype /* var recvtype: nullable MType */;
-val* var13 /* : null */;
-short int var14 /* : Bool */;
-short int var15 /* : Bool */;
-short int var17 /* : Bool */;
-short int var18 /* : Bool */;
-val* var19 /* : nullable MPropDef */;
-val* var21 /* : nullable MPropDef */;
-val* var22 /* : MProperty */;
-val* var24 /* : MProperty */;
-val* var_mproperty /* var mproperty: MProperty */;
-short int var25 /* : Bool */;
-int cltype;
-int idtype;
-short int var26 /* : Bool */;
-static val* varonce;
-val* var27 /* : String */;
-char* var28 /* : NativeString */;
-long var29 /* : Int */;
-val* var30 /* : FlatString */;
-val* var31 /* : MModule */;
-val* var33 /* : MModule */;
-val* var34 /* : Array[MPropDef] */;
-val* var_superprops /* var superprops: Array[MMethodDef] */;
-long var35 /* : Int */;
-long var37 /* : Int */;
-long var38 /* : Int */;
-short int var39 /* : Bool */;
-short int var41 /* : Bool */;
-short int var42 /* : Bool */;
-short int var43 /* : Bool */;
-short int var45 /* : Bool */;
-short int var_ /* var : Bool */;
-val* var46 /* : nullable MPropDef */;
-val* var48 /* : nullable MPropDef */;
-short int var49 /* : Bool */;
-static val* varonce50;
-val* var51 /* : String */;
-char* var52 /* : NativeString */;
-long var53 /* : Int */;
-val* var54 /* : FlatString */;
-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 */;
-val* var64 /* : nullable Object */;
-val* var_superprop /* var superprop: MMethodDef */;
-val* var65 /* : nullable MSignature */;
-val* var67 /* : nullable MSignature */;
-val* var_msignature /* var msignature: MSignature */;
-short int var68 /* : Bool */;
-val* var69 /* : MType */;
-short int var70 /* : Bool */;
-int cltype71;
-int idtype72;
-const char* var_class_name;
-val* var73 /* : AExprs */;
-val* var75 /* : AExprs */;
-val* var76 /* : Array[AExpr] */;
-val* var_args /* var args: Array[AExpr] */;
-long var77 /* : Int */;
-long var79 /* : Int */;
-long var80 /* : Int */;
-short int var81 /* : Bool */;
-short int var83 /* : Bool */;
-int cltype84;
-int idtype85;
-const char* var_class_name86;
-short int var87 /* : Bool */;
-val* var88 /* : String */;
-val* var90 /* : String */;
-short int var91 /* : Bool */;
-val* var92 /* : nullable MType */;
-val* var94 /* : nullable MType */;
-short int var96 /* : Bool */;
-val* var98 /* : nullable MPropDef */;
-val* var100 /* : nullable MPropDef */;
-short int var101 /* : Bool */;
-val* var103 /* : nullable MPropDef */;
-val* var105 /* : nullable MPropDef */;
-short int var106 /* : Bool */;
-int cltype107;
-int idtype108;
-const char* var_class_name109;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
 var_v = p0;
 {
-{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
-var2 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
+{ /* Inline parser_nodes#AParExpr#n_expr (self) on <self:AParExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AParExpr___n_expr].val; /* _n_expr on <self:AParExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2637);
+fatal_exit(1);
+}
 var = var2;
 RET_LABEL1:(void)0;
 }
 }
-var_anchor = var;
-var3 = NULL;
-if (var_anchor == NULL) {
-var4 = 0; /* is null */
-} else {
-var4 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_anchor,var3) on <var_anchor:nullable MClassType> */
-var_other = var3;
 {
-var7 = ((short int (*)(val* self, val* p0))(var_anchor->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_anchor, var_other) /* == on <var_anchor:nullable MClassType(MClassType)>*/;
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-var8 = !var7;
-var5 = var8;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
+{
+{ /* Inline typing#AExpr#mtype= (self,var3) on <self:AParExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var3; /* _mtype on <self:AParExpr> */
+RET_LABEL4:(void)0;
 }
-var4 = var5;
 }
-if (unlikely(!var4)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1622);
-show_backtrace(1);
+RET_LABEL:;
 }
+/* method typing#AOnceExpr#accept_typing for (self: AOnceExpr, TypeVisitor) */
+void nit__typing___AOnceExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline typing#TypeVisitor#selfvariable (var_v) on <var_v:TypeVisitor> */
-var11 = var_v->attrs[COLOR_nit__typing__TypeVisitor___selfvariable].val; /* _selfvariable on <var_v:TypeVisitor> */
-if (unlikely(var11 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _selfvariable");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 50);
-show_backtrace(1);
+{ /* Inline parser_nodes#AOnceExpr#n_expr (self) on <self:AOnceExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__AOnceExpr___n_expr].val; /* _n_expr on <self:AOnceExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2017);
+fatal_exit(1);
 }
-var9 = var11;
-RET_LABEL10:(void)0;
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
 {
-var12 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var9);
-}
-var_recvtype = var12;
-var13 = NULL;
-if (var_recvtype == NULL) {
-var14 = 0; /* is null */
-} else {
-var14 = 1; /* arg is null and recv is not */
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_recvtype,var13) on <var_recvtype:nullable MType> */
-var_other = var13;
 {
-var17 = ((short int (*)(val* self, val* p0))(var_recvtype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_recvtype, var_other) /* == on <var_recvtype:nullable MType(MType)>*/;
+{ /* Inline typing#AExpr#mtype= (self,var3) on <self:AOnceExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var3; /* _mtype on <self:AOnceExpr> */
+RET_LABEL4:(void)0;
 }
-var18 = !var17;
-var15 = var18;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
 }
-var14 = var15;
+RET_LABEL:;
 }
-if (unlikely(!var14)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1624);
-show_backtrace(1);
+/* method typing#ASelfExpr#its_variable for (self: ASelfExpr): nullable Variable */
+val* nit__typing___ASelfExpr___AExpr__its_variable(val* self) {
+val* var /* : nullable Variable */;
+val* var1 /* : nullable Variable */;
+var1 = self->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val; /* _its_variable on <self:ASelfExpr> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method typing#ASelfExpr#its_variable= for (self: ASelfExpr, nullable Variable) */
+void nit__typing___ASelfExpr___its_variable_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val = p0; /* _its_variable on <self:ASelfExpr> */
+RET_LABEL:;
 }
+/* method typing#ASelfExpr#accept_typing for (self: ASelfExpr, TypeVisitor) */
+void nit__typing___ASelfExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+short int var3 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var4 /* : Bool */;
+int cltype;
+int idtype;
+short int var5 /* : Bool */;
+static val* varonce;
+val* var6 /* : String */;
+char* var7 /* : NativeString */;
+val* var8 /* : FlatString */;
+val* var9 /* : Variable */;
+val* var11 /* : Variable */;
+val* var_variable /* var variable: Variable */;
+val* var13 /* : nullable MType */;
+var_v = p0;
 {
-{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
-var21 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
-var19 = var21;
-RET_LABEL20:(void)0;
+{ /* Inline typing#TypeVisitor#is_toplevel_context (var_v) on <var_v:TypeVisitor> */
+var3 = var_v->attrs[COLOR_nit__typing__TypeVisitor___is_toplevel_context].s; /* _is_toplevel_context on <var_v:TypeVisitor> */
+var1 = var3;
+RET_LABEL2:(void)0;
 }
 }
-if (var19 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1625);
-show_backtrace(1);
+var_ = var1;
+if (var1){
+/* <self:ASelfExpr> isa AImplicitSelfExpr */
+cltype = type_nit__AImplicitSelfExpr.color;
+idtype = type_nit__AImplicitSelfExpr.id;
+if(cltype >= self->type->table_size) {
+var4 = 0;
 } else {
-{ /* Inline model#MPropDef#mproperty (var19) on <var19:nullable MPropDef> */
-if (unlikely(var19 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
-}
-var24 = var19->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var19:nullable MPropDef> */
-if (unlikely(var24 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
-}
-var22 = var24;
-RET_LABEL23:(void)0;
-}
+var4 = self->type->type_table[cltype] == idtype;
 }
-var_mproperty = var22;
-/* <var_mproperty:MProperty> isa MMethod */
-cltype = type_nit__MMethod.color;
-idtype = type_nit__MMethod.id;
-if(cltype >= var_mproperty->type->table_size) {
-var25 = 0;
+var5 = !var4;
+var = var5;
 } else {
-var25 = var_mproperty->type->type_table[cltype] == idtype;
+var = var_;
 }
-var26 = !var25;
-if (var26){
-if (varonce) {
-var27 = varonce;
+if (var){
+if (likely(varonce!=NULL)) {
+var6 = varonce;
 } else {
-var28 = "Error: super only usable in a method";
-var29 = 36;
-var30 = standard___standard__NativeString___to_s_with_length(var28, var29);
-var27 = var30;
-varonce = var27;
+var7 = "Error: `self` cannot be used in top-level method.";
+var8 = standard___standard__NativeString___to_s_with_length(var7, 49l);
+var6 = var8;
+varonce = var6;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var27); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var6); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var33 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var33 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
-}
-var31 = var33;
-RET_LABEL32:(void)0;
+{ /* Inline typing#TypeVisitor#selfvariable (var_v) on <var_v:TypeVisitor> */
+var11 = var_v->attrs[COLOR_nit__typing__TypeVisitor___selfvariable].val; /* _selfvariable on <var_v:TypeVisitor> */
+if (unlikely(var11 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _selfvariable");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 50);
+fatal_exit(1);
 }
+var9 = var11;
+RET_LABEL10:(void)0;
 }
-{
-var34 = nit___nit__MProperty___lookup_super_definitions(var_mproperty, var31, var_anchor);
 }
-var_superprops = var34;
+var_variable = var9;
 {
-{ /* Inline array#AbstractArrayRead#length (var_superprops) on <var_superprops:Array[MMethodDef]> */
-var37 = var_superprops->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_superprops:Array[MMethodDef]> */
-var35 = var37;
-RET_LABEL36:(void)0;
+{ /* Inline typing#ASelfExpr#its_variable= (self,var_variable) on <self:ASelfExpr> */
+self->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val = var_variable; /* _its_variable on <self:ASelfExpr> */
+RET_LABEL12:(void)0;
 }
 }
-var38 = 0;
 {
-{ /* Inline kernel#Int#== (var35,var38) on <var35:Int> */
-var41 = var35 == var38;
-var39 = var41;
-goto RET_LABEL40;
-RET_LABEL40:(void)0;
-}
+var13 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var_variable);
 }
-if (var39){
 {
-{ /* Inline model#MMethod#is_init (var_mproperty) on <var_mproperty:MProperty(MMethod)> */
-var45 = var_mproperty->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_mproperty:MProperty(MMethod)> */
-var43 = var45;
-RET_LABEL44:(void)0;
+{ /* Inline typing#AExpr#mtype= (self,var13) on <self:ASelfExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var13; /* _mtype on <self:ASelfExpr> */
+RET_LABEL14:(void)0;
 }
 }
-var_ = var43;
-if (var43){
-{
-{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
-var48 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
-var46 = var48;
-RET_LABEL47:(void)0;
+RET_LABEL:;
 }
+/* method typing#AImplicitSelfExpr#is_sys for (self: AImplicitSelfExpr): Bool */
+short int nit__typing___AImplicitSelfExpr___is_sys(val* self) {
+short int var /* : Bool */;
+short int var1 /* : Bool */;
+var1 = self->attrs[COLOR_nit__typing__AImplicitSelfExpr___is_sys].s; /* _is_sys on <self:AImplicitSelfExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-if (var46 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1632);
-show_backtrace(1);
-} else {
-var49 = nit___nit__MPropDef___is_intro(var46);
+/* method typing#AImplicitSelfExpr#is_sys= for (self: AImplicitSelfExpr, Bool) */
+void nit__typing___AImplicitSelfExpr___is_sys_61d(val* self, short int p0) {
+self->attrs[COLOR_nit__typing__AImplicitSelfExpr___is_sys].s = p0; /* _is_sys on <self:AImplicitSelfExpr> */
+RET_LABEL:;
 }
-var42 = var49;
-} else {
-var42 = var_;
+/* method typing#ASendExpr#callsite for (self: ASendExpr): nullable CallSite */
+val* nit__typing___ASendExpr___callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__ASendExpr___callsite].val; /* _callsite on <self:ASendExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-if (var42){
-{
-nit__typing___ASuperExpr___process_superinit(self, var_v); /* Direct call typing#ASuperExpr#process_superinit on <self:ASuperExpr>*/
+/* method typing#ASendExpr#callsite= for (self: ASendExpr, nullable CallSite) */
+void nit__typing___ASendExpr___callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ASendExpr___callsite].val = p0; /* _callsite on <self:ASendExpr> */
+RET_LABEL:;
 }
-goto RET_LABEL;
-} else {
+/* method typing#ASendExpr#accept_typing for (self: ASendExpr, TypeVisitor) */
+void nit__typing___ASendExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var_nrecv /* var nrecv: AExpr */;
+val* var3 /* : nullable MType */;
+val* var_recvtype /* var recvtype: nullable MType */;
+val* var4 /* : String */;
+val* var_name /* var name: String */;
+val* var5 /* : ANode */;
+val* var_node /* var node: ANode */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var9 /* : Bool */;
+short int var11 /* : Bool */;
+val* var_callsite /* var callsite: nullable Object */;
+val* var12 /* : MType */;
+val* var_unsafe_type /* var unsafe_type: MType */;
+val* var13 /* : nullable MProperty */;
+val* var_mproperty /* var mproperty: nullable MProperty */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var_ /* var : Bool */;
+short int var21 /* : Bool */;
+int cltype;
+int idtype;
+static val* varonce;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+val* var24 /* : FlatString */;
+val* var25 /* : nullable MClass */;
+val* var_sysclass /* var sysclass: nullable MClass */;
+short int var26 /* : Bool */;
+short int var27 /* : Bool */;
+val* var_other29 /* var other: nullable Object */;
+short int var30 /* : Bool */;
+short int var31 /* : Bool */;
+val* var32 /* : MClassType */;
+val* var34 /* : MClassType */;
+val* var_systype /* var systype: MClassType */;
+val* var35 /* : nullable MProperty */;
+short int var36 /* : Bool */;
+short int var37 /* : Bool */;
+short int var39 /* : Bool */;
+short int var40 /* : Bool */;
+val* var41 /* : nullable CallSite */;
+short int var42 /* : Bool */;
+short int var43 /* : Bool */;
+short int var45 /* : Bool */;
+short int var47 /* : Bool */;
+short int var51 /* : Bool */;
+short int var52 /* : Bool */;
+short int var54 /* : Bool */;
+short int var56 /* : Bool */;
+short int var57 /* : Bool */;
+int cltype58;
+int idtype59;
+val* var60 /* : nullable CallSite */;
+short int var61 /* : Bool */;
+short int var62 /* : Bool */;
+short int var64 /* : Bool */;
+short int var66 /* : Bool */;
+val* var68 /* : MSignature */;
+val* var70 /* : MSignature */;
+val* var_msignature /* var msignature: MSignature */;
+val* var71 /* : Array[AExpr] */;
+val* var_args /* var args: Array[AExpr] */;
+short int var72 /* : Bool */;
+val* var73 /* : MMethod */;
+val* var75 /* : MMethod */;
+short int var76 /* : Bool */;
+short int var78 /* : Bool */;
+val* var79 /* : nullable MPropDef */;
+val* var81 /* : nullable MPropDef */;
+val* var_vmpropdef /* var vmpropdef: nullable MPropDef */;
+short int var82 /* : Bool */;
+short int var83 /* : Bool */;
+int cltype84;
+int idtype85;
+short int var_86 /* var : Bool */;
+val* var87 /* : MProperty */;
+val* var89 /* : MProperty */;
+short int var90 /* : Bool */;
+short int var92 /* : Bool */;
+short int var93 /* : Bool */;
+static val* varonce94;
+val* var95 /* : String */;
+char* var96 /* : NativeString */;
+val* var97 /* : FlatString */;
+short int var98 /* : Bool */;
+short int var99 /* : Bool */;
+short int var100 /* : Bool */;
+int cltype101;
+int idtype102;
+short int var_103 /* var : Bool */;
+val* var104 /* : MProperty */;
+val* var106 /* : MProperty */;
+short int var107 /* : Bool */;
+short int var109 /* : Bool */;
+short int var_110 /* var : Bool */;
+val* var111 /* : MMethod */;
+val* var113 /* : MMethod */;
+short int var114 /* : Bool */;
+short int var116 /* : Bool */;
+short int var117 /* : Bool */;
+val* var119 /* : NativeArray[String] */;
+static val* varonce118;
+static val* varonce120;
+val* var121 /* : String */;
+char* var122 /* : NativeString */;
+val* var123 /* : FlatString */;
+static val* varonce124;
+val* var125 /* : String */;
+char* var126 /* : NativeString */;
+val* var127 /* : FlatString */;
+static val* varonce128;
+val* var129 /* : String */;
+char* var130 /* : NativeString */;
+val* var131 /* : FlatString */;
+val* var132 /* : String */;
+val* var133 /* : MMethod */;
+val* var135 /* : MMethod */;
+val* var136 /* : String */;
+val* var137 /* : String */;
+val* var138 /* : nullable MType */;
+val* var140 /* : nullable MType */;
+val* var_ret /* var ret: nullable MType */;
+short int var141 /* : Bool */;
+short int var142 /* : Bool */;
+short int var144 /* : Bool */;
+short int var145 /* : Bool */;
+var_v = p0;
+{
+{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2025);
+fatal_exit(1);
 }
-if (varonce50) {
-var51 = varonce50;
-} else {
-var52 = "Error: No super method to call for ";
-var53 = 35;
-var54 = standard___standard__NativeString___to_s_with_length(var52, var53);
-var51 = var54;
-varonce50 = var51;
+var = var2;
+RET_LABEL1:(void)0;
 }
-if (varonce55) {
-var56 = varonce55;
-} else {
-var57 = ".";
-var58 = 1;
-var59 = standard___standard__NativeString___to_s_with_length(var57, var58);
-var56 = var59;
-varonce55 = var56;
 }
-var60 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var60 = array_instance Array[Object] */
-var61 = 3;
-var62 = NEW_standard__NativeArray(var61, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var62)->values[0] = (val*) var51;
-((struct instance_standard__NativeArray*)var62)->values[1] = (val*) var_mproperty;
-((struct instance_standard__NativeArray*)var62)->values[2] = (val*) var56;
+var_nrecv = var;
 {
-((void (*)(val* self, val* p0, long p1))(var60->class->vft[COLOR_standard__array__Array__with_native]))(var60, var62, var61) /* with_native on <var60:Array[Object]>*/;
-}
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var_nrecv);
 }
+var_recvtype = var3;
 {
-var63 = ((val* (*)(val* self))(var60->class->vft[COLOR_standard__string__Object__to_s]))(var60) /* to_s on <var60:Array[Object]>*/;
+var4 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__property_name]))(self); /* property_name on <self:ASendExpr>*/
 }
+var_name = var4;
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var63); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var5 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__property_node]))(self); /* property_node on <self:ASendExpr>*/
 }
-goto RET_LABEL;
+var_node = var5;
+if (var_recvtype == NULL) {
+var6 = 1; /* is null */
 } else {
+var6 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_recvtype,((val*)NULL)) on <var_recvtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-var64 = standard___standard__SequenceRead___Collection__first(var_superprops);
-}
-var_superprop = var64;
-{
-{ /* Inline model#MMethodDef#msignature (var_superprop) on <var_superprop:MMethodDef> */
-var67 = var_superprop->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_superprop:MMethodDef> */
-var65 = var67;
-RET_LABEL66:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_recvtype,var_other) on <var_recvtype:nullable MType(MType)> */
+var11 = var_recvtype == var_other;
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
 }
 }
-if (unlikely(var65 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1642);
-show_backtrace(1);
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var_msignature = var65;
-var68 = 1;
-{
-var69 = nit__typing___nit__typing__TypeVisitor___resolve_for(var_v, var_msignature, var_recvtype, var68);
+var6 = var7;
 }
-/* <var69:MType> isa MSignature */
-cltype71 = type_nit__MSignature.color;
-idtype72 = type_nit__MSignature.id;
-if(cltype71 >= var69->type->table_size) {
-var70 = 0;
+if (var6){
+goto RET_LABEL;
 } else {
-var70 = var69->type->type_table[cltype71] == idtype72;
-}
-if (unlikely(!var70)) {
-var_class_name = var69 == NULL ? "null" : var69->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MSignature", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1643);
-show_backtrace(1);
 }
-var_msignature = var69;
+var_callsite = ((val*)NULL);
 {
-{ /* Inline parser_nodes#ASuperExpr#n_args (self) on <self:ASuperExpr> */
-var75 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val; /* _n_args on <self:ASuperExpr> */
-if (unlikely(var75 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2051);
-show_backtrace(1);
-}
-var73 = var75;
-RET_LABEL74:(void)0;
-}
+var12 = nit__typing___nit__typing__TypeVisitor___anchor_to(var_v, var_recvtype);
 }
+var_unsafe_type = var12;
 {
-var76 = nit__typing___AExprs___to_a(var73);
+var13 = nit__typing___nit__typing__TypeVisitor___try_get_mproperty_by_name2(var_v, var_node, var_unsafe_type, var_name);
 }
-var_args = var76;
-{
-{ /* Inline array#AbstractArrayRead#length (var_args) on <var_args:Array[AExpr]> */
-var79 = var_args->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_args:Array[AExpr]> */
-var77 = var79;
-RET_LABEL78:(void)0;
+var_mproperty = var13;
+if (var_mproperty == NULL) {
+var15 = 1; /* is null */
+} else {
+var15 = 0; /* arg is null but recv is not */
 }
-}
-var80 = 0;
+if (0) {
+{ /* Inline kernel#Object#== (var_mproperty,((val*)NULL)) on <var_mproperty:nullable MProperty> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Int#> (var77,var80) on <var77:Int> */
-/* Covariant cast for argument 0 (i) <var80:Int> isa OTHER */
-/* <var80:Int> isa OTHER */
-var83 = 1; /* easy <var80:Int> isa OTHER*/
-if (unlikely(!var83)) {
-var_class_name86 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name86);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 412);
-show_backtrace(1);
-}
-var87 = var77 > var80;
-var81 = var87;
-goto RET_LABEL82;
-RET_LABEL82:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_mproperty,var_other) on <var_mproperty:nullable MProperty(MProperty)> */
+var20 = var_mproperty == var_other;
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
 }
-if (var81){
-{
-{ /* Inline model#MProperty#name (var_mproperty) on <var_mproperty:MProperty(MMethod)> */
-var90 = var_mproperty->attrs[COLOR_nit__model__MProperty___name].val; /* _name on <var_mproperty:MProperty(MMethod)> */
-if (unlikely(var90 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1741);
-show_backtrace(1);
+var16 = var18;
+goto RET_LABEL17;
+RET_LABEL17:(void)0;
 }
-var88 = var90;
-RET_LABEL89:(void)0;
+var15 = var16;
+}
+var_ = var15;
+if (var15){
+/* <var_nrecv:AExpr> isa AImplicitSelfExpr */
+cltype = type_nit__AImplicitSelfExpr.color;
+idtype = type_nit__AImplicitSelfExpr.id;
+if(cltype >= var_nrecv->type->table_size) {
+var21 = 0;
+} else {
+var21 = var_nrecv->type->type_table[cltype] == idtype;
 }
+var14 = var21;
+} else {
+var14 = var_;
+}
+if (var14){
+if (likely(varonce!=NULL)) {
+var22 = varonce;
+} else {
+var23 = "Sys";
+var24 = standard___standard__NativeString___to_s_with_length(var23, 3l);
+var22 = var24;
+varonce = var22;
 }
 {
-var91 = nit__typing___nit__typing__TypeVisitor___check_signature(var_v, self, var_args, var88, var_msignature);
+var25 = nit__typing___nit__typing__TypeVisitor___try_get_mclass(var_v, var_node, var22);
 }
+var_sysclass = var25;
+if (var_sysclass == NULL) {
+var26 = 0; /* is null */
 } else {
+var26 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_sysclass,((val*)NULL)) on <var_sysclass:nullable MClass> */
+var_other29 = ((val*)NULL);
 {
-{ /* Inline model#MSignature#return_mtype (var_msignature) on <var_msignature:MSignature> */
-var94 = var_msignature->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var_msignature:MSignature> */
-var92 = var94;
-RET_LABEL93:(void)0;
+var30 = ((short int(*)(val* self, val* p0))(var_sysclass->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_sysclass, var_other29); /* == on <var_sysclass:nullable MClass(MClass)>*/
+}
+var31 = !var30;
+var27 = var31;
+goto RET_LABEL28;
+RET_LABEL28:(void)0;
 }
+var26 = var27;
 }
+if (var26){
 {
-{ /* Inline typing#AExpr#mtype= (self,var92) on <self:ASuperExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var92; /* _mtype on <self:ASuperExpr> */
-RET_LABEL95:(void)0;
+{ /* Inline model#MClass#mclass_type (var_sysclass) on <var_sysclass:nullable MClass(MClass)> */
+var34 = var_sysclass->attrs[COLOR_nit__model__MClass___mclass_type].val; /* _mclass_type on <var_sysclass:nullable MClass(MClass)> */
+if (unlikely(var34 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass_type");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 484);
+fatal_exit(1);
+}
+var32 = var34;
+RET_LABEL33:(void)0;
 }
 }
-var96 = 1;
+var_systype = var32;
 {
-{ /* Inline typing#AExpr#is_typed= (self,var96) on <self:ASuperExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var96; /* _is_typed on <self:ASuperExpr> */
-RET_LABEL97:(void)0;
+var35 = nit__typing___nit__typing__TypeVisitor___try_get_mproperty_by_name2(var_v, var_node, var_systype, var_name);
 }
+var_mproperty = var35;
+if (var_mproperty == NULL) {
+var36 = 0; /* is null */
+} else {
+var36 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_mproperty,((val*)NULL)) on <var_mproperty:nullable MProperty> */
+var_other29 = ((val*)NULL);
 {
-{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
-var100 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
-var98 = var100;
-RET_LABEL99:(void)0;
+var39 = ((short int(*)(val* self, val* p0))(var_mproperty->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_mproperty, var_other29); /* == on <var_mproperty:nullable MProperty(MProperty)>*/
 }
+var40 = !var39;
+var37 = var40;
+goto RET_LABEL38;
+RET_LABEL38:(void)0;
 }
-var101 = 1;
-if (var98 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1650);
-show_backtrace(1);
-} else {
-{ /* Inline modelize_property#MPropDef#has_supercall= (var98,var101) on <var98:nullable MPropDef> */
-if (unlikely(var98 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelize_property, 329);
-show_backtrace(1);
+var36 = var37;
 }
-var98->attrs[COLOR_nit__modelize_property__MPropDef___has_supercall].s = var101; /* _has_supercall on <var98:nullable MPropDef> */
-RET_LABEL102:(void)0;
+if (var36){
+{
+var41 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, var_node, var_systype, var_name, 0);
 }
+var_callsite = var41;
+if (var_callsite == NULL) {
+var42 = 1; /* is null */
+} else {
+var42 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_callsite,((val*)NULL)) on <var_callsite:nullable Object(nullable CallSite)> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
-var105 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
-var103 = var105;
-RET_LABEL104:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
+var47 = var_callsite == var_other;
+var45 = var47;
+goto RET_LABEL46;
+RET_LABEL46:(void)0;
 }
 }
-/* <var103:nullable MPropDef> isa MMethodDef */
-cltype107 = type_nit__MMethodDef.color;
-idtype108 = type_nit__MMethodDef.id;
-if(var103 == NULL) {
-var106 = 0;
-} else {
-if(cltype107 >= var103->type->table_size) {
-var106 = 0;
-} else {
-var106 = var103->type->type_table[cltype107] == idtype108;
+var43 = var45;
+goto RET_LABEL44;
+RET_LABEL44:(void)0;
 }
+var42 = var43;
 }
-if (unlikely(!var106)) {
-var_class_name109 = var103 == NULL ? "null" : var103->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MMethodDef", var_class_name109);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1651);
-show_backtrace(1);
+if (var42){
+goto RET_LABEL;
+} else {
 }
 {
-{ /* Inline typing#ASuperExpr#mpropdef= (self,var103) on <self:ASuperExpr> */
-self->attrs[COLOR_nit__typing__ASuperExpr___mpropdef].val = var103; /* _mpropdef on <self:ASuperExpr> */
-RET_LABEL110:(void)0;
+{ /* Inline typing#AImplicitSelfExpr#is_sys= (var_nrecv,1) on <var_nrecv:AExpr(AImplicitSelfExpr)> */
+var_nrecv->attrs[COLOR_nit__typing__AImplicitSelfExpr___is_sys].s = 1; /* _is_sys on <var_nrecv:AExpr(AImplicitSelfExpr)> */
+RET_LABEL48:(void)0;
 }
 }
-RET_LABEL:;
+{
+{ /* Inline typing#ASelfExpr#its_variable= (var_nrecv,((val*)NULL)) on <var_nrecv:AExpr(AImplicitSelfExpr)> */
+var_nrecv->attrs[COLOR_nit__typing__ASelfExpr___its_variable].val = ((val*)NULL); /* _its_variable on <var_nrecv:AExpr(AImplicitSelfExpr)> */
+RET_LABEL49:(void)0;
+}
 }
-/* method typing#ASuperExpr#process_superinit for (self: ASuperExpr, TypeVisitor) */
-void nit__typing___ASuperExpr___process_superinit(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MClassType */;
-val* var2 /* : nullable MClassType */;
-val* var_anchor /* var anchor: nullable MClassType */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var7 /* : Bool */;
-short int var8 /* : Bool */;
-val* var9 /* : Variable */;
-val* var11 /* : Variable */;
-val* var12 /* : nullable MType */;
-val* var_recvtype /* var recvtype: nullable MType */;
-val* var13 /* : null */;
-short int var14 /* : Bool */;
-short int var15 /* : Bool */;
-short int var17 /* : Bool */;
-short int var18 /* : Bool */;
-val* var19 /* : nullable MPropDef */;
-val* var21 /* : nullable MPropDef */;
-val* var_mpropdef /* var mpropdef: nullable MPropDef */;
-short int var22 /* : Bool */;
-int cltype;
-int idtype;
-val* var23 /* : MProperty */;
-val* var25 /* : MProperty */;
-val* var_mproperty /* var mproperty: MMethod */;
-val* var26 /* : null */;
-val* var_superprop /* var superprop: nullable MMethodDef */;
-val* var27 /* : MClassDef */;
-val* var29 /* : MClassDef */;
-val* var30 /* : Array[MClassType] */;
-val* var32 /* : Array[MClassType] */;
-val* var_ /* var : Array[MClassType] */;
-val* var33 /* : ArrayIterator[nullable Object] */;
-val* var_34 /* var : ArrayIterator[MClassType] */;
-short int var35 /* : Bool */;
-val* var36 /* : nullable Object */;
-val* var_msupertype /* var msupertype: MClassType */;
-val* var37 /* : MModule */;
-val* var39 /* : MModule */;
-val* var40 /* : MClassType */;
-val* var41 /* : ModelBuilder */;
-val* var43 /* : ModelBuilder */;
-val* var44 /* : ToolContext */;
-val* var46 /* : ToolContext */;
-long var47 /* : Int */;
-long var49 /* : Int */;
-long var_errcount /* var errcount: Int */;
-val* var50 /* : String */;
-val* var52 /* : String */;
-val* var53 /* : nullable MProperty */;
-short int var54 /* : Bool */;
-int cltype55;
-int idtype56;
-const char* var_class_name;
-val* var_candidate /* var candidate: nullable MMethod */;
-val* var57 /* : null */;
-short int var58 /* : Bool */;
-short int var59 /* : Bool */;
-val* var_other61 /* var other: nullable Object */;
-short int var62 /* : Bool */;
-short int var64 /* : Bool */;
-val* var65 /* : ModelBuilder */;
-val* var67 /* : ModelBuilder */;
-val* var68 /* : ToolContext */;
-val* var70 /* : ToolContext */;
-long var71 /* : Int */;
-long var73 /* : Int */;
-short int var74 /* : Bool */;
-short int var76 /* : Bool */;
-int cltype77;
-int idtype78;
-const char* var_class_name79;
-short int var80 /* : Bool */;
-short int var81 /* : Bool */;
-val* var82 /* : null */;
-short int var83 /* : Bool */;
-short int var84 /* : Bool */;
-short int var86 /* : Bool */;
-short int var87 /* : Bool */;
-short int var_88 /* var : Bool */;
-short int var89 /* : Bool */;
-short int var91 /* : Bool */;
-short int var92 /* : Bool */;
-short int var93 /* : Bool */;
-val* var94 /* : null */;
-short int var95 /* : Bool */;
-short int var96 /* : Bool */;
-short int var98 /* : Bool */;
-short int var99 /* : Bool */;
-short int var_100 /* var : Bool */;
-val* var101 /* : MProperty */;
-val* var103 /* : MProperty */;
-short int var104 /* : Bool */;
-short int var106 /* : Bool */;
-short int var107 /* : Bool */;
-short int var_108 /* var : Bool */;
-val* var109 /* : MProperty */;
-val* var111 /* : MProperty */;
-short int var112 /* : Bool */;
-short int var114 /* : Bool */;
-short int var115 /* : Bool */;
-static val* varonce;
-val* var116 /* : String */;
-char* var117 /* : NativeString */;
-long var118 /* : Int */;
-val* var119 /* : FlatString */;
-static val* varonce120;
-val* var121 /* : String */;
-char* var122 /* : NativeString */;
-long var123 /* : Int */;
-val* var124 /* : FlatString */;
-val* var125 /* : String */;
-static val* varonce126;
-val* var127 /* : String */;
-char* var128 /* : NativeString */;
-long var129 /* : Int */;
-val* var130 /* : FlatString */;
-val* var131 /* : MProperty */;
-val* var133 /* : MProperty */;
-val* var134 /* : String */;
-val* var135 /* : Array[Object] */;
-long var136 /* : Int */;
-val* var137 /* : NativeArray[Object] */;
-val* var138 /* : String */;
-val* var139 /* : MModule */;
-val* var141 /* : MModule */;
-val* var142 /* : Array[MPropDef] */;
-val* var_candidatedefs /* var candidatedefs: Array[MMethodDef] */;
-short int var143 /* : Bool */;
-val* var144 /* : null */;
-short int var145 /* : Bool */;
-short int var146 /* : Bool */;
-short int var148 /* : Bool */;
-short int var149 /* : Bool */;
-short int var_150 /* var : Bool */;
-val* var151 /* : MProperty */;
-val* var153 /* : MProperty */;
-short int var154 /* : Bool */;
-short int var156 /* : Bool */;
-short int var158 /* : Bool */;
-val* var159 /* : nullable Object */;
-short int var160 /* : Bool */;
-short int var162 /* : Bool */;
-short int var164 /* : Bool */;
-long var165 /* : Int */;
-long var167 /* : Int */;
-long var168 /* : Int */;
-short int var169 /* : Bool */;
-short int var171 /* : Bool */;
-int cltype172;
-int idtype173;
-const char* var_class_name174;
-short int var175 /* : Bool */;
-static val* varonce176;
-val* var177 /* : String */;
-char* var178 /* : NativeString */;
-long var179 /* : Int */;
-val* var180 /* : FlatString */;
-static val* varonce181;
-val* var182 /* : String */;
-char* var183 /* : NativeString */;
-long var184 /* : Int */;
-val* var185 /* : FlatString */;
-static val* varonce186;
-val* var187 /* : String */;
-char* var188 /* : NativeString */;
-long var189 /* : Int */;
-val* var190 /* : FlatString */;
-static val* varonce191;
-val* var192 /* : String */;
-char* var193 /* : NativeString */;
-long var194 /* : Int */;
-val* var195 /* : FlatString */;
-val* var196 /* : String */;
-val* var197 /* : Array[Object] */;
-long var198 /* : Int */;
-val* var199 /* : NativeArray[Object] */;
-val* var200 /* : String */;
-val* var201 /* : nullable Object */;
-val* var204 /* : null */;
-short int var205 /* : Bool */;
-short int var206 /* : Bool */;
-short int var208 /* : Bool */;
-short int var210 /* : Bool */;
-static val* varonce211;
-val* var212 /* : String */;
-char* var213 /* : NativeString */;
-long var214 /* : Int */;
-val* var215 /* : FlatString */;
-static val* varonce216;
-val* var217 /* : String */;
-char* var218 /* : NativeString */;
-long var219 /* : Int */;
-val* var220 /* : FlatString */;
-val* var221 /* : Array[Object] */;
-long var222 /* : Int */;
-val* var223 /* : NativeArray[Object] */;
-val* var224 /* : String */;
-val* var225 /* : MSignature */;
-val* var226 /* : nullable MSignature */;
-val* var228 /* : nullable MSignature */;
-val* var229 /* : nullable MSignature */;
-val* var231 /* : nullable MSignature */;
-val* var_msignature /* var msignature: MSignature */;
-short int var232 /* : Bool */;
-val* var233 /* : MType */;
-short int var234 /* : Bool */;
-int cltype235;
-int idtype236;
-const char* var_class_name237;
-val* var238 /* : CallSite */;
-val* var239 /* : MModule */;
-val* var241 /* : MModule */;
-val* var242 /* : nullable MClassType */;
-val* var244 /* : nullable MClassType */;
-short int var245 /* : Bool */;
-val* var246 /* : MProperty */;
-val* var248 /* : MProperty */;
-short int var249 /* : Bool */;
-val* var_callsite /* var callsite: CallSite */;
-val* var251 /* : AExprs */;
-val* var253 /* : AExprs */;
-val* var254 /* : Array[AExpr] */;
-val* var_args /* var args: Array[AExpr] */;
-long var255 /* : Int */;
-long var257 /* : Int */;
-long var258 /* : Int */;
-short int var259 /* : Bool */;
-short int var261 /* : Bool */;
-int cltype262;
-int idtype263;
-const char* var_class_name264;
-short int var265 /* : Bool */;
-short int var266 /* : Bool */;
-val* var267 /* : nullable MSignature */;
-val* var269 /* : nullable MSignature */;
-long var270 /* : Int */;
-long var271 /* : Int */;
-short int var272 /* : Bool */;
-short int var274 /* : Bool */;
-int cltype275;
-int idtype276;
-const char* var_class_name277;
-short int var278 /* : Bool */;
-static val* varonce279;
-val* var280 /* : String */;
-char* var281 /* : NativeString */;
-long var282 /* : Int */;
-val* var283 /* : FlatString */;
-val* var284 /* : nullable MSignature */;
-val* var286 /* : nullable MSignature */;
-long var287 /* : Int */;
-static val* varonce288;
-val* var289 /* : String */;
-char* var290 /* : NativeString */;
-long var291 /* : Int */;
-val* var292 /* : FlatString */;
-long var293 /* : Int */;
-static val* varonce294;
-val* var295 /* : String */;
-char* var296 /* : NativeString */;
-long var297 /* : Int */;
-val* var298 /* : FlatString */;
-val* var299 /* : Array[Object] */;
-long var300 /* : Int */;
-val* var301 /* : NativeArray[Object] */;
-val* var302 /* : Object */;
-val* var303 /* : Object */;
-val* var304 /* : String */;
-long var305 /* : Int */;
-long var_i /* var i: Int */;
-val* var306 /* : Array[MParameter] */;
-val* var308 /* : Array[MParameter] */;
-val* var_309 /* var : Array[MParameter] */;
-val* var310 /* : ArrayIterator[nullable Object] */;
-val* var_311 /* var : ArrayIterator[MParameter] */;
-short int var312 /* : Bool */;
-val* var313 /* : nullable Object */;
-val* var_sp /* var sp: MParameter */;
-val* var314 /* : nullable MSignature */;
-val* var316 /* : nullable MSignature */;
-val* var317 /* : Array[MParameter] */;
-val* var319 /* : Array[MParameter] */;
-val* var320 /* : nullable Object */;
-val* var_p /* var p: MParameter */;
-val* var321 /* : MType */;
-val* var323 /* : MType */;
-val* var324 /* : MType */;
-val* var326 /* : MType */;
-short int var327 /* : Bool */;
-short int var328 /* : Bool */;
-static val* varonce329;
-val* var330 /* : String */;
-char* var331 /* : NativeString */;
-long var332 /* : Int */;
-val* var333 /* : FlatString */;
-static val* varonce334;
-val* var335 /* : String */;
-char* var336 /* : NativeString */;
-long var337 /* : Int */;
-val* var338 /* : FlatString */;
-val* var339 /* : MType */;
-val* var341 /* : MType */;
-static val* varonce342;
-val* var343 /* : String */;
-char* var344 /* : NativeString */;
-long var345 /* : Int */;
-val* var346 /* : FlatString */;
-val* var347 /* : String */;
-val* var349 /* : String */;
-static val* varonce350;
-val* var351 /* : String */;
-char* var352 /* : NativeString */;
-long var353 /* : Int */;
-val* var354 /* : FlatString */;
-val* var355 /* : MType */;
-val* var357 /* : MType */;
-static val* varonce358;
-val* var359 /* : String */;
-char* var360 /* : NativeString */;
-long var361 /* : Int */;
-val* var362 /* : FlatString */;
-val* var363 /* : Array[Object] */;
-long var364 /* : Int */;
-val* var365 /* : NativeArray[Object] */;
-val* var366 /* : Object */;
-val* var367 /* : String */;
-long var368 /* : Int */;
-long var369 /* : Int */;
-short int var371 /* : Bool */;
-int cltype372;
-int idtype373;
-const char* var_class_name374;
-long var375 /* : Int */;
-short int var378 /* : Bool */;
-var_v = p0;
 {
-{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
-var2 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
-var = var2;
-RET_LABEL1:(void)0;
+{ /* Inline typing#AExpr#mtype= (var_nrecv,var_systype) on <var_nrecv:AExpr(AImplicitSelfExpr)> */
+var_nrecv->attrs[COLOR_nit__typing__AExpr___mtype].val = var_systype; /* _mtype on <var_nrecv:AExpr(AImplicitSelfExpr)> */
+RET_LABEL50:(void)0;
 }
 }
-var_anchor = var;
-var3 = NULL;
-if (var_anchor == NULL) {
-var4 = 0; /* is null */
+var_recvtype = var_systype;
 } else {
-var4 = 1; /* arg is null and recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#!= (var_anchor,var3) on <var_anchor:nullable MClassType> */
-var_other = var3;
-{
-var7 = ((short int (*)(val* self, val* p0))(var_anchor->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_anchor, var_other) /* == on <var_anchor:nullable MClassType(MClassType)>*/;
 }
-var8 = !var7;
-var5 = var8;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
+} else {
 }
-var4 = var5;
+} else {
 }
-if (unlikely(!var4)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1657);
-show_backtrace(1);
+if (var_callsite == NULL) {
+var51 = 1; /* is null */
+} else {
+var51 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_callsite,((val*)NULL)) on <var_callsite:nullable Object(nullable CallSite)> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#TypeVisitor#selfvariable (var_v) on <var_v:TypeVisitor> */
-var11 = var_v->attrs[COLOR_nit__typing__TypeVisitor___selfvariable].val; /* _selfvariable on <var_v:TypeVisitor> */
-if (unlikely(var11 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _selfvariable");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 50);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
+var56 = var_callsite == var_other;
+var54 = var56;
+goto RET_LABEL55;
+RET_LABEL55:(void)0;
 }
-var9 = var11;
-RET_LABEL10:(void)0;
 }
+var52 = var54;
+goto RET_LABEL53;
+RET_LABEL53:(void)0;
+}
+var51 = var52;
+}
+if (var51){
+/* <var_nrecv:AExpr> isa ASelfExpr */
+cltype58 = type_nit__ASelfExpr.color;
+idtype59 = type_nit__ASelfExpr.id;
+if(cltype58 >= var_nrecv->type->table_size) {
+var57 = 0;
+} else {
+var57 = var_nrecv->type->type_table[cltype58] == idtype59;
 }
 {
-var12 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var9);
+var60 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, var_node, var_recvtype, var_name, var57);
 }
-var_recvtype = var12;
-var13 = NULL;
-if (var_recvtype == NULL) {
-var14 = 0; /* is null */
+var_callsite = var60;
+if (var_callsite == NULL) {
+var61 = 1; /* is null */
 } else {
-var14 = 1; /* arg is null and recv is not */
+var61 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_recvtype,var13) on <var_recvtype:nullable MType> */
-var_other = var13;
+{ /* Inline kernel#Object#== (var_callsite,((val*)NULL)) on <var_callsite:nullable Object(nullable CallSite)> */
+var_other = ((val*)NULL);
 {
-var17 = ((short int (*)(val* self, val* p0))(var_recvtype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_recvtype, var_other) /* == on <var_recvtype:nullable MType(MType)>*/;
+{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
+var66 = var_callsite == var_other;
+var64 = var66;
+goto RET_LABEL65;
+RET_LABEL65:(void)0;
 }
-var18 = !var17;
-var15 = var18;
-goto RET_LABEL16;
-RET_LABEL16:(void)0;
 }
-var14 = var15;
+var62 = var64;
+goto RET_LABEL63;
+RET_LABEL63:(void)0;
+}
+var61 = var62;
 }
-if (unlikely(!var14)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1659);
-show_backtrace(1);
+if (var61){
+goto RET_LABEL;
+} else {
+}
+} else {
 }
 {
-{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
-var21 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
-var19 = var21;
-RET_LABEL20:(void)0;
+{ /* Inline typing#ASendExpr#callsite= (self,var_callsite) on <self:ASendExpr> */
+self->attrs[COLOR_nit__typing__ASendExpr___callsite].val = var_callsite; /* _callsite on <self:ASendExpr> */
+RET_LABEL67:(void)0;
 }
 }
-var_mpropdef = var19;
-/* <var_mpropdef:nullable MPropDef> isa MMethodDef */
-cltype = type_nit__MMethodDef.color;
-idtype = type_nit__MMethodDef.id;
-if(var_mpropdef == NULL) {
-var22 = 0;
-} else {
-if(cltype >= var_mpropdef->type->table_size) {
-var22 = 0;
-} else {
-var22 = var_mpropdef->type->type_table[cltype] == idtype;
+{
+{ /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:nullable Object(CallSite)> */
+var70 = var_callsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_callsite:nullable Object(CallSite)> */
+if (unlikely(var70 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 631);
+fatal_exit(1);
 }
+var68 = var70;
+RET_LABEL69:(void)0;
 }
-if (unlikely(!var22)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1661);
-show_backtrace(1);
 }
+var_msignature = var68;
 {
-{ /* Inline model#MPropDef#mproperty (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var25 = var_mpropdef->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-if (unlikely(var25 == NULL)) {
+var71 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__compute_raw_arguments]))(self); /* compute_raw_arguments on <self:ASendExpr>*/
+}
+var_args = var71;
+{
+var72 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
+}
+{
+{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable Object(CallSite)> */
+var75 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable Object(CallSite)> */
+if (unlikely(var75 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 624);
+fatal_exit(1);
 }
-var23 = var25;
-RET_LABEL24:(void)0;
+var73 = var75;
+RET_LABEL74:(void)0;
 }
 }
-var_mproperty = var23;
-var26 = NULL;
-var_superprop = var26;
 {
-{ /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var29 = var_mpropdef->attrs[COLOR_nit__model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-if (unlikely(var29 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2010);
-show_backtrace(1);
+{ /* Inline model#MMethod#is_init (var73) on <var73:MMethod> */
+var78 = var73->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var73:MMethod> */
+var76 = var78;
+RET_LABEL77:(void)0;
+}
+}
+if (var76){
+{
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var81 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var79 = var81;
+RET_LABEL80:(void)0;
+}
+}
+var_vmpropdef = var79;
+/* <var_vmpropdef:nullable MPropDef> isa MMethodDef */
+cltype84 = type_nit__MMethodDef.color;
+idtype85 = type_nit__MMethodDef.id;
+if(var_vmpropdef == NULL) {
+var83 = 0;
+} else {
+if(cltype84 >= var_vmpropdef->type->table_size) {
+var83 = 0;
+} else {
+var83 = var_vmpropdef->type->type_table[cltype84] == idtype85;
+}
+}
+var_86 = var83;
+if (var83){
+{
+{ /* Inline model#MPropDef#mproperty (var_vmpropdef) on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
+var89 = var_vmpropdef->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
+if (unlikely(var89 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
+}
+var87 = var89;
+RET_LABEL88:(void)0;
+}
+}
+{
+{ /* Inline model#MMethod#is_init (var87) on <var87:MProperty(MMethod)> */
+var92 = var87->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var87:MProperty(MMethod)> */
+var90 = var92;
+RET_LABEL91:(void)0;
+}
+}
+var82 = var90;
+} else {
+var82 = var_86;
+}
+var93 = !var82;
+if (var93){
+if (likely(varonce94!=NULL)) {
+var95 = varonce94;
+} else {
+var96 = "Error: an `init` can only be called from another `init`.";
+var97 = standard___standard__NativeString___to_s_with_length(var96, 56l);
+var95 = var97;
+varonce94 = var95;
+}
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, var_node, var95); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+}
+} else {
+}
+/* <var_vmpropdef:nullable MPropDef> isa MMethodDef */
+cltype101 = type_nit__MMethodDef.color;
+idtype102 = type_nit__MMethodDef.id;
+if(var_vmpropdef == NULL) {
+var100 = 0;
+} else {
+if(cltype101 >= var_vmpropdef->type->table_size) {
+var100 = 0;
+} else {
+var100 = var_vmpropdef->type->type_table[cltype101] == idtype102;
+}
+}
+var_103 = var100;
+if (var100){
+{
+{ /* Inline model#MPropDef#mproperty (var_vmpropdef) on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
+var106 = var_vmpropdef->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_vmpropdef:nullable MPropDef(MMethodDef)> */
+if (unlikely(var106 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
+}
+var104 = var106;
+RET_LABEL105:(void)0;
+}
+}
+{
+{ /* Inline model#MMethod#is_root_init (var104) on <var104:MProperty(MMethod)> */
+var109 = var104->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var104:MProperty(MMethod)> */
+var107 = var109;
+RET_LABEL108:(void)0;
+}
+}
+var99 = var107;
+} else {
+var99 = var_103;
+}
+var_110 = var99;
+if (var99){
+{
+{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable Object(CallSite)> */
+var113 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable Object(CallSite)> */
+if (unlikely(var113 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 624);
+fatal_exit(1);
+}
+var111 = var113;
+RET_LABEL112:(void)0;
+}
+}
+{
+{ /* Inline model#MMethod#is_root_init (var111) on <var111:MMethod> */
+var116 = var111->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var111:MMethod> */
+var114 = var116;
+RET_LABEL115:(void)0;
+}
+}
+var117 = !var114;
+var98 = var117;
+} else {
+var98 = var_110;
+}
+if (var98){
+if (unlikely(varonce118==NULL)) {
+var119 = NEW_standard__NativeArray(5l, &type_standard__NativeArray__standard__String);
+if (likely(varonce120!=NULL)) {
+var121 = varonce120;
+} else {
+var122 = "Error: `";
+var123 = standard___standard__NativeString___to_s_with_length(var122, 8l);
+var121 = var123;
+varonce120 = var121;
+}
+((struct instance_standard__NativeArray*)var119)->values[0]=var121;
+if (likely(varonce124!=NULL)) {
+var125 = varonce124;
+} else {
+var126 = "` cannot call a factory `";
+var127 = standard___standard__NativeString___to_s_with_length(var126, 25l);
+var125 = var127;
+varonce124 = var125;
+}
+((struct instance_standard__NativeArray*)var119)->values[2]=var125;
+if (likely(varonce128!=NULL)) {
+var129 = varonce128;
+} else {
+var130 = "`.";
+var131 = standard___standard__NativeString___to_s_with_length(var130, 2l);
+var129 = var131;
+varonce128 = var129;
+}
+((struct instance_standard__NativeArray*)var119)->values[4]=var129;
+} else {
+var119 = varonce118;
+varonce118 = NULL;
+}
+{
+var132 = ((val*(*)(val* self))(var_vmpropdef->class->vft[COLOR_standard__string__Object__to_s]))(var_vmpropdef); /* to_s on <var_vmpropdef:nullable MPropDef(MMethodDef)>*/
+}
+((struct instance_standard__NativeArray*)var119)->values[1]=var132;
+{
+{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable Object(CallSite)> */
+var135 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable Object(CallSite)> */
+if (unlikely(var135 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 624);
+fatal_exit(1);
+}
+var133 = var135;
+RET_LABEL134:(void)0;
+}
+}
+{
+var136 = ((val*(*)(val* self))(var133->class->vft[COLOR_standard__string__Object__to_s]))(var133); /* to_s on <var133:MMethod>*/
+}
+((struct instance_standard__NativeArray*)var119)->values[3]=var136;
+{
+var137 = ((val*(*)(val* self))(var119->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var119); /* native_to_s on <var119:NativeArray[String]>*/
+}
+varonce118 = var119;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, var_node, var137); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+}
+} else {
+}
+} else {
+}
+{
+{ /* Inline model#MSignature#return_mtype (var_msignature) on <var_msignature:MSignature> */
+var140 = var_msignature->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var_msignature:MSignature> */
+var138 = var140;
+RET_LABEL139:(void)0;
+}
+}
+var_ret = var138;
+if (var_ret == NULL) {
+var141 = 0; /* is null */
+} else {
+var141 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_ret,((val*)NULL)) on <var_ret:nullable MType> */
+var_other29 = ((val*)NULL);
+{
+var144 = ((short int(*)(val* self, val* p0))(var_ret->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_ret, var_other29); /* == on <var_ret:nullable MType(MType)>*/
+}
+var145 = !var144;
+var142 = var145;
+goto RET_LABEL143;
+RET_LABEL143:(void)0;
+}
+var141 = var142;
+}
+if (var141){
+{
+{ /* Inline typing#AExpr#mtype= (self,var_ret) on <self:ASendExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_ret; /* _mtype on <self:ASendExpr> */
+RET_LABEL146:(void)0;
+}
+}
+} else {
+{
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ASendExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ASendExpr> */
+RET_LABEL147:(void)0;
+}
+}
+}
+RET_LABEL:;
+}
+/* method typing#ASendExpr#property_node for (self: ASendExpr): ANode */
+val* nit__typing___ASendExpr___property_node(val* self) {
+val* var /* : ANode */;
+var = self;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ASendExpr#raw_arguments for (self: ASendExpr): Array[AExpr] */
+val* nit__typing___ASendExpr___raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : Array[AExpr] */;
+{
+var1 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__compute_raw_arguments]))(self); /* compute_raw_arguments on <self:ASendExpr>*/
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABinopExpr#compute_raw_arguments for (self: ABinopExpr): Array[AExpr] */
+val* nit__typing___ABinopExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : Array[AExpr] */;
+val* var_ /* var : Array[AExpr] */;
+val* var2 /* : AExpr */;
+val* var4 /* : AExpr */;
+var1 = NEW_standard__Array(&type_standard__Array__nit__AExpr);
+{
+standard___standard__Array___with_capacity(var1, 1l); /* Direct call array#Array#with_capacity on <var1:Array[AExpr]>*/
+}
+var_ = var1;
+{
+{ /* Inline parser_nodes#ABinopExpr#n_expr2 (self) on <self:ABinopExpr> */
+var4 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_expr2].val; /* _n_expr2 on <self:ABinopExpr> */
+if (unlikely(var4 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr2");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2036);
+fatal_exit(1);
+}
+var2 = var4;
+RET_LABEL3:(void)0;
+}
+}
+{
+standard___standard__AbstractArray___standard__abstract_collection__Sequence__push(var_, var2); /* Direct call array#AbstractArray#push on <var_:Array[AExpr]>*/
+}
+var = var_;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABinopExpr#property_name for (self: ABinopExpr): String */
+val* nit__typing___ABinopExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+val* var1 /* : String */;
+{
+var1 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__parser_nodes__ABinopExpr__operator]))(self); /* operator on <self:ABinopExpr>*/
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABinopExpr#property_node for (self: ABinopExpr): ANode */
+val* nit__typing___ABinopExpr___ASendExpr__property_node(val* self) {
+val* var /* : ANode */;
+val* var1 /* : Token */;
+val* var3 /* : Token */;
+{
+{ /* Inline parser_nodes#ABinopExpr#n_op (self) on <self:ABinopExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ABinopExpr___n_op].val; /* _n_op on <self:ABinopExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_op");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2033);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#AEqExpr#accept_typing for (self: AEqExpr, TypeVisitor) */
+void nit__typing___AEqExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+var_v = p0;
+{
+((void(*)(val* self, val* p0))(self->class->vft[COLOR_nit__typing___AEqExpr___AExpr__accept_typing]))(self, p0); /* accept_typing on <self:AEqExpr>*/
+}
+{
+nit__typing___nit__typing__TypeVisitor___null_test(var_v, self); /* Direct call typing#TypeVisitor#null_test on <var_v:TypeVisitor>*/
+}
+RET_LABEL:;
+}
+/* method typing#ANeExpr#accept_typing for (self: ANeExpr, TypeVisitor) */
+void nit__typing___ANeExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+var_v = p0;
+{
+((void(*)(val* self, val* p0))(self->class->vft[COLOR_nit__typing___ANeExpr___AExpr__accept_typing]))(self, p0); /* accept_typing on <self:ANeExpr>*/
+}
+{
+nit__typing___nit__typing__TypeVisitor___null_test(var_v, self); /* Direct call typing#TypeVisitor#null_test on <var_v:TypeVisitor>*/
+}
+RET_LABEL:;
+}
+/* method typing#AUnaryopExpr#property_name for (self: AUnaryopExpr): String */
+val* nit__typing___AUnaryopExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+val* var1 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce2;
+val* var3 /* : String */;
+char* var4 /* : NativeString */;
+val* var5 /* : FlatString */;
+val* var6 /* : String */;
+val* var7 /* : String */;
+if (unlikely(varonce==NULL)) {
+var1 = NEW_standard__NativeArray(2l, &type_standard__NativeArray__standard__String);
+if (likely(varonce2!=NULL)) {
+var3 = varonce2;
+} else {
+var4 = "unary ";
+var5 = standard___standard__NativeString___to_s_with_length(var4, 6l);
+var3 = var5;
+varonce2 = var3;
+}
+((struct instance_standard__NativeArray*)var1)->values[0]=var3;
+} else {
+var1 = varonce;
+varonce = NULL;
+}
+{
+var6 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__parser_nodes__AUnaryopExpr__operator]))(self); /* operator on <self:AUnaryopExpr>*/
+}
+((struct instance_standard__NativeArray*)var1)->values[1]=var6;
+{
+var7 = ((val*(*)(val* self))(var1->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var1); /* native_to_s on <var1:NativeArray[String]>*/
+}
+varonce = var1;
+var = var7;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#AUnaryopExpr#compute_raw_arguments for (self: AUnaryopExpr): Array[AExpr] */
+val* nit__typing___AUnaryopExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : Array[AExpr] */;
+var1 = NEW_standard__Array(&type_standard__Array__nit__AExpr);
+{
+standard___standard__Array___standard__kernel__Object__init(var1); /* Direct call array#Array#init on <var1:Array[AExpr]>*/
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ACallExpr#property_name for (self: ACallExpr): String */
+val* nit__typing___ACallExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+val* var1 /* : TId */;
+val* var3 /* : TId */;
+val* var4 /* : String */;
+{
+{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2292);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__lexer_work___Token___text(var1);
+}
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ACallExpr#property_node for (self: ACallExpr): ANode */
+val* nit__typing___ACallExpr___ASendExpr__property_node(val* self) {
+val* var /* : ANode */;
+val* var1 /* : TId */;
+val* var3 /* : TId */;
+{
+{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2292);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ACallExpr#compute_raw_arguments for (self: ACallExpr): Array[AExpr] */
+val* nit__typing___ACallExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
+{
+{ /* Inline parser_nodes#ACallFormExpr#n_args (self) on <self:ACallExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2295);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__typing___AExprs___to_a(var1);
+}
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ACallAssignExpr#property_name for (self: ACallAssignExpr): String */
+val* nit__typing___ACallAssignExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+val* var1 /* : TId */;
+val* var3 /* : TId */;
+val* var4 /* : String */;
+static val* varonce;
+val* var5 /* : String */;
+char* var6 /* : NativeString */;
+val* var7 /* : FlatString */;
+val* var8 /* : String */;
+{
+{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallAssignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallAssignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2292);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__lexer_work___Token___text(var1);
+}
+if (likely(varonce!=NULL)) {
+var5 = varonce;
+} else {
+var6 = "=";
+var7 = standard___standard__NativeString___to_s_with_length(var6, 1l);
+var5 = var7;
+varonce = var5;
+}
+{
+var8 = ((val*(*)(val* self, val* p0))(var4->class->vft[COLOR_standard__string__String___43d]))(var4, var5); /* + on <var4:String>*/
+}
+var = var8;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ACallAssignExpr#property_node for (self: ACallAssignExpr): ANode */
+val* nit__typing___ACallAssignExpr___ASendExpr__property_node(val* self) {
+val* var /* : ANode */;
+val* var1 /* : TId */;
+val* var3 /* : TId */;
+{
+{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallAssignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallAssignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2292);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ACallAssignExpr#compute_raw_arguments for (self: ACallAssignExpr): Array[AExpr] */
+val* nit__typing___ACallAssignExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
+val* var_res /* var res: Array[AExpr] */;
+val* var5 /* : AExpr */;
+val* var7 /* : AExpr */;
+{
+{ /* Inline parser_nodes#ACallFormExpr#n_args (self) on <self:ACallAssignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallAssignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2295);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__typing___AExprs___to_a(var1);
+}
+var_res = var4;
+{
+{ /* Inline parser_nodes#AAssignFormExpr#n_value (self) on <self:ACallAssignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ACallAssignExpr> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1995);
+fatal_exit(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_res, var5); /* Direct call array#Array#add on <var_res:Array[AExpr]>*/
+}
+var = var_res;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABraExpr#property_name for (self: ABraExpr): String */
+val* nit__typing___ABraExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+val* var3 /* : FlatString */;
+if (likely(varonce!=NULL)) {
+var1 = varonce;
+} else {
+var2 = "[]";
+var3 = standard___standard__NativeString___to_s_with_length(var2, 2l);
+var1 = var3;
+varonce = var1;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABraExpr#compute_raw_arguments for (self: ABraExpr): Array[AExpr] */
+val* nit__typing___ABraExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
+{
+{ /* Inline parser_nodes#ABraFormExpr#n_args (self) on <self:ABraExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2364);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__typing___AExprs___to_a(var1);
+}
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABraAssignExpr#property_name for (self: ABraAssignExpr): String */
+val* nit__typing___ABraAssignExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+val* var3 /* : FlatString */;
+if (likely(varonce!=NULL)) {
+var1 = varonce;
+} else {
+var2 = "[]=";
+var3 = standard___standard__NativeString___to_s_with_length(var2, 3l);
+var1 = var3;
+varonce = var1;
+}
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ABraAssignExpr#compute_raw_arguments for (self: ABraAssignExpr): Array[AExpr] */
+val* nit__typing___ABraAssignExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
+val* var_res /* var res: Array[AExpr] */;
+val* var5 /* : AExpr */;
+val* var7 /* : AExpr */;
+{
+{ /* Inline parser_nodes#ABraFormExpr#n_args (self) on <self:ABraAssignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraAssignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2364);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
+}
+}
+{
+var4 = nit__typing___AExprs___to_a(var1);
+}
+var_res = var4;
+{
+{ /* Inline parser_nodes#AAssignFormExpr#n_value (self) on <self:ABraAssignExpr> */
+var7 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:ABraAssignExpr> */
+if (unlikely(var7 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1995);
+fatal_exit(1);
+}
+var5 = var7;
+RET_LABEL6:(void)0;
+}
+}
+{
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_res, var5); /* Direct call array#Array#add on <var_res:Array[AExpr]>*/
+}
+var = var_res;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method typing#ASendReassignFormExpr#write_callsite for (self: ASendReassignFormExpr): nullable CallSite */
+val* nit__typing___ASendReassignFormExpr___write_callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__ASendReassignFormExpr___write_callsite].val; /* _write_callsite on <self:ASendReassignFormExpr> */
+var = var1;
+RET_LABEL:;
+return var;
+}
+/* method typing#ASendReassignFormExpr#write_callsite= for (self: ASendReassignFormExpr, nullable CallSite) */
+void nit__typing___ASendReassignFormExpr___write_callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ASendReassignFormExpr___write_callsite].val = p0; /* _write_callsite on <self:ASendReassignFormExpr> */
+RET_LABEL:;
+}
+/* method typing#ASendReassignFormExpr#accept_typing for (self: ASendReassignFormExpr, TypeVisitor) */
+void nit__typing___ASendReassignFormExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : AExpr */;
+val* var2 /* : AExpr */;
+val* var3 /* : nullable MType */;
+val* var_recvtype /* var recvtype: nullable MType */;
+val* var4 /* : String */;
+val* var_name /* var name: String */;
+val* var5 /* : ANode */;
+val* var_node /* var node: ANode */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var9 /* : Bool */;
+short int var11 /* : Bool */;
+val* var12 /* : AExpr */;
+val* var14 /* : AExpr */;
+short int var15 /* : Bool */;
+int cltype;
+int idtype;
+short int var_for_self /* var for_self: Bool */;
+val* var16 /* : nullable CallSite */;
+val* var_callsite /* var callsite: nullable CallSite */;
+short int var17 /* : Bool */;
+short int var18 /* : Bool */;
+short int var20 /* : Bool */;
+short int var22 /* : Bool */;
+val* var24 /* : Array[AExpr] */;
+val* var_args /* var args: Array[AExpr] */;
+short int var25 /* : Bool */;
+val* var26 /* : MSignature */;
+val* var28 /* : MSignature */;
+val* var29 /* : nullable MType */;
+val* var31 /* : nullable MType */;
+val* var_readtype /* var readtype: nullable MType */;
+short int var32 /* : Bool */;
+short int var33 /* : Bool */;
+short int var35 /* : Bool */;
+short int var37 /* : Bool */;
+val* var38 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce39;
+val* var40 /* : String */;
+char* var41 /* : NativeString */;
+val* var42 /* : FlatString */;
+static val* varonce43;
+val* var44 /* : String */;
+char* var45 /* : NativeString */;
+val* var46 /* : FlatString */;
+val* var47 /* : String */;
+static val* varonce48;
+val* var49 /* : String */;
+char* var50 /* : NativeString */;
+val* var51 /* : FlatString */;
+val* var52 /* : String */;
+val* var53 /* : AExpr */;
+val* var55 /* : AExpr */;
+short int var56 /* : Bool */;
+int cltype57;
+int idtype58;
+val* var59 /* : nullable CallSite */;
+val* var_wcallsite /* var wcallsite: nullable CallSite */;
+short int var60 /* : Bool */;
+short int var61 /* : Bool */;
+short int var63 /* : Bool */;
+short int var65 /* : Bool */;
+val* var67 /* : MSignature */;
+val* var69 /* : MSignature */;
+val* var70 /* : Array[MParameter] */;
+val* var72 /* : Array[MParameter] */;
+val* var73 /* : nullable Object */;
+val* var74 /* : MType */;
+val* var76 /* : MType */;
+val* var77 /* : nullable MType */;
+val* var_wtype /* var wtype: nullable MType */;
+short int var78 /* : Bool */;
+short int var79 /* : Bool */;
+short int var81 /* : Bool */;
+short int var83 /* : Bool */;
+val* var84 /* : Array[nullable Object] */;
+val* var85 /* : AExpr */;
+val* var87 /* : AExpr */;
+short int var88 /* : Bool */;
+var_v = p0;
+{
+{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendReassignFormExpr> */
+var2 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendReassignFormExpr> */
+if (unlikely(var2 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2025);
+fatal_exit(1);
+}
+var = var2;
+RET_LABEL1:(void)0;
+}
+}
+{
+var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+}
+var_recvtype = var3;
+{
+var4 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__property_name]))(self); /* property_name on <self:ASendReassignFormExpr>*/
 }
-var27 = var29;
-RET_LABEL28:(void)0;
+var_name = var4;
+{
+var5 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__property_node]))(self); /* property_node on <self:ASendReassignFormExpr>*/
 }
+var_node = var5;
+if (var_recvtype == NULL) {
+var6 = 1; /* is null */
+} else {
+var6 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_recvtype,((val*)NULL)) on <var_recvtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline model#MClassDef#supertypes (var27) on <var27:MClassDef> */
-var32 = var27->attrs[COLOR_nit__model__MClassDef___supertypes].val; /* _supertypes on <var27:MClassDef> */
-if (unlikely(var32 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _supertypes");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 566);
-show_backtrace(1);
+{ /* Inline kernel#Object#is_same_instance (var_recvtype,var_other) on <var_recvtype:nullable MType(MType)> */
+var11 = var_recvtype == var_other;
+var9 = var11;
+goto RET_LABEL10;
+RET_LABEL10:(void)0;
 }
-var30 = var32;
-RET_LABEL31:(void)0;
 }
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
 }
-var_ = var30;
-{
-var33 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
+var6 = var7;
 }
-var_34 = var33;
-for(;;) {
-{
-var35 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_34);
+if (var6){
+goto RET_LABEL;
+} else {
 }
-if (var35){
 {
-var36 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_34);
+{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendReassignFormExpr> */
+var14 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendReassignFormExpr> */
+if (unlikely(var14 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2025);
+fatal_exit(1);
 }
-var_msupertype = var36;
-{
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var39 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var39 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+var12 = var14;
+RET_LABEL13:(void)0;
 }
-var37 = var39;
-RET_LABEL38:(void)0;
 }
+/* <var12:AExpr> isa ASelfExpr */
+cltype = type_nit__ASelfExpr.color;
+idtype = type_nit__ASelfExpr.id;
+if(cltype >= var12->type->table_size) {
+var15 = 0;
+} else {
+var15 = var12->type->type_table[cltype] == idtype;
 }
+var_for_self = var15;
 {
-var40 = nit___nit__MClassType___MType__anchor_to(var_msupertype, var37, var_anchor);
+var16 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, var_node, var_recvtype, var_name, var_for_self);
 }
-var_msupertype = var40;
-{
-{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
-var43 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
-if (unlikely(var43 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
-show_backtrace(1);
+var_callsite = var16;
+if (var_callsite == NULL) {
+var17 = 1; /* is null */
+} else {
+var17 = 0; /* arg is null but recv is not */
 }
-var41 = var43;
-RET_LABEL42:(void)0;
+if (0) {
+{ /* Inline kernel#Object#== (var_callsite,((val*)NULL)) on <var_callsite:nullable CallSite> */
+var_other = ((val*)NULL);
+{
+{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
+var22 = var_callsite == var_other;
+var20 = var22;
+goto RET_LABEL21;
+RET_LABEL21:(void)0;
 }
 }
-{
-{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (var41) on <var41:ModelBuilder> */
-var46 = var41->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <var41:ModelBuilder> */
-if (unlikely(var46 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+var18 = var20;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
 }
-var44 = var46;
-RET_LABEL45:(void)0;
+var17 = var18;
 }
+if (var17){
+goto RET_LABEL;
+} else {
 }
 {
-{ /* Inline toolcontext#ToolContext#error_count (var44) on <var44:ToolContext> */
-var49 = var44->attrs[COLOR_nit__toolcontext__ToolContext___error_count].l; /* _error_count on <var44:ToolContext> */
-var47 = var49;
-RET_LABEL48:(void)0;
+{ /* Inline typing#ASendExpr#callsite= (self,var_callsite) on <self:ASendReassignFormExpr> */
+self->attrs[COLOR_nit__typing__ASendExpr___callsite].val = var_callsite; /* _callsite on <self:ASendReassignFormExpr> */
+RET_LABEL23:(void)0;
 }
 }
-var_errcount = var47;
 {
-{ /* Inline model#MProperty#name (var_mproperty) on <var_mproperty:MMethod> */
-var52 = var_mproperty->attrs[COLOR_nit__model__MProperty___name].val; /* _name on <var_mproperty:MMethod> */
-if (unlikely(var52 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1741);
-show_backtrace(1);
-}
-var50 = var52;
-RET_LABEL51:(void)0;
+var24 = ((val*(*)(val* self))(self->class->vft[COLOR_nit__typing__ASendExpr__compute_raw_arguments]))(self); /* compute_raw_arguments on <self:ASendReassignFormExpr>*/
 }
+var_args = var24;
+{
+var25 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
 }
 {
-var53 = nit__typing___nit__typing__TypeVisitor___try_get_mproperty_by_name2(var_v, self, var_msupertype, var50);
+{ /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
+var28 = var_callsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_callsite:nullable CallSite(CallSite)> */
+if (unlikely(var28 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 631);
+fatal_exit(1);
 }
-/* <var53:nullable MProperty> isa nullable MMethod */
-cltype55 = type_nullable__nit__MMethod.color;
-idtype56 = type_nullable__nit__MMethod.id;
-if(var53 == NULL) {
-var54 = 1;
-} else {
-if(cltype55 >= var53->type->table_size) {
-var54 = 0;
-} else {
-var54 = var53->type->type_table[cltype55] == idtype56;
+var26 = var28;
+RET_LABEL27:(void)0;
 }
 }
-if (unlikely(!var54)) {
-var_class_name = var53 == NULL ? "null" : var53->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable MMethod", var_class_name);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1667);
-show_backtrace(1);
+{
+{ /* Inline model#MSignature#return_mtype (var26) on <var26:MSignature> */
+var31 = var26->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var26:MSignature> */
+var29 = var31;
+RET_LABEL30:(void)0;
 }
-var_candidate = var53;
-var57 = NULL;
-if (var_candidate == NULL) {
-var58 = 1; /* is null */
+}
+var_readtype = var29;
+if (var_readtype == NULL) {
+var32 = 1; /* is null */
 } else {
-var58 = 0; /* arg is null but recv is not */
+var32 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_candidate,var57) on <var_candidate:nullable MMethod> */
-var_other61 = var57;
+{ /* Inline kernel#Object#== (var_readtype,((val*)NULL)) on <var_readtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_candidate,var_other61) on <var_candidate:nullable MMethod(MMethod)> */
-var64 = var_candidate == var_other61;
-var62 = var64;
-goto RET_LABEL63;
-RET_LABEL63:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_readtype,var_other) on <var_readtype:nullable MType(MType)> */
+var37 = var_readtype == var_other;
+var35 = var37;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
 }
 }
-var59 = var62;
-goto RET_LABEL60;
-RET_LABEL60:(void)0;
+var33 = var35;
+goto RET_LABEL34;
+RET_LABEL34:(void)0;
 }
-var58 = var59;
+var32 = var33;
 }
-if (var58){
-{
-{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
-var67 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
-if (unlikely(var67 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
-show_backtrace(1);
+if (var32){
+if (unlikely(varonce==NULL)) {
+var38 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce39!=NULL)) {
+var40 = varonce39;
+} else {
+var41 = "Error: `";
+var42 = standard___standard__NativeString___to_s_with_length(var41, 8l);
+var40 = var42;
+varonce39 = var40;
+}
+((struct instance_standard__NativeArray*)var38)->values[0]=var40;
+if (likely(varonce43!=NULL)) {
+var44 = varonce43;
+} else {
+var45 = "` is not a function.";
+var46 = standard___standard__NativeString___to_s_with_length(var45, 20l);
+var44 = var46;
+varonce43 = var44;
 }
-var65 = var67;
-RET_LABEL66:(void)0;
+((struct instance_standard__NativeArray*)var38)->values[2]=var44;
+} else {
+var38 = varonce;
+varonce = NULL;
 }
+((struct instance_standard__NativeArray*)var38)->values[1]=var_name;
+{
+var47 = ((val*(*)(val* self))(var38->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var38); /* native_to_s on <var38:NativeArray[String]>*/
 }
+varonce = var38;
 {
-{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (var65) on <var65:ModelBuilder> */
-var70 = var65->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <var65:ModelBuilder> */
-if (unlikely(var70 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
-show_backtrace(1);
+nit__typing___nit__typing__TypeVisitor___error(var_v, var_node, var47); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-var68 = var70;
-RET_LABEL69:(void)0;
+goto RET_LABEL;
+} else {
 }
+if (likely(varonce48!=NULL)) {
+var49 = varonce48;
+} else {
+var50 = "=";
+var51 = standard___standard__NativeString___to_s_with_length(var50, 1l);
+var49 = var51;
+varonce48 = var49;
 }
 {
-{ /* Inline toolcontext#ToolContext#error_count (var68) on <var68:ToolContext> */
-var73 = var68->attrs[COLOR_nit__toolcontext__ToolContext___error_count].l; /* _error_count on <var68:ToolContext> */
-var71 = var73;
-RET_LABEL72:(void)0;
-}
+var52 = ((val*(*)(val* self, val* p0))(var_name->class->vft[COLOR_standard__string__String___43d]))(var_name, var49); /* + on <var_name:String>*/
 }
 {
-{ /* Inline kernel#Int#> (var71,var_errcount) on <var71:Int> */
-/* Covariant cast for argument 0 (i) <var_errcount:Int> isa OTHER */
-/* <var_errcount:Int> isa OTHER */
-var76 = 1; /* easy <var_errcount:Int> isa OTHER*/
-if (unlikely(!var76)) {
-var_class_name79 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name79);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 412);
-show_backtrace(1);
-}
-var80 = var71 > var_errcount;
-var74 = var80;
-goto RET_LABEL75;
-RET_LABEL75:(void)0;
+{ /* Inline parser_nodes#ASendExpr#n_expr (self) on <self:ASendReassignFormExpr> */
+var55 = self->attrs[COLOR_nit__parser_nodes__ASendExpr___n_expr].val; /* _n_expr on <self:ASendReassignFormExpr> */
+if (unlikely(var55 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2025);
+fatal_exit(1);
 }
+var53 = var55;
+RET_LABEL54:(void)0;
 }
-if (var74){
-goto RET_LABEL;
-} else {
 }
-goto BREAK_label;
+/* <var53:AExpr> isa ASelfExpr */
+cltype57 = type_nit__ASelfExpr.color;
+idtype58 = type_nit__ASelfExpr.id;
+if(cltype57 >= var53->type->table_size) {
+var56 = 0;
 } else {
+var56 = var53->type->type_table[cltype57] == idtype58;
 }
-var82 = NULL;
-if (var_superprop == NULL) {
-var83 = 0; /* is null */
+{
+var59 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, var_node, var_recvtype, var52, var56);
+}
+var_wcallsite = var59;
+if (var_wcallsite == NULL) {
+var60 = 1; /* is null */
 } else {
-var83 = 1; /* arg is null and recv is not */
+var60 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_superprop,var82) on <var_superprop:nullable MMethodDef> */
-var_other = var82;
+{ /* Inline kernel#Object#== (var_wcallsite,((val*)NULL)) on <var_wcallsite:nullable CallSite> */
+var_other = ((val*)NULL);
 {
-var86 = ((short int (*)(val* self, val* p0))(var_superprop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_superprop, var_other) /* == on <var_superprop:nullable MMethodDef(MMethodDef)>*/;
-}
-var87 = !var86;
-var84 = var87;
-goto RET_LABEL85;
-RET_LABEL85:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_wcallsite,var_other) on <var_wcallsite:nullable CallSite(CallSite)> */
+var65 = var_wcallsite == var_other;
+var63 = var65;
+goto RET_LABEL64;
+RET_LABEL64:(void)0;
 }
-var83 = var84;
 }
-var_88 = var83;
-if (var83){
-{
-{ /* Inline model#MMethod#is_root_init (var_candidate) on <var_candidate:nullable MMethod(MMethod)> */
-var91 = var_candidate->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var_candidate:nullable MMethod(MMethod)> */
-var89 = var91;
-RET_LABEL90:(void)0;
+var61 = var63;
+goto RET_LABEL62;
+RET_LABEL62:(void)0;
 }
+var60 = var61;
 }
-var81 = var89;
+if (var60){
+goto RET_LABEL;
 } else {
-var81 = var_88;
 }
-if (var81){
-goto BREAK_label;
-} else {
+{
+{ /* Inline typing#ASendReassignFormExpr#write_callsite= (self,var_wcallsite) on <self:ASendReassignFormExpr> */
+self->attrs[COLOR_nit__typing__ASendReassignFormExpr___write_callsite].val = var_wcallsite; /* _write_callsite on <self:ASendReassignFormExpr> */
+RET_LABEL66:(void)0;
 }
-var94 = NULL;
-if (var_superprop == NULL) {
-var95 = 0; /* is null */
-} else {
-var95 = 1; /* arg is null and recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_superprop,var94) on <var_superprop:nullable MMethodDef> */
-var_other = var94;
 {
-var98 = ((short int (*)(val* self, val* p0))(var_superprop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_superprop, var_other) /* == on <var_superprop:nullable MMethodDef(MMethodDef)>*/;
+{ /* Inline typing#CallSite#msignature (var_wcallsite) on <var_wcallsite:nullable CallSite(CallSite)> */
+var69 = var_wcallsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_wcallsite:nullable CallSite(CallSite)> */
+if (unlikely(var69 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 631);
+fatal_exit(1);
 }
-var99 = !var98;
-var96 = var99;
-goto RET_LABEL97;
-RET_LABEL97:(void)0;
+var67 = var69;
+RET_LABEL68:(void)0;
 }
-var95 = var96;
 }
-var_100 = var95;
-if (var95){
 {
-{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var103 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
-if (unlikely(var103 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
+{ /* Inline model#MSignature#mparameters (var67) on <var67:MSignature> */
+var72 = var67->attrs[COLOR_nit__model__MSignature___mparameters].val; /* _mparameters on <var67:MSignature> */
+if (unlikely(var72 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1756);
+fatal_exit(1);
 }
-var101 = var103;
-RET_LABEL102:(void)0;
+var70 = var72;
+RET_LABEL71:(void)0;
 }
 }
 {
-{ /* Inline kernel#Object#!= (var101,var_candidate) on <var101:MProperty(MMethod)> */
-var_other = var_candidate;
-{
-var106 = ((short int (*)(val* self, val* p0))(var101->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var101, var_other) /* == on <var101:MProperty(MMethod)>*/;
+var73 = standard___standard__SequenceRead___last(var70);
 }
-var107 = !var106;
-var104 = var107;
-goto RET_LABEL105;
-RET_LABEL105:(void)0;
+{
+{ /* Inline model#MParameter#mtype (var73) on <var73:nullable Object(MParameter)> */
+var76 = var73->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var73:nullable Object(MParameter)> */
+if (unlikely(var76 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1879);
+fatal_exit(1);
 }
+var74 = var76;
+RET_LABEL75:(void)0;
 }
-var93 = var104;
-} else {
-var93 = var_100;
 }
-var_108 = var93;
-if (var93){
 {
-{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var111 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
-if (unlikely(var111 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
-}
-var109 = var111;
-RET_LABEL110:(void)0;
+var77 = nit__typing___AReassignFormExpr___resolve_reassignment(self, var_v, var_readtype, var74);
 }
+var_wtype = var77;
+if (var_wtype == NULL) {
+var78 = 1; /* is null */
+} else {
+var78 = 0; /* arg is null but recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#== (var_wtype,((val*)NULL)) on <var_wtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline model#MMethod#is_root_init (var109) on <var109:MProperty(MMethod)> */
-var114 = var109->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var109:MProperty(MMethod)> */
-var112 = var114;
-RET_LABEL113:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_wtype,var_other) on <var_wtype:nullable MType(MType)> */
+var83 = var_wtype == var_other;
+var81 = var83;
+goto RET_LABEL82;
+RET_LABEL82:(void)0;
 }
 }
-var115 = !var112;
-var92 = var115;
-} else {
-var92 = var_108;
+var79 = var81;
+goto RET_LABEL80;
+RET_LABEL80:(void)0;
 }
-if (var92){
-if (varonce) {
-var116 = varonce;
-} else {
-var117 = "Error: conflicting super constructor to call for ";
-var118 = 49;
-var119 = standard___standard__NativeString___to_s_with_length(var117, var118);
-var116 = var119;
-varonce = var116;
+var78 = var79;
 }
-if (varonce120) {
-var121 = varonce120;
+if (var78){
+goto RET_LABEL;
 } else {
-var122 = ": ";
-var123 = 2;
-var124 = standard___standard__NativeString___to_s_with_length(var122, var123);
-var121 = var124;
-varonce120 = var121;
 }
 {
-var125 = nit___nit__MProperty___nit__model_base__MEntity__full_name(var_candidate);
-}
-if (varonce126) {
-var127 = varonce126;
-} else {
-var128 = ", ";
-var129 = 2;
-var130 = standard___standard__NativeString___to_s_with_length(var128, var129);
-var127 = var130;
-varonce126 = var127;
+var84 = standard__array___Collection___to_a(var_args);
 }
+var_args = var84;
 {
-{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var133 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
-if (unlikely(var133 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
+{ /* Inline parser_nodes#AReassignFormExpr#n_value (self) on <self:ASendReassignFormExpr> */
+var87 = self->attrs[COLOR_nit__parser_nodes__AReassignFormExpr___n_value].val; /* _n_value on <self:ASendReassignFormExpr> */
+if (unlikely(var87 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2006);
+fatal_exit(1);
 }
-var131 = var133;
-RET_LABEL132:(void)0;
+var85 = var87;
+RET_LABEL86:(void)0;
 }
 }
 {
-var134 = nit___nit__MProperty___nit__model_base__MEntity__full_name(var131);
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_args, var85); /* Direct call array#Array#add on <var_args:Array[AExpr]>*/
 }
-var135 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var135 = array_instance Array[Object] */
-var136 = 6;
-var137 = NEW_standard__NativeArray(var136, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var137)->values[0] = (val*) var116;
-((struct instance_standard__NativeArray*)var137)->values[1] = (val*) var_mproperty;
-((struct instance_standard__NativeArray*)var137)->values[2] = (val*) var121;
-((struct instance_standard__NativeArray*)var137)->values[3] = (val*) var125;
-((struct instance_standard__NativeArray*)var137)->values[4] = (val*) var127;
-((struct instance_standard__NativeArray*)var137)->values[5] = (val*) var134;
 {
-((void (*)(val* self, val* p0, long p1))(var135->class->vft[COLOR_standard__array__Array__with_native]))(var135, var137, var136) /* with_native on <var135:Array[Object]>*/;
-}
+var88 = nit___nit__CallSite___check_signature(var_wcallsite, var_v, var_args);
 }
 {
-var138 = ((val* (*)(val* self))(var135->class->vft[COLOR_standard__string__Object__to_s]))(var135) /* to_s on <var135:Array[Object]>*/;
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ASendReassignFormExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ASendReassignFormExpr> */
+RET_LABEL89:(void)0;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var138); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
-} else {
+RET_LABEL:;
 }
+/* method typing#ACallReassignExpr#property_name for (self: ACallReassignExpr): String */
+val* nit__typing___ACallReassignExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+val* var1 /* : TId */;
+val* var3 /* : TId */;
+val* var4 /* : String */;
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var141 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var141 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallReassignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallReassignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2292);
+fatal_exit(1);
 }
-var139 = var141;
-RET_LABEL140:(void)0;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
 }
 {
-var142 = nit___nit__MProperty___lookup_definitions(var_candidate, var139, var_anchor);
+var4 = nit__lexer_work___Token___text(var1);
 }
-var_candidatedefs = var142;
-var144 = NULL;
-if (var_superprop == NULL) {
-var145 = 0; /* is null */
-} else {
-var145 = 1; /* arg is null and recv is not */
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var_superprop,var144) on <var_superprop:nullable MMethodDef> */
-var_other = var144;
+/* method typing#ACallReassignExpr#property_node for (self: ACallReassignExpr): ANode */
+val* nit__typing___ACallReassignExpr___ASendExpr__property_node(val* self) {
+val* var /* : ANode */;
+val* var1 /* : TId */;
+val* var3 /* : TId */;
 {
-var148 = ((short int (*)(val* self, val* p0))(var_superprop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_superprop, var_other) /* == on <var_superprop:nullable MMethodDef(MMethodDef)>*/;
+{ /* Inline parser_nodes#ACallFormExpr#n_id (self) on <self:ACallReassignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_id].val; /* _n_id on <self:ACallReassignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2292);
+fatal_exit(1);
+}
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-var149 = !var148;
-var146 = var149;
-goto RET_LABEL147;
-RET_LABEL147:(void)0;
 }
-var145 = var146;
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-var_150 = var145;
-if (var145){
+/* method typing#ACallReassignExpr#compute_raw_arguments for (self: ACallReassignExpr): Array[AExpr] */
+val* nit__typing___ACallReassignExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
 {
-{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var153 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
-if (unlikely(var153 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
+{ /* Inline parser_nodes#ACallFormExpr#n_args (self) on <self:ACallReassignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ACallFormExpr___n_args].val; /* _n_args on <self:ACallReassignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2295);
+fatal_exit(1);
 }
-var151 = var153;
-RET_LABEL152:(void)0;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
 }
 {
-{ /* Inline kernel#Object#== (var151,var_candidate) on <var151:MProperty(MMethod)> */
-var_other61 = var_candidate;
-{
-{ /* Inline kernel#Object#is_same_instance (var151,var_other61) on <var151:MProperty(MMethod)> */
-var158 = var151 == var_other61;
-var156 = var158;
-goto RET_LABEL157;
-RET_LABEL157:(void)0;
-}
-}
-var154 = var156;
-goto RET_LABEL155;
-RET_LABEL155:(void)0;
+var4 = nit__typing___AExprs___to_a(var1);
 }
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-var143 = var154;
+/* method typing#ABraReassignExpr#property_name for (self: ABraReassignExpr): String */
+val* nit__typing___ABraReassignExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+val* var3 /* : FlatString */;
+if (likely(varonce!=NULL)) {
+var1 = varonce;
 } else {
-var143 = var_150;
+var2 = "[]";
+var3 = standard___standard__NativeString___to_s_with_length(var2, 2l);
+var1 = var3;
+varonce = var1;
 }
-if (var143){
-{
-var159 = standard___standard__SequenceRead___Collection__first(var_candidatedefs);
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
+/* method typing#ABraReassignExpr#compute_raw_arguments for (self: ABraReassignExpr): Array[AExpr] */
+val* nit__typing___ABraReassignExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
 {
-{ /* Inline kernel#Object#== (var_superprop,var159) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var_other61 = var159;
-{
-{ /* Inline kernel#Object#is_same_instance (var_superprop,var_other61) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var164 = var_superprop == var_other61;
-var162 = var164;
-goto RET_LABEL163;
-RET_LABEL163:(void)0;
-}
-}
-var160 = var162;
-goto RET_LABEL161;
-RET_LABEL161:(void)0;
+{ /* Inline parser_nodes#ABraFormExpr#n_args (self) on <self:ABraReassignExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__ABraFormExpr___n_args].val; /* _n_args on <self:ABraReassignExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2364);
+fatal_exit(1);
 }
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-if (var160){
-goto BREAK_label;
-} else {
 }
 {
-standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_candidatedefs, var_superprop); /* Direct call array#Array#add on <var_candidatedefs:Array[MMethodDef]>*/
+var4 = nit__typing___AExprs___to_a(var1);
 }
-} else {
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-{
-{ /* Inline array#AbstractArrayRead#length (var_candidatedefs) on <var_candidatedefs:Array[MMethodDef]> */
-var167 = var_candidatedefs->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_candidatedefs:Array[MMethodDef]> */
-var165 = var167;
-RET_LABEL166:(void)0;
+/* method typing#AInitExpr#property_name for (self: AInitExpr): String */
+val* nit__typing___AInitExpr___ASendExpr__property_name(val* self) {
+val* var /* : String */;
+static val* varonce;
+val* var1 /* : String */;
+char* var2 /* : NativeString */;
+val* var3 /* : FlatString */;
+if (likely(varonce!=NULL)) {
+var1 = varonce;
+} else {
+var2 = "init";
+var3 = standard___standard__NativeString___to_s_with_length(var2, 4l);
+var1 = var3;
+varonce = var1;
 }
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-var168 = 1;
+/* method typing#AInitExpr#property_node for (self: AInitExpr): ANode */
+val* nit__typing___AInitExpr___ASendExpr__property_node(val* self) {
+val* var /* : ANode */;
+val* var1 /* : TKwinit */;
+val* var3 /* : TKwinit */;
 {
-{ /* Inline kernel#Int#> (var165,var168) on <var165:Int> */
-/* Covariant cast for argument 0 (i) <var168:Int> isa OTHER */
-/* <var168:Int> isa OTHER */
-var171 = 1; /* easy <var168:Int> isa OTHER*/
-if (unlikely(!var171)) {
-var_class_name174 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name174);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 412);
-show_backtrace(1);
+{ /* Inline parser_nodes#AInitExpr#n_kwinit (self) on <self:AInitExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_kwinit].val; /* _n_kwinit on <self:AInitExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_kwinit");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2353);
+fatal_exit(1);
 }
-var175 = var165 > var168;
-var169 = var175;
-goto RET_LABEL170;
-RET_LABEL170:(void)0;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
 }
-if (var169){
-if (varonce176) {
-var177 = varonce176;
-} else {
-var178 = "Error: conflicting property definitions for property ";
-var179 = 53;
-var180 = standard___standard__NativeString___to_s_with_length(var178, var179);
-var177 = var180;
-varonce176 = var177;
+var = var1;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-if (varonce181) {
-var182 = varonce181;
-} else {
-var183 = " in ";
-var184 = 4;
-var185 = standard___standard__NativeString___to_s_with_length(var183, var184);
-var182 = var185;
-varonce181 = var182;
+/* method typing#AInitExpr#compute_raw_arguments for (self: AInitExpr): Array[AExpr] */
+val* nit__typing___AInitExpr___ASendExpr__compute_raw_arguments(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : AExprs */;
+val* var3 /* : AExprs */;
+val* var4 /* : Array[AExpr] */;
+{
+{ /* Inline parser_nodes#AInitExpr#n_args (self) on <self:AInitExpr> */
+var3 = self->attrs[COLOR_nit__parser_nodes__AInitExpr___n_args].val; /* _n_args on <self:AInitExpr> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2356);
+fatal_exit(1);
 }
-if (varonce186) {
-var187 = varonce186;
-} else {
-var188 = ": ";
-var189 = 2;
-var190 = standard___standard__NativeString___to_s_with_length(var188, var189);
-var187 = var190;
-varonce186 = var187;
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-if (varonce191) {
-var192 = varonce191;
-} else {
-var193 = ", ";
-var194 = 2;
-var195 = standard___standard__NativeString___to_s_with_length(var193, var194);
-var192 = var195;
-varonce191 = var192;
 }
 {
-var196 = standard__string___Collection___join(var_candidatedefs, var192);
+var4 = nit__typing___AExprs___to_a(var1);
+}
+var = var4;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
 }
-var197 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var197 = array_instance Array[Object] */
-var198 = 6;
-var199 = NEW_standard__NativeArray(var198, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var199)->values[0] = (val*) var177;
-((struct instance_standard__NativeArray*)var199)->values[1] = (val*) var_mproperty;
-((struct instance_standard__NativeArray*)var199)->values[2] = (val*) var182;
-((struct instance_standard__NativeArray*)var199)->values[3] = (val*) var_recvtype;
-((struct instance_standard__NativeArray*)var199)->values[4] = (val*) var187;
-((struct instance_standard__NativeArray*)var199)->values[5] = (val*) var196;
+/* method typing#AExprs#to_a for (self: AExprs): Array[AExpr] */
+val* nit__typing___AExprs___to_a(val* self) {
+val* var /* : Array[AExpr] */;
+val* var1 /* : ANodes[AExpr] */;
+val* var3 /* : ANodes[AExpr] */;
+val* var4 /* : Array[nullable Object] */;
 {
-((void (*)(val* self, val* p0, long p1))(var197->class->vft[COLOR_standard__array__Array__with_native]))(var197, var199, var198) /* with_native on <var197:Array[Object]>*/;
+{ /* Inline parser_nodes#AExprs#n_exprs (self) on <self:AExprs> */
+var3 = self->attrs[COLOR_nit__parser_nodes__AExprs___n_exprs].val; /* _n_exprs on <self:AExprs> */
+if (unlikely(var3 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_exprs");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2771);
+fatal_exit(1);
 }
+var1 = var3;
+RET_LABEL2:(void)0;
 }
-{
-var200 = ((val* (*)(val* self))(var197->class->vft[COLOR_standard__string__Object__to_s]))(var197) /* to_s on <var197:Array[Object]>*/;
 }
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var200); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var4 = standard__array___Collection___to_a(var1);
 }
+var = var4;
 goto RET_LABEL;
-} else {
+RET_LABEL:;
+return var;
 }
-{
-var201 = standard___standard__SequenceRead___Collection__first(var_candidatedefs);
+/* method typing#ASuperExpr#callsite for (self: ASuperExpr): nullable CallSite */
+val* nit__typing___ASuperExpr___callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__ASuperExpr___callsite].val; /* _callsite on <self:ASuperExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-var_superprop = var201;
-BREAK_label: (void)0;
-{
-standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_34); /* Direct call array#ArrayIterator#next on <var_34:ArrayIterator[MClassType]>*/
+/* method typing#ASuperExpr#callsite= for (self: ASuperExpr, nullable CallSite) */
+void nit__typing___ASuperExpr___callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ASuperExpr___callsite].val = p0; /* _callsite on <self:ASuperExpr> */
+RET_LABEL:;
 }
-} else {
-goto BREAK_label202;
+/* method typing#ASuperExpr#mpropdef for (self: ASuperExpr): nullable MMethodDef */
+val* nit__typing___ASuperExpr___mpropdef(val* self) {
+val* var /* : nullable MMethodDef */;
+val* var1 /* : nullable MMethodDef */;
+var1 = self->attrs[COLOR_nit__typing__ASuperExpr___mpropdef].val; /* _mpropdef on <self:ASuperExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
+/* method typing#ASuperExpr#mpropdef= for (self: ASuperExpr, nullable MMethodDef) */
+void nit__typing___ASuperExpr___mpropdef_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ASuperExpr___mpropdef].val = p0; /* _mpropdef on <self:ASuperExpr> */
+RET_LABEL:;
 }
-BREAK_label202: (void)0;
+/* method typing#ASuperExpr#accept_typing for (self: ASuperExpr, TypeVisitor) */
+void nit__typing___ASuperExpr___AExpr__accept_typing(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable MClassType */;
+val* var2 /* : nullable MClassType */;
+val* var_anchor /* var anchor: nullable MClassType */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : Variable */;
+val* var10 /* : Variable */;
+val* var11 /* : nullable MType */;
+val* var_recvtype /* var recvtype: nullable MType */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+val* var17 /* : nullable MPropDef */;
+val* var19 /* : nullable MPropDef */;
+val* var20 /* : MProperty */;
+val* var22 /* : MProperty */;
+val* var_mproperty /* var mproperty: MProperty */;
+short int var23 /* : Bool */;
+int cltype;
+int idtype;
+short int var24 /* : Bool */;
+static val* varonce;
+val* var25 /* : String */;
+char* var26 /* : NativeString */;
+val* var27 /* : FlatString */;
+val* var28 /* : MModule */;
+val* var30 /* : MModule */;
+val* var31 /* : Array[MPropDef] */;
+val* var_superprops /* var superprops: Array[MMethodDef] */;
+long var32 /* : Int */;
+long var34 /* : Int */;
+short int var35 /* : Bool */;
+short int var37 /* : Bool */;
+short int var38 /* : Bool */;
+short int var39 /* : Bool */;
+short int var41 /* : Bool */;
+short int var_ /* var : Bool */;
+val* var42 /* : nullable MPropDef */;
+val* var44 /* : nullable MPropDef */;
+short int var45 /* : Bool */;
+val* var47 /* : NativeArray[String] */;
+static val* varonce46;
+static val* varonce48;
+val* var49 /* : String */;
+char* var50 /* : NativeString */;
+val* var51 /* : FlatString */;
+static val* varonce52;
+val* var53 /* : String */;
+char* var54 /* : NativeString */;
+val* var55 /* : FlatString */;
+val* var56 /* : String */;
+val* var57 /* : String */;
+val* var58 /* : nullable Object */;
+val* var_superprop /* var superprop: MMethodDef */;
+val* var59 /* : nullable MSignature */;
+val* var61 /* : nullable MSignature */;
+val* var_msignature /* var msignature: MSignature */;
+val* var62 /* : MType */;
+short int var63 /* : Bool */;
+int cltype64;
+int idtype65;
+const char* var_class_name;
+val* var66 /* : AExprs */;
+val* var68 /* : AExprs */;
+val* var69 /* : Array[AExpr] */;
+val* var_args /* var args: Array[AExpr] */;
+long var70 /* : Int */;
+long var72 /* : Int */;
+short int var73 /* : Bool */;
+short int var75 /* : Bool */;
+int cltype76;
+int idtype77;
+const char* var_class_name78;
+short int var79 /* : Bool */;
+val* var80 /* : nullable SignatureMap */;
+val* var82 /* : nullable MType */;
+val* var84 /* : nullable MType */;
+val* var87 /* : nullable MPropDef */;
+val* var89 /* : nullable MPropDef */;
+val* var91 /* : nullable MPropDef */;
+val* var93 /* : nullable MPropDef */;
+short int var94 /* : Bool */;
+int cltype95;
+int idtype96;
+const char* var_class_name97;
+var_v = p0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_34) on <var_34:ArrayIterator[MClassType]> */
-RET_LABEL203:(void)0;
+{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
+var2 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
-var204 = NULL;
-if (var_superprop == NULL) {
-var205 = 1; /* is null */
+var_anchor = var;
+if (var_anchor == NULL) {
+var3 = 0; /* is null */
 } else {
-var205 = 0; /* arg is null but recv is not */
+var3 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_superprop,var204) on <var_superprop:nullable MMethodDef> */
-var_other61 = var204;
+{ /* Inline kernel#Object#!= (var_anchor,((val*)NULL)) on <var_anchor:nullable MClassType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_superprop,var_other61) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var210 = var_superprop == var_other61;
-var208 = var210;
-goto RET_LABEL209;
-RET_LABEL209:(void)0;
+var6 = ((short int(*)(val* self, val* p0))(var_anchor->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_anchor, var_other); /* == on <var_anchor:nullable MClassType(MClassType)>*/
 }
+var7 = !var6;
+var4 = var7;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
 }
-var206 = var208;
-goto RET_LABEL207;
-RET_LABEL207:(void)0;
+var3 = var4;
 }
-var205 = var206;
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1822);
+fatal_exit(1);
 }
-if (var205){
-if (varonce211) {
-var212 = varonce211;
-} else {
-var213 = "Error: No super method to call for ";
-var214 = 35;
-var215 = standard___standard__NativeString___to_s_with_length(var213, var214);
-var212 = var215;
-varonce211 = var212;
+{
+{ /* Inline typing#TypeVisitor#selfvariable (var_v) on <var_v:TypeVisitor> */
+var10 = var_v->attrs[COLOR_nit__typing__TypeVisitor___selfvariable].val; /* _selfvariable on <var_v:TypeVisitor> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _selfvariable");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 50);
+fatal_exit(1);
+}
+var8 = var10;
+RET_LABEL9:(void)0;
 }
-if (varonce216) {
-var217 = varonce216;
-} else {
-var218 = ".";
-var219 = 1;
-var220 = standard___standard__NativeString___to_s_with_length(var218, var219);
-var217 = var220;
-varonce216 = var217;
 }
-var221 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var221 = array_instance Array[Object] */
-var222 = 3;
-var223 = NEW_standard__NativeArray(var222, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var223)->values[0] = (val*) var212;
-((struct instance_standard__NativeArray*)var223)->values[1] = (val*) var_mproperty;
-((struct instance_standard__NativeArray*)var223)->values[2] = (val*) var217;
 {
-((void (*)(val* self, val* p0, long p1))(var221->class->vft[COLOR_standard__array__Array__with_native]))(var221, var223, var222) /* with_native on <var221:Array[Object]>*/;
+var11 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var8);
 }
+var_recvtype = var11;
+if (var_recvtype == NULL) {
+var12 = 0; /* is null */
+} else {
+var12 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_recvtype,((val*)NULL)) on <var_recvtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-var224 = ((val* (*)(val* self))(var221->class->vft[COLOR_standard__string__Object__to_s]))(var221) /* to_s on <var221:Array[Object]>*/;
+var15 = ((short int(*)(val* self, val* p0))(var_recvtype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_recvtype, var_other); /* == on <var_recvtype:nullable MType(MType)>*/
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var224); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var16 = !var15;
+var13 = var16;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
-goto RET_LABEL;
-} else {
+var12 = var13;
+}
+if (unlikely(!var12)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1824);
+fatal_exit(1);
 }
 {
-{ /* Inline model#MMethodDef#new_msignature (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var228 = var_superprop->attrs[COLOR_nit__model__MMethodDef___new_msignature].val; /* _new_msignature on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var226 = var228;
-RET_LABEL227:(void)0;
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var19 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var17 = var19;
+RET_LABEL18:(void)0;
 }
 }
-if (var226!=NULL) {
-var225 = var226;
+if (var17 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1825);
+fatal_exit(1);
 } else {
-{
-{ /* Inline model#MMethodDef#msignature (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var231 = var_superprop->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var229 = var231;
-RET_LABEL230:(void)0;
+{ /* Inline model#MPropDef#mproperty (var17) on <var17:nullable MPropDef> */
+if (unlikely(var17 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
+var22 = var17->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var17:nullable MPropDef> */
+if (unlikely(var22 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
-if (unlikely(var229 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1695);
-show_backtrace(1);
+var20 = var22;
+RET_LABEL21:(void)0;
 }
-var225 = var229;
 }
-var_msignature = var225;
-var232 = 1;
-{
-var233 = nit__typing___nit__typing__TypeVisitor___resolve_for(var_v, var_msignature, var_recvtype, var232);
+var_mproperty = var20;
+/* <var_mproperty:MProperty> isa MMethod */
+cltype = type_nit__MMethod.color;
+idtype = type_nit__MMethod.id;
+if(cltype >= var_mproperty->type->table_size) {
+var23 = 0;
+} else {
+var23 = var_mproperty->type->type_table[cltype] == idtype;
 }
-/* <var233:MType> isa MSignature */
-cltype235 = type_nit__MSignature.color;
-idtype236 = type_nit__MSignature.id;
-if(cltype235 >= var233->type->table_size) {
-var234 = 0;
+var24 = !var23;
+if (var24){
+if (likely(varonce!=NULL)) {
+var25 = varonce;
 } else {
-var234 = var233->type->type_table[cltype235] == idtype236;
+var26 = "Error: `super` only usable in a `method`.";
+var27 = standard___standard__NativeString___to_s_with_length(var26, 41l);
+var25 = var27;
+varonce = var25;
+}
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var25); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-if (unlikely(!var234)) {
-var_class_name237 = var233 == NULL ? "null" : var233->type->name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MSignature", var_class_name237);
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1696);
-show_backtrace(1);
+goto RET_LABEL;
+} else {
 }
-var_msignature = var233;
-var238 = NEW_nit__CallSite(&type_nit__CallSite);
 {
 { /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var241 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var241 == NULL)) {
+var30 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var30 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
 PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+fatal_exit(1);
 }
-var239 = var241;
-RET_LABEL240:(void)0;
+var28 = var30;
+RET_LABEL29:(void)0;
 }
 }
 {
-{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
-var244 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
-var242 = var244;
-RET_LABEL243:(void)0;
+var31 = nit___nit__MProperty___lookup_super_definitions(var_mproperty, var28, var_anchor);
 }
-}
-var245 = 1;
+var_superprops = var31;
 {
-{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
-var248 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
-if (unlikely(var248 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2013);
-show_backtrace(1);
-}
-var246 = var248;
-RET_LABEL247:(void)0;
+{ /* Inline array#AbstractArrayRead#length (var_superprops) on <var_superprops:Array[MMethodDef]> */
+var34 = var_superprops->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_superprops:Array[MMethodDef]> */
+var32 = var34;
+RET_LABEL33:(void)0;
 }
 }
-var249 = 0;
 {
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__node_61d]))(var238, self) /* node= on <var238:CallSite>*/;
+{ /* Inline kernel#Int#== (var32,0l) on <var32:Int> */
+var37 = var32 == 0l;
+var35 = var37;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
 }
-{
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__recv_61d]))(var238, var_recvtype) /* recv= on <var238:CallSite>*/;
 }
+if (var35){
 {
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__mmodule_61d]))(var238, var239) /* mmodule= on <var238:CallSite>*/;
+{ /* Inline model#MMethod#is_init (var_mproperty) on <var_mproperty:MProperty(MMethod)> */
+var41 = var_mproperty->attrs[COLOR_nit__model__MMethod___is_init].s; /* _is_init on <var_mproperty:MProperty(MMethod)> */
+var39 = var41;
+RET_LABEL40:(void)0;
 }
+}
+var_ = var39;
+if (var39){
 {
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__anchor_61d]))(var238, var242) /* anchor= on <var238:CallSite>*/;
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var44 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var42 = var44;
+RET_LABEL43:(void)0;
+}
+}
+if (var42 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1832);
+fatal_exit(1);
+} else {
+var45 = nit___nit__MPropDef___is_intro(var42);
+}
+var38 = var45;
+} else {
+var38 = var_;
 }
+if (var38){
 {
-((void (*)(val* self, short int p0))(var238->class->vft[COLOR_nit__typing__CallSite__recv_is_self_61d]))(var238, var245) /* recv_is_self= on <var238:CallSite>*/;
+nit__typing___ASuperExpr___process_superinit(self, var_v); /* Direct call typing#ASuperExpr#process_superinit on <self:ASuperExpr>*/
+}
+goto RET_LABEL;
+} else {
+}
+if (unlikely(varonce46==NULL)) {
+var47 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce48!=NULL)) {
+var49 = varonce48;
+} else {
+var50 = "Error: no super method to call for `";
+var51 = standard___standard__NativeString___to_s_with_length(var50, 36l);
+var49 = var51;
+varonce48 = var49;
+}
+((struct instance_standard__NativeArray*)var47)->values[0]=var49;
+if (likely(varonce52!=NULL)) {
+var53 = varonce52;
+} else {
+var54 = "`.";
+var55 = standard___standard__NativeString___to_s_with_length(var54, 2l);
+var53 = var55;
+varonce52 = var53;
+}
+((struct instance_standard__NativeArray*)var47)->values[2]=var53;
+} else {
+var47 = varonce46;
+varonce46 = NULL;
 }
 {
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__mproperty_61d]))(var238, var246) /* mproperty= on <var238:CallSite>*/;
+var56 = ((val*(*)(val* self))(var_mproperty->class->vft[COLOR_standard__string__Object__to_s]))(var_mproperty); /* to_s on <var_mproperty:MProperty(MMethod)>*/
 }
+((struct instance_standard__NativeArray*)var47)->values[1]=var56;
 {
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__mpropdef_61d]))(var238, var_superprop) /* mpropdef= on <var238:CallSite>*/;
+var57 = ((val*(*)(val* self))(var47->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var47); /* native_to_s on <var47:NativeArray[String]>*/
 }
+varonce46 = var47;
 {
-((void (*)(val* self, val* p0))(var238->class->vft[COLOR_nit__typing__CallSite__msignature_61d]))(var238, var_msignature) /* msignature= on <var238:CallSite>*/;
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var57); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+}
+goto RET_LABEL;
+} else {
 }
 {
-((void (*)(val* self, short int p0))(var238->class->vft[COLOR_nit__typing__CallSite__erasure_cast_61d]))(var238, var249) /* erasure_cast= on <var238:CallSite>*/;
+var58 = standard___standard__SequenceRead___Collection__first(var_superprops);
 }
+var_superprop = var58;
 {
-((void (*)(val* self))(var238->class->vft[COLOR_standard__kernel__Object__init]))(var238) /* init on <var238:CallSite>*/;
+{ /* Inline model#MMethodDef#msignature (var_superprop) on <var_superprop:MMethodDef> */
+var61 = var_superprop->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_superprop:MMethodDef> */
+var59 = var61;
+RET_LABEL60:(void)0;
+}
+}
+if (unlikely(var59 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1842);
+fatal_exit(1);
 }
-var_callsite = var238;
+var_msignature = var59;
 {
-{ /* Inline typing#ASuperExpr#callsite= (self,var_callsite) on <self:ASuperExpr> */
-self->attrs[COLOR_nit__typing__ASuperExpr___callsite].val = var_callsite; /* _callsite on <self:ASuperExpr> */
-RET_LABEL250:(void)0;
+var62 = nit__typing___nit__typing__TypeVisitor___resolve_for(var_v, var_msignature, var_recvtype, 1);
 }
+/* <var62:MType> isa MSignature */
+cltype64 = type_nit__MSignature.color;
+idtype65 = type_nit__MSignature.id;
+if(cltype64 >= var62->type->table_size) {
+var63 = 0;
+} else {
+var63 = var62->type->type_table[cltype64] == idtype65;
+}
+if (unlikely(!var63)) {
+var_class_name = var62 == NULL ? "null" : var62->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MSignature", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1843);
+fatal_exit(1);
 }
+var_msignature = var62;
 {
 { /* Inline parser_nodes#ASuperExpr#n_args (self) on <self:ASuperExpr> */
-var253 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val; /* _n_args on <self:ASuperExpr> */
-if (unlikely(var253 == NULL)) {
+var68 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val; /* _n_args on <self:ASuperExpr> */
+if (unlikely(var68 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2051);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2344);
+fatal_exit(1);
 }
-var251 = var253;
-RET_LABEL252:(void)0;
+var66 = var68;
+RET_LABEL67:(void)0;
 }
 }
 {
-var254 = nit__typing___AExprs___to_a(var251);
+var69 = nit__typing___AExprs___to_a(var66);
 }
-var_args = var254;
+var_args = var69;
 {
 { /* Inline array#AbstractArrayRead#length (var_args) on <var_args:Array[AExpr]> */
-var257 = var_args->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_args:Array[AExpr]> */
-var255 = var257;
-RET_LABEL256:(void)0;
+var72 = var_args->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_args:Array[AExpr]> */
+var70 = var72;
+RET_LABEL71:(void)0;
 }
 }
-var258 = 0;
 {
-{ /* Inline kernel#Int#> (var255,var258) on <var255:Int> */
-/* Covariant cast for argument 0 (i) <var258:Int> isa OTHER */
-/* <var258:Int> isa OTHER */
-var261 = 1; /* easy <var258:Int> isa OTHER*/
-if (unlikely(!var261)) {
-var_class_name264 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name264);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 412);
-show_backtrace(1);
+{ /* Inline kernel#Int#> (var70,0l) on <var70:Int> */
+/* Covariant cast for argument 0 (i) <0l:Int> isa OTHER */
+/* <0l:Int> isa OTHER */
+var75 = 1; /* easy <0l:Int> isa OTHER*/
+if (unlikely(!var75)) {
+var_class_name78 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name78);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 536);
+fatal_exit(1);
 }
-var265 = var255 > var258;
-var259 = var265;
-goto RET_LABEL260;
-RET_LABEL260:(void)0;
+var79 = var70 > 0l;
+var73 = var79;
+goto RET_LABEL74;
+RET_LABEL74:(void)0;
 }
 }
-if (var259){
+if (var73){
 {
-var266 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
+var80 = nit__typing___nit__typing__TypeVisitor___check_signature(var_v, self, var_args, var_mproperty, var_msignature);
 }
-} else {
 {
-{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var269 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var267 = var269;
-RET_LABEL268:(void)0;
+{ /* Inline typing#ASuperExpr#signaturemap= (self,var80) on <self:ASuperExpr> */
+self->attrs[COLOR_nit__typing__ASuperExpr___signaturemap].val = var80; /* _signaturemap on <self:ASuperExpr> */
+RET_LABEL81:(void)0;
 }
 }
-if (var267 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1706);
-show_backtrace(1);
 } else {
-var270 = nit___nit__MSignature___arity(var267);
 }
 {
-var271 = nit___nit__MSignature___arity(var_msignature);
+{ /* Inline model#MSignature#return_mtype (var_msignature) on <var_msignature:MSignature> */
+var84 = var_msignature->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var_msignature:MSignature> */
+var82 = var84;
+RET_LABEL83:(void)0;
+}
 }
 {
-{ /* Inline kernel#Int#< (var270,var271) on <var270:Int> */
-/* Covariant cast for argument 0 (i) <var271:Int> isa OTHER */
-/* <var271:Int> isa OTHER */
-var274 = 1; /* easy <var271:Int> isa OTHER*/
-if (unlikely(!var274)) {
-var_class_name277 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name277);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 410);
-show_backtrace(1);
+{ /* Inline typing#AExpr#mtype= (self,var82) on <self:ASuperExpr> */
+self->attrs[COLOR_nit__typing__AExpr___mtype].val = var82; /* _mtype on <self:ASuperExpr> */
+RET_LABEL85:(void)0;
 }
-var278 = var270 < var271;
-var272 = var278;
-goto RET_LABEL273;
-RET_LABEL273:(void)0;
 }
+{
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ASuperExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ASuperExpr> */
+RET_LABEL86:(void)0;
 }
-if (var272){
-if (varonce279) {
-var280 = varonce279;
-} else {
-var281 = "Error: Not enough implicit arguments to pass. Got ";
-var282 = 50;
-var283 = standard___standard__NativeString___to_s_with_length(var281, var282);
-var280 = var283;
-varonce279 = var280;
 }
 {
-{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var286 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var284 = var286;
-RET_LABEL285:(void)0;
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var89 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var87 = var89;
+RET_LABEL88:(void)0;
 }
 }
-if (var284 == NULL) {
+if (var87 == NULL) {
 PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1707);
-show_backtrace(1);
-} else {
-var287 = nit___nit__MSignature___arity(var284);
-}
-if (varonce288) {
-var289 = varonce288;
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1850);
+fatal_exit(1);
 } else {
-var290 = ", expected at least ";
-var291 = 20;
-var292 = standard___standard__NativeString___to_s_with_length(var290, var291);
-var289 = var292;
-varonce288 = var289;
+{ /* Inline modelize_property#MPropDef#has_supercall= (var87,1) on <var87:nullable MPropDef> */
+if (unlikely(var87 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelize_property, 482);
+fatal_exit(1);
 }
-{
-var293 = nit___nit__MSignature___arity(var_msignature);
+var87->attrs[COLOR_nit__modelize_property__MPropDef___has_supercall].s = 1; /* _has_supercall on <var87:nullable MPropDef> */
+RET_LABEL90:(void)0;
 }
-if (varonce294) {
-var295 = varonce294;
-} else {
-var296 = ". Signature is ";
-var297 = 15;
-var298 = standard___standard__NativeString___to_s_with_length(var296, var297);
-var295 = var298;
-varonce294 = var295;
 }
-var299 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var299 = array_instance Array[Object] */
-var300 = 6;
-var301 = NEW_standard__NativeArray(var300, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var301)->values[0] = (val*) var280;
-var302 = BOX_standard__Int(var287); /* autobox from Int to Object */
-((struct instance_standard__NativeArray*)var301)->values[1] = (val*) var302;
-((struct instance_standard__NativeArray*)var301)->values[2] = (val*) var289;
-var303 = BOX_standard__Int(var293); /* autobox from Int to Object */
-((struct instance_standard__NativeArray*)var301)->values[3] = (val*) var303;
-((struct instance_standard__NativeArray*)var301)->values[4] = (val*) var295;
-((struct instance_standard__NativeArray*)var301)->values[5] = (val*) var_msignature;
 {
-((void (*)(val* self, val* p0, long p1))(var299->class->vft[COLOR_standard__array__Array__with_native]))(var299, var301, var300) /* with_native on <var299:Array[Object]>*/;
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var93 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var91 = var93;
+RET_LABEL92:(void)0;
 }
 }
-{
-var304 = ((val* (*)(val* self))(var299->class->vft[COLOR_standard__string__Object__to_s]))(var299) /* to_s on <var299:Array[Object]>*/;
+/* <var91:nullable MPropDef> isa MMethodDef */
+cltype95 = type_nit__MMethodDef.color;
+idtype96 = type_nit__MMethodDef.id;
+if(var91 == NULL) {
+var94 = 0;
+} else {
+if(cltype95 >= var91->type->table_size) {
+var94 = 0;
+} else {
+var94 = var91->type->type_table[cltype95] == idtype96;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var304); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
-} else {
+if (unlikely(!var94)) {
+var_class_name97 = var91 == NULL ? "null" : var91->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MMethodDef", var_class_name97);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1851);
+fatal_exit(1);
 }
-var305 = 0;
-var_i = var305;
 {
-{ /* Inline model#MSignature#mparameters (var_msignature) on <var_msignature:MSignature> */
-var308 = var_msignature->attrs[COLOR_nit__model__MSignature___mparameters].val; /* _mparameters on <var_msignature:MSignature> */
-if (unlikely(var308 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1592);
-show_backtrace(1);
-}
-var306 = var308;
-RET_LABEL307:(void)0;
+{ /* Inline typing#ASuperExpr#mpropdef= (self,var91) on <self:ASuperExpr> */
+self->attrs[COLOR_nit__typing__ASuperExpr___mpropdef].val = var91; /* _mpropdef on <self:ASuperExpr> */
+RET_LABEL98:(void)0;
 }
 }
-var_309 = var306;
-{
-var310 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_309);
+RET_LABEL:;
 }
-var_311 = var310;
-for(;;) {
-{
-var312 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_311);
+/* method typing#ASuperExpr#signaturemap for (self: ASuperExpr): nullable SignatureMap */
+val* nit__typing___ASuperExpr___signaturemap(val* self) {
+val* var /* : nullable SignatureMap */;
+val* var1 /* : nullable SignatureMap */;
+var1 = self->attrs[COLOR_nit__typing__ASuperExpr___signaturemap].val; /* _signaturemap on <self:ASuperExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
-if (var312){
-{
-var313 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_311);
+/* method typing#ASuperExpr#signaturemap= for (self: ASuperExpr, nullable SignatureMap) */
+void nit__typing___ASuperExpr___signaturemap_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ASuperExpr___signaturemap].val = p0; /* _signaturemap on <self:ASuperExpr> */
+RET_LABEL:;
 }
-var_sp = var313;
+/* method typing#ASuperExpr#process_superinit for (self: ASuperExpr, TypeVisitor) */
+void nit__typing___ASuperExpr___process_superinit(val* self, val* p0) {
+val* var_v /* var v: TypeVisitor */;
+val* var /* : nullable MClassType */;
+val* var2 /* : nullable MClassType */;
+val* var_anchor /* var anchor: nullable MClassType */;
+short int var3 /* : Bool */;
+short int var4 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var6 /* : Bool */;
+short int var7 /* : Bool */;
+val* var8 /* : Variable */;
+val* var10 /* : Variable */;
+val* var11 /* : nullable MType */;
+val* var_recvtype /* var recvtype: nullable MType */;
+short int var12 /* : Bool */;
+short int var13 /* : Bool */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+val* var17 /* : nullable MPropDef */;
+val* var19 /* : nullable MPropDef */;
+val* var_mpropdef /* var mpropdef: nullable MPropDef */;
+short int var20 /* : Bool */;
+int cltype;
+int idtype;
+val* var21 /* : MProperty */;
+val* var23 /* : MProperty */;
+val* var_mproperty /* var mproperty: MMethod */;
+val* var_superprop /* var superprop: nullable MMethodDef */;
+val* var24 /* : MClassDef */;
+val* var26 /* : MClassDef */;
+val* var27 /* : Array[MClassType] */;
+val* var29 /* : Array[MClassType] */;
+val* var_ /* var : Array[MClassType] */;
+val* var30 /* : ArrayIterator[nullable Object] */;
+val* var_31 /* var : ArrayIterator[MClassType] */;
+short int var32 /* : Bool */;
+val* var33 /* : nullable Object */;
+val* var_msupertype /* var msupertype: MClassType */;
+val* var34 /* : MModule */;
+val* var36 /* : MModule */;
+val* var37 /* : MClassType */;
+val* var38 /* : ModelBuilder */;
+val* var40 /* : ModelBuilder */;
+val* var41 /* : ToolContext */;
+val* var43 /* : ToolContext */;
+long var44 /* : Int */;
+long var46 /* : Int */;
+long var_errcount /* var errcount: Int */;
+val* var47 /* : String */;
+val* var49 /* : String */;
+val* var50 /* : nullable MProperty */;
+short int var51 /* : Bool */;
+int cltype52;
+int idtype53;
+const char* var_class_name;
+val* var_candidate /* var candidate: nullable MMethod */;
+short int var54 /* : Bool */;
+short int var55 /* : Bool */;
+val* var_other57 /* var other: nullable Object */;
+short int var58 /* : Bool */;
+short int var60 /* : Bool */;
+val* var61 /* : ModelBuilder */;
+val* var63 /* : ModelBuilder */;
+val* var64 /* : ToolContext */;
+val* var66 /* : ToolContext */;
+long var67 /* : Int */;
+long var69 /* : Int */;
+short int var70 /* : Bool */;
+short int var72 /* : Bool */;
+int cltype73;
+int idtype74;
+const char* var_class_name75;
+short int var76 /* : Bool */;
+short int var77 /* : Bool */;
+short int var78 /* : Bool */;
+short int var79 /* : Bool */;
+short int var81 /* : Bool */;
+short int var82 /* : Bool */;
+short int var_83 /* var : Bool */;
+short int var84 /* : Bool */;
+short int var86 /* : Bool */;
+short int var87 /* : Bool */;
+short int var88 /* : Bool */;
+short int var89 /* : Bool */;
+short int var90 /* : Bool */;
+short int var92 /* : Bool */;
+short int var93 /* : Bool */;
+short int var_94 /* var : Bool */;
+val* var95 /* : MProperty */;
+val* var97 /* : MProperty */;
+short int var98 /* : Bool */;
+short int var100 /* : Bool */;
+short int var101 /* : Bool */;
+short int var_102 /* var : Bool */;
+val* var103 /* : MProperty */;
+val* var105 /* : MProperty */;
+short int var106 /* : Bool */;
+short int var108 /* : Bool */;
+short int var109 /* : Bool */;
+val* var110 /* : NativeArray[String] */;
+static val* varonce;
+static val* varonce111;
+val* var112 /* : String */;
+char* var113 /* : NativeString */;
+val* var114 /* : FlatString */;
+static val* varonce115;
+val* var116 /* : String */;
+char* var117 /* : NativeString */;
+val* var118 /* : FlatString */;
+static val* varonce119;
+val* var120 /* : String */;
+char* var121 /* : NativeString */;
+val* var122 /* : FlatString */;
+static val* varonce123;
+val* var124 /* : String */;
+char* var125 /* : NativeString */;
+val* var126 /* : FlatString */;
+val* var127 /* : String */;
+val* var128 /* : String */;
+val* var129 /* : MProperty */;
+val* var131 /* : MProperty */;
+val* var132 /* : String */;
+val* var133 /* : String */;
+val* var134 /* : MModule */;
+val* var136 /* : MModule */;
+val* var137 /* : Array[MPropDef] */;
+val* var_candidatedefs /* var candidatedefs: Array[MMethodDef] */;
+short int var138 /* : Bool */;
+short int var139 /* : Bool */;
+short int var140 /* : Bool */;
+short int var142 /* : Bool */;
+short int var143 /* : Bool */;
+short int var_144 /* var : Bool */;
+val* var145 /* : MProperty */;
+val* var147 /* : MProperty */;
+short int var148 /* : Bool */;
+short int var150 /* : Bool */;
+short int var152 /* : Bool */;
+val* var153 /* : nullable Object */;
+short int var154 /* : Bool */;
+short int var156 /* : Bool */;
+short int var158 /* : Bool */;
+long var159 /* : Int */;
+long var161 /* : Int */;
+short int var162 /* : Bool */;
+short int var164 /* : Bool */;
+int cltype165;
+int idtype166;
+const char* var_class_name167;
+short int var168 /* : Bool */;
+val* var170 /* : NativeArray[String] */;
+static val* varonce169;
+static val* varonce171;
+val* var172 /* : String */;
+char* var173 /* : NativeString */;
+val* var174 /* : FlatString */;
+static val* varonce175;
+val* var176 /* : String */;
+char* var177 /* : NativeString */;
+val* var178 /* : FlatString */;
+static val* varonce179;
+val* var180 /* : String */;
+char* var181 /* : NativeString */;
+val* var182 /* : FlatString */;
+val* var183 /* : String */;
+val* var184 /* : String */;
+static val* varonce185;
+val* var186 /* : String */;
+char* var187 /* : NativeString */;
+val* var188 /* : FlatString */;
+val* var189 /* : String */;
+val* var190 /* : String */;
+val* var191 /* : nullable Object */;
+short int var193 /* : Bool */;
+short int var194 /* : Bool */;
+short int var196 /* : Bool */;
+short int var198 /* : Bool */;
+val* var200 /* : NativeArray[String] */;
+static val* varonce199;
+static val* varonce201;
+val* var202 /* : String */;
+char* var203 /* : NativeString */;
+val* var204 /* : FlatString */;
+static val* varonce205;
+val* var206 /* : String */;
+char* var207 /* : NativeString */;
+val* var208 /* : FlatString */;
+val* var209 /* : String */;
+val* var210 /* : String */;
+val* var211 /* : MSignature */;
+val* var212 /* : nullable MSignature */;
+val* var214 /* : nullable MSignature */;
+val* var215 /* : nullable MSignature */;
+val* var217 /* : nullable MSignature */;
+val* var_msignature /* var msignature: MSignature */;
+val* var218 /* : MType */;
+short int var219 /* : Bool */;
+int cltype220;
+int idtype221;
+const char* var_class_name222;
+val* var223 /* : CallSite */;
+val* var224 /* : MModule */;
+val* var226 /* : MModule */;
+val* var227 /* : nullable MClassType */;
+val* var229 /* : nullable MClassType */;
+val* var230 /* : MProperty */;
+val* var232 /* : MProperty */;
+val* var_callsite /* var callsite: CallSite */;
+val* var234 /* : AExprs */;
+val* var236 /* : AExprs */;
+val* var237 /* : Array[AExpr] */;
+val* var_args /* var args: Array[AExpr] */;
+long var238 /* : Int */;
+long var240 /* : Int */;
+short int var241 /* : Bool */;
+short int var243 /* : Bool */;
+int cltype244;
+int idtype245;
+const char* var_class_name246;
+short int var247 /* : Bool */;
+short int var248 /* : Bool */;
+val* var249 /* : nullable MSignature */;
+val* var251 /* : nullable MSignature */;
+long var252 /* : Int */;
+long var253 /* : Int */;
+short int var254 /* : Bool */;
+short int var256 /* : Bool */;
+int cltype257;
+int idtype258;
+const char* var_class_name259;
+short int var260 /* : Bool */;
+val* var262 /* : NativeArray[String] */;
+static val* varonce261;
+static val* varonce263;
+val* var264 /* : String */;
+char* var265 /* : NativeString */;
+val* var266 /* : FlatString */;
+static val* varonce267;
+val* var268 /* : String */;
+char* var269 /* : NativeString */;
+val* var270 /* : FlatString */;
+static val* varonce271;
+val* var272 /* : String */;
+char* var273 /* : NativeString */;
+val* var274 /* : FlatString */;
+static val* varonce275;
+val* var276 /* : String */;
+char* var277 /* : NativeString */;
+val* var278 /* : FlatString */;
+val* var279 /* : nullable MSignature */;
+val* var281 /* : nullable MSignature */;
+long var282 /* : Int */;
+val* var283 /* : String */;
+long var284 /* : Int */;
+val* var285 /* : String */;
+val* var286 /* : String */;
+val* var287 /* : String */;
+long var_i /* var i: Int */;
+val* var288 /* : Array[MParameter] */;
+val* var290 /* : Array[MParameter] */;
+val* var_291 /* var : Array[MParameter] */;
+val* var292 /* : ArrayIterator[nullable Object] */;
+val* var_293 /* var : ArrayIterator[MParameter] */;
+short int var294 /* : Bool */;
+val* var295 /* : nullable Object */;
+val* var_sp /* var sp: MParameter */;
+val* var296 /* : nullable MSignature */;
+val* var298 /* : nullable MSignature */;
+val* var299 /* : Array[MParameter] */;
+val* var301 /* : Array[MParameter] */;
+val* var302 /* : nullable Object */;
+val* var_p /* var p: MParameter */;
+val* var303 /* : MType */;
+val* var305 /* : MType */;
+val* var306 /* : MType */;
+val* var308 /* : MType */;
+short int var309 /* : Bool */;
+short int var310 /* : Bool */;
+val* var312 /* : NativeArray[String] */;
+static val* varonce311;
+static val* varonce313;
+val* var314 /* : String */;
+char* var315 /* : NativeString */;
+val* var316 /* : FlatString */;
+static val* varonce317;
+val* var318 /* : String */;
+char* var319 /* : NativeString */;
+val* var320 /* : FlatString */;
+static val* varonce321;
+val* var322 /* : String */;
+char* var323 /* : NativeString */;
+val* var324 /* : FlatString */;
+static val* varonce325;
+val* var326 /* : String */;
+char* var327 /* : NativeString */;
+val* var328 /* : FlatString */;
+static val* varonce329;
+val* var330 /* : String */;
+char* var331 /* : NativeString */;
+val* var332 /* : FlatString */;
+val* var333 /* : String */;
+val* var334 /* : MType */;
+val* var336 /* : MType */;
+val* var337 /* : String */;
+val* var338 /* : String */;
+val* var340 /* : String */;
+val* var341 /* : MType */;
+val* var343 /* : MType */;
+val* var344 /* : String */;
+val* var345 /* : String */;
+val* var346 /* : String */;
+long var347 /* : Int */;
+short int var349 /* : Bool */;
+int cltype350;
+int idtype351;
+const char* var_class_name352;
+long var353 /* : Int */;
+var_v = p0;
 {
-{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var316 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
-var314 = var316;
-RET_LABEL315:(void)0;
+{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
+var2 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
+var = var2;
+RET_LABEL1:(void)0;
 }
 }
-if (var314 == NULL) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1713);
-show_backtrace(1);
+var_anchor = var;
+if (var_anchor == NULL) {
+var3 = 0; /* is null */
 } else {
-{ /* Inline model#MSignature#mparameters (var314) on <var314:nullable MSignature> */
-if (unlikely(var314 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Receiver is null");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1592);
-show_backtrace(1);
-}
-var319 = var314->attrs[COLOR_nit__model__MSignature___mparameters].val; /* _mparameters on <var314:nullable MSignature> */
-if (unlikely(var319 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1592);
-show_backtrace(1);
-}
-var317 = var319;
-RET_LABEL318:(void)0;
-}
+var3 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_anchor,((val*)NULL)) on <var_anchor:nullable MClassType> */
+var_other = ((val*)NULL);
 {
-var320 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var317, var_i);
+var6 = ((short int(*)(val* self, val* p0))(var_anchor->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_anchor, var_other); /* == on <var_anchor:nullable MClassType(MClassType)>*/
 }
-var_p = var320;
-{
-{ /* Inline model#MParameter#mtype (var_p) on <var_p:MParameter> */
-var323 = var_p->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_p:MParameter> */
-if (unlikely(var323 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1690);
-show_backtrace(1);
+var7 = !var6;
+var4 = var7;
+goto RET_LABEL5;
+RET_LABEL5:(void)0;
 }
-var321 = var323;
-RET_LABEL322:(void)0;
+var3 = var4;
 }
+if (unlikely(!var3)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1861);
+fatal_exit(1);
 }
 {
-{ /* Inline model#MParameter#mtype (var_sp) on <var_sp:MParameter> */
-var326 = var_sp->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_sp:MParameter> */
-if (unlikely(var326 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1690);
-show_backtrace(1);
+{ /* Inline typing#TypeVisitor#selfvariable (var_v) on <var_v:TypeVisitor> */
+var10 = var_v->attrs[COLOR_nit__typing__TypeVisitor___selfvariable].val; /* _selfvariable on <var_v:TypeVisitor> */
+if (unlikely(var10 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _selfvariable");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 50);
+fatal_exit(1);
 }
-var324 = var326;
-RET_LABEL325:(void)0;
+var8 = var10;
+RET_LABEL9:(void)0;
 }
 }
 {
-var327 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var321, var324);
-}
-var328 = !var327;
-if (var328){
-if (varonce329) {
-var330 = varonce329;
-} else {
-var331 = "Type error: expected argument #";
-var332 = 31;
-var333 = standard___standard__NativeString___to_s_with_length(var331, var332);
-var330 = var333;
-varonce329 = var330;
+var11 = nit__typing___nit__typing__TypeVisitor___get_variable(var_v, self, var8);
 }
-if (varonce334) {
-var335 = varonce334;
+var_recvtype = var11;
+if (var_recvtype == NULL) {
+var12 = 0; /* is null */
 } else {
-var336 = " of type ";
-var337 = 9;
-var338 = standard___standard__NativeString___to_s_with_length(var336, var337);
-var335 = var338;
-varonce334 = var335;
+var12 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_recvtype,((val*)NULL)) on <var_recvtype:nullable MType> */
+var_other = ((val*)NULL);
 {
-{ /* Inline model#MParameter#mtype (var_sp) on <var_sp:MParameter> */
-var341 = var_sp->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_sp:MParameter> */
-if (unlikely(var341 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1690);
-show_backtrace(1);
+var15 = ((short int(*)(val* self, val* p0))(var_recvtype->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_recvtype, var_other); /* == on <var_recvtype:nullable MType(MType)>*/
 }
-var339 = var341;
-RET_LABEL340:(void)0;
+var16 = !var15;
+var13 = var16;
+goto RET_LABEL14;
+RET_LABEL14:(void)0;
 }
+var12 = var13;
 }
-if (varonce342) {
-var343 = varonce342;
-} else {
-var344 = ", got implicit argument ";
-var345 = 24;
-var346 = standard___standard__NativeString___to_s_with_length(var344, var345);
-var343 = var346;
-varonce342 = var343;
+if (unlikely(!var12)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1863);
+fatal_exit(1);
 }
 {
-{ /* Inline model#MParameter#name (var_p) on <var_p:MParameter> */
-var349 = var_p->attrs[COLOR_nit__model__MParameter___name].val; /* _name on <var_p:MParameter> */
-if (unlikely(var349 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1687);
-show_backtrace(1);
-}
-var347 = var349;
-RET_LABEL348:(void)0;
+{ /* Inline typing#TypeVisitor#mpropdef (var_v) on <var_v:TypeVisitor> */
+var19 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mpropdef].val; /* _mpropdef on <var_v:TypeVisitor> */
+var17 = var19;
+RET_LABEL18:(void)0;
 }
 }
-if (varonce350) {
-var351 = varonce350;
+var_mpropdef = var17;
+/* <var_mpropdef:nullable MPropDef> isa MMethodDef */
+cltype = type_nit__MMethodDef.color;
+idtype = type_nit__MMethodDef.id;
+if(var_mpropdef == NULL) {
+var20 = 0;
+} else {
+if(cltype >= var_mpropdef->type->table_size) {
+var20 = 0;
 } else {
-var352 = " of type ";
-var353 = 9;
-var354 = standard___standard__NativeString___to_s_with_length(var352, var353);
-var351 = var354;
-varonce350 = var351;
+var20 = var_mpropdef->type->type_table[cltype] == idtype;
 }
-{
-{ /* Inline model#MParameter#mtype (var_p) on <var_p:MParameter> */
-var357 = var_p->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_p:MParameter> */
-if (unlikely(var357 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1690);
-show_backtrace(1);
 }
-var355 = var357;
-RET_LABEL356:(void)0;
+if (unlikely(!var20)) {
+PRINT_ERROR("Runtime error: %s", "Assert failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1865);
+fatal_exit(1);
+}
+{
+{ /* Inline model#MPropDef#mproperty (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var23 = var_mpropdef->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+if (unlikely(var23 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
+var21 = var23;
+RET_LABEL22:(void)0;
 }
-if (varonce358) {
-var359 = varonce358;
-} else {
-var360 = ". Signature is ";
-var361 = 15;
-var362 = standard___standard__NativeString___to_s_with_length(var360, var361);
-var359 = var362;
-varonce358 = var359;
 }
-var363 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var363 = array_instance Array[Object] */
-var364 = 10;
-var365 = NEW_standard__NativeArray(var364, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var365)->values[0] = (val*) var330;
-var366 = BOX_standard__Int(var_i); /* autobox from Int to Object */
-((struct instance_standard__NativeArray*)var365)->values[1] = (val*) var366;
-((struct instance_standard__NativeArray*)var365)->values[2] = (val*) var335;
-((struct instance_standard__NativeArray*)var365)->values[3] = (val*) var339;
-((struct instance_standard__NativeArray*)var365)->values[4] = (val*) var343;
-((struct instance_standard__NativeArray*)var365)->values[5] = (val*) var347;
-((struct instance_standard__NativeArray*)var365)->values[6] = (val*) var351;
-((struct instance_standard__NativeArray*)var365)->values[7] = (val*) var355;
-((struct instance_standard__NativeArray*)var365)->values[8] = (val*) var359;
-((struct instance_standard__NativeArray*)var365)->values[9] = (val*) var_msignature;
+var_mproperty = var21;
+var_superprop = ((val*)NULL);
 {
-((void (*)(val* self, val* p0, long p1))(var363->class->vft[COLOR_standard__array__Array__with_native]))(var363, var365, var364) /* with_native on <var363:Array[Object]>*/;
+{ /* Inline model#MPropDef#mclassdef (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var26 = var_mpropdef->attrs[COLOR_nit__model__MPropDef___mclassdef].val; /* _mclassdef on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+if (unlikely(var26 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclassdef");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2209);
+fatal_exit(1);
+}
+var24 = var26;
+RET_LABEL25:(void)0;
 }
 }
 {
-var367 = ((val* (*)(val* self))(var363->class->vft[COLOR_standard__string__Object__to_s]))(var363) /* to_s on <var363:Array[Object]>*/;
+{ /* Inline model#MClassDef#supertypes (var24) on <var24:MClassDef> */
+var29 = var24->attrs[COLOR_nit__model__MClassDef___supertypes].val; /* _supertypes on <var24:MClassDef> */
+if (unlikely(var29 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _supertypes");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 627);
+fatal_exit(1);
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var367); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var27 = var29;
+RET_LABEL28:(void)0;
 }
-goto RET_LABEL;
-} else {
 }
-var368 = 1;
+var_ = var27;
 {
-{ /* Inline kernel#Int#+ (var_i,var368) on <var_i:Int> */
-/* Covariant cast for argument 0 (i) <var368:Int> isa OTHER */
-/* <var368:Int> isa OTHER */
-var371 = 1; /* easy <var368:Int> isa OTHER*/
-if (unlikely(!var371)) {
-var_class_name374 = type_standard__Int.name;
-PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name374);
-PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 413);
-show_backtrace(1);
+var30 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_);
 }
-var375 = var_i + var368;
-var369 = var375;
-goto RET_LABEL370;
-RET_LABEL370:(void)0;
+var_31 = var30;
+for(;;) {
+{
+var32 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_31);
 }
+if (var32){
+{
+var33 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_31);
 }
-var_i = var369;
+var_msupertype = var33;
 {
-standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_311); /* Direct call array#ArrayIterator#next on <var_311:ArrayIterator[MParameter]>*/
+{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
+var36 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var36 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
+fatal_exit(1);
 }
-} else {
-goto BREAK_label376;
+var34 = var36;
+RET_LABEL35:(void)0;
 }
 }
-BREAK_label376: (void)0;
 {
-{ /* Inline abstract_collection#Iterator#finish (var_311) on <var_311:ArrayIterator[MParameter]> */
-RET_LABEL377:(void)0;
+var37 = nit___nit__MClassType___MType__anchor_to(var_msupertype, var34, var_anchor);
+}
+var_msupertype = var37;
+{
+{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
+var40 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
+if (unlikely(var40 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
+fatal_exit(1);
 }
+var38 = var40;
+RET_LABEL39:(void)0;
 }
 }
-var378 = 1;
 {
-{ /* Inline typing#AExpr#is_typed= (self,var378) on <self:ASuperExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var378; /* _is_typed on <self:ASuperExpr> */
-RET_LABEL379:(void)0;
+{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (var38) on <var38:ModelBuilder> */
+var43 = var38->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <var38:ModelBuilder> */
+if (unlikely(var43 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
+fatal_exit(1);
 }
+var41 = var43;
+RET_LABEL42:(void)0;
 }
-RET_LABEL:;
 }
-/* method typing#ANewExpr#callsite for (self: ANewExpr): nullable CallSite */
-val* nit__typing___ANewExpr___callsite(val* self) {
-val* var /* : nullable CallSite */;
-val* var1 /* : nullable CallSite */;
-var1 = self->attrs[COLOR_nit__typing__ANewExpr___callsite].val; /* _callsite on <self:ANewExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+{
+{ /* Inline toolcontext#ToolContext#error_count (var41) on <var41:ToolContext> */
+var46 = var41->attrs[COLOR_nit__toolcontext__ToolContext___error_count].l; /* _error_count on <var41:ToolContext> */
+var44 = var46;
+RET_LABEL45:(void)0;
 }
-/* method typing#ANewExpr#callsite= for (self: ANewExpr, nullable CallSite) */
-void nit__typing___ANewExpr___callsite_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ANewExpr___callsite].val = p0; /* _callsite on <self:ANewExpr> */
-RET_LABEL:;
 }
-/* method typing#ANewExpr#recvtype for (self: ANewExpr): nullable MClassType */
-val* nit__typing___ANewExpr___recvtype(val* self) {
-val* var /* : nullable MClassType */;
-val* var1 /* : nullable MClassType */;
-var1 = self->attrs[COLOR_nit__typing__ANewExpr___recvtype].val; /* _recvtype on <self:ANewExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+var_errcount = var44;
+{
+{ /* Inline model#MProperty#name (var_mproperty) on <var_mproperty:MMethod> */
+var49 = var_mproperty->attrs[COLOR_nit__model__MProperty___name].val; /* _name on <var_mproperty:MMethod> */
+if (unlikely(var49 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1933);
+fatal_exit(1);
+}
+var47 = var49;
+RET_LABEL48:(void)0;
 }
-/* method typing#ANewExpr#recvtype= for (self: ANewExpr, nullable MClassType) */
-void nit__typing___ANewExpr___recvtype_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__ANewExpr___recvtype].val = p0; /* _recvtype on <self:ANewExpr> */
-RET_LABEL:;
 }
-/* method typing#ANewExpr#accept_typing for (self: ANewExpr, TypeVisitor) */
-void nit__typing___ANewExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AType */;
-val* var2 /* : AType */;
-val* var3 /* : nullable MType */;
-val* var_recvtype /* var recvtype: nullable MType */;
-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 */;
-short int var11 /* : Bool */;
-int cltype;
-int idtype;
-short int var12 /* : Bool */;
-short int var13 /* : Bool */;
-int cltype14;
-int idtype15;
-static val* varonce;
-val* var16 /* : String */;
-char* var17 /* : NativeString */;
-long var18 /* : Int */;
-val* var19 /* : FlatString */;
-static val* varonce20;
-val* var21 /* : String */;
-char* var22 /* : NativeString */;
-long var23 /* : Int */;
-val* var24 /* : FlatString */;
-val* var25 /* : Array[Object] */;
-long var26 /* : Int */;
-val* var27 /* : NativeArray[Object] */;
-val* var28 /* : String */;
-static val* varonce29;
-val* var30 /* : String */;
-char* var31 /* : NativeString */;
-long var32 /* : Int */;
-val* var33 /* : FlatString */;
-static val* varonce34;
-val* var35 /* : String */;
-char* var36 /* : NativeString */;
-long var37 /* : Int */;
-val* var38 /* : FlatString */;
-val* var39 /* : Array[Object] */;
-long var40 /* : Int */;
-val* var41 /* : NativeArray[Object] */;
-val* var42 /* : String */;
-val* var44 /* : nullable TId */;
-val* var46 /* : nullable TId */;
-val* var_nid /* var nid: nullable TId */;
-val* var47 /* : null */;
-short int var48 /* : Bool */;
-short int var49 /* : Bool */;
-val* var_other51 /* var other: nullable Object */;
-short int var52 /* : Bool */;
-short int var53 /* : Bool */;
-val* var54 /* : String */;
-val* var_name /* var name: String */;
-static val* varonce55;
-val* var56 /* : String */;
-char* var57 /* : NativeString */;
-long var58 /* : Int */;
-val* var59 /* : FlatString */;
-short int var60 /* : Bool */;
-val* var61 /* : nullable CallSite */;
-val* var_callsite /* var callsite: nullable CallSite */;
-val* var62 /* : null */;
-short int var63 /* : Bool */;
-short int var64 /* : Bool */;
-short int var66 /* : Bool */;
-short int var68 /* : Bool */;
-val* var69 /* : MMethod */;
-val* var71 /* : MMethod */;
-short int var72 /* : Bool */;
-short int var74 /* : Bool */;
-short int var75 /* : Bool */;
-val* var76 /* : MClass */;
-val* var78 /* : MClass */;
-val* var79 /* : MClassKind */;
-val* var81 /* : MClassKind */;
-val* var_kind /* var kind: MClassKind */;
-val* var82 /* : MClassKind */;
-short int var83 /* : Bool */;
-short int var85 /* : Bool */;
-short int var86 /* : Bool */;
-static val* varonce87;
-val* var88 /* : String */;
-char* var89 /* : NativeString */;
-long var90 /* : Int */;
-val* var91 /* : FlatString */;
-static val* varonce92;
-val* var93 /* : String */;
-char* var94 /* : NativeString */;
-long var95 /* : Int */;
-val* var96 /* : FlatString */;
-static val* varonce97;
-val* var98 /* : String */;
-char* var99 /* : NativeString */;
-long var100 /* : Int */;
-val* var101 /* : FlatString */;
-val* var102 /* : Array[Object] */;
-long var103 /* : Int */;
-val* var104 /* : NativeArray[Object] */;
-val* var105 /* : String */;
-val* var107 /* : MSignature */;
-val* var109 /* : MSignature */;
-val* var110 /* : nullable MType */;
-val* var112 /* : nullable MType */;
-val* var114 /* : nullable MType */;
-val* var116 /* : nullable MType */;
-val* var117 /* : null */;
-short int var118 /* : Bool */;
-short int var119 /* : Bool */;
-short int var121 /* : Bool */;
-short int var122 /* : Bool */;
-val* var124 /* : MMethod */;
-val* var126 /* : MMethod */;
-val* var127 /* : MClass */;
-val* var129 /* : MClass */;
-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 /* : Array[Object] */;
-long var143 /* : Int */;
-val* var144 /* : NativeArray[Object] */;
-val* var145 /* : String */;
-val* var146 /* : AExprs */;
-val* var148 /* : AExprs */;
-val* var149 /* : Array[AExpr] */;
-val* var_args /* var args: Array[AExpr] */;
-short int var150 /* : Bool */;
-var_v = p0;
 {
-{ /* Inline parser_nodes#ANewExpr#n_type (self) on <self:ANewExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_type].val; /* _n_type on <self:ANewExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_type");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1962);
-show_backtrace(1);
+var50 = nit__typing___nit__typing__TypeVisitor___try_get_mproperty_by_name2(var_v, self, var_msupertype, var47);
 }
-var = var2;
-RET_LABEL1:(void)0;
+/* <var50:nullable MProperty> isa nullable MMethod */
+cltype52 = type_nullable__nit__MMethod.color;
+idtype53 = type_nullable__nit__MMethod.id;
+if(var50 == NULL) {
+var51 = 1;
+} else {
+if(cltype52 >= var50->type->table_size) {
+var51 = 0;
+} else {
+var51 = var50->type->type_table[cltype52] == idtype53;
 }
 }
-{
-var3 = nit__typing___nit__typing__TypeVisitor___resolve_mtype(var_v, var);
+if (unlikely(!var51)) {
+var_class_name = var50 == NULL ? "null" : var50->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "nullable MMethod", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1871);
+fatal_exit(1);
 }
-var_recvtype = var3;
-var4 = NULL;
-if (var_recvtype == NULL) {
-var5 = 1; /* is null */
+var_candidate = var50;
+if (var_candidate == NULL) {
+var54 = 1; /* is null */
 } else {
-var5 = 0; /* arg is null but recv is not */
+var54 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_recvtype,var4) on <var_recvtype:nullable MType> */
-var_other = var4;
+{ /* Inline kernel#Object#== (var_candidate,((val*)NULL)) on <var_candidate:nullable MMethod> */
+var_other57 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_recvtype,var_other) on <var_recvtype:nullable MType(MType)> */
-var10 = var_recvtype == var_other;
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_candidate,var_other57) on <var_candidate:nullable MMethod(MMethod)> */
+var60 = var_candidate == var_other57;
+var58 = var60;
+goto RET_LABEL59;
+RET_LABEL59:(void)0;
 }
 }
-var6 = var8;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var55 = var58;
+goto RET_LABEL56;
+RET_LABEL56:(void)0;
 }
-var5 = var6;
+var54 = var55;
 }
-if (var5){
-goto RET_LABEL;
-} else {
+if (var54){
+{
+{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
+var63 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
+if (unlikely(var63 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
+fatal_exit(1);
 }
-/* <var_recvtype:nullable MType(MType)> isa MClassType */
-cltype = type_nit__MClassType.color;
-idtype = type_nit__MClassType.id;
-if(cltype >= var_recvtype->type->table_size) {
-var11 = 0;
-} else {
-var11 = var_recvtype->type->type_table[cltype] == idtype;
+var61 = var63;
+RET_LABEL62:(void)0;
 }
-var12 = !var11;
-if (var12){
-/* <var_recvtype:nullable MType(MType)> isa MNullableType */
-cltype14 = type_nit__MNullableType.color;
-idtype15 = type_nit__MNullableType.id;
-if(cltype14 >= var_recvtype->type->table_size) {
-var13 = 0;
-} else {
-var13 = var_recvtype->type->type_table[cltype14] == idtype15;
 }
-if (var13){
-if (varonce) {
-var16 = varonce;
-} else {
-var17 = "Type error: cannot instantiate the nullable type ";
-var18 = 49;
-var19 = standard___standard__NativeString___to_s_with_length(var17, var18);
-var16 = var19;
-varonce = var16;
+{
+{ /* Inline modelbuilder_base#ModelBuilder#toolcontext (var61) on <var61:ModelBuilder> */
+var66 = var61->attrs[COLOR_nit__modelbuilder_base__ModelBuilder___toolcontext].val; /* _toolcontext on <var61:ModelBuilder> */
+if (unlikely(var66 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _toolcontext");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__modelbuilder_base, 47);
+fatal_exit(1);
+}
+var64 = var66;
+RET_LABEL65:(void)0;
 }
-if (varonce20) {
-var21 = varonce20;
-} else {
-var22 = ".";
-var23 = 1;
-var24 = standard___standard__NativeString___to_s_with_length(var22, var23);
-var21 = var24;
-varonce20 = var21;
 }
-var25 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var25 = array_instance Array[Object] */
-var26 = 3;
-var27 = NEW_standard__NativeArray(var26, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var27)->values[0] = (val*) var16;
-((struct instance_standard__NativeArray*)var27)->values[1] = (val*) var_recvtype;
-((struct instance_standard__NativeArray*)var27)->values[2] = (val*) var21;
 {
-((void (*)(val* self, val* p0, long p1))(var25->class->vft[COLOR_standard__array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
+{ /* Inline toolcontext#ToolContext#error_count (var64) on <var64:ToolContext> */
+var69 = var64->attrs[COLOR_nit__toolcontext__ToolContext___error_count].l; /* _error_count on <var64:ToolContext> */
+var67 = var69;
+RET_LABEL68:(void)0;
 }
 }
 {
-var28 = ((val* (*)(val* self))(var25->class->vft[COLOR_standard__string__Object__to_s]))(var25) /* to_s on <var25:Array[Object]>*/;
+{ /* Inline kernel#Int#> (var67,var_errcount) on <var67:Int> */
+/* Covariant cast for argument 0 (i) <var_errcount:Int> isa OTHER */
+/* <var_errcount:Int> isa OTHER */
+var72 = 1; /* easy <var_errcount:Int> isa OTHER*/
+if (unlikely(!var72)) {
+var_class_name75 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name75);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 536);
+fatal_exit(1);
+}
+var76 = var67 > var_errcount;
+var70 = var76;
+goto RET_LABEL71;
+RET_LABEL71:(void)0;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var28); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+if (var70){
 goto RET_LABEL;
 } else {
-if (varonce29) {
-var30 = varonce29;
-} else {
-var31 = "Type error: cannot instantiate the formal type ";
-var32 = 47;
-var33 = standard___standard__NativeString___to_s_with_length(var31, var32);
-var30 = var33;
-varonce29 = var30;
 }
-if (varonce34) {
-var35 = varonce34;
+goto BREAK_label;
 } else {
-var36 = ".";
-var37 = 1;
-var38 = standard___standard__NativeString___to_s_with_length(var36, var37);
-var35 = var38;
-varonce34 = var35;
-}
-var39 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var39 = array_instance Array[Object] */
-var40 = 3;
-var41 = NEW_standard__NativeArray(var40, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var41)->values[0] = (val*) var30;
-((struct instance_standard__NativeArray*)var41)->values[1] = (val*) var_recvtype;
-((struct instance_standard__NativeArray*)var41)->values[2] = (val*) var35;
-{
-((void (*)(val* self, val* p0, long p1))(var39->class->vft[COLOR_standard__array__Array__with_native]))(var39, var41, var40) /* with_native on <var39:Array[Object]>*/;
-}
 }
-{
-var42 = ((val* (*)(val* self))(var39->class->vft[COLOR_standard__string__Object__to_s]))(var39) /* to_s on <var39:Array[Object]>*/;
+if (var_superprop == NULL) {
+var78 = 0; /* is null */
+} else {
+var78 = 1; /* arg is null and recv is not */
 }
+if (0) {
+{ /* Inline kernel#Object#!= (var_superprop,((val*)NULL)) on <var_superprop:nullable MMethodDef> */
+var_other = ((val*)NULL);
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var42); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var81 = ((short int(*)(val* self, val* p0))(var_superprop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_superprop, var_other); /* == on <var_superprop:nullable MMethodDef(MMethodDef)>*/
 }
-goto RET_LABEL;
+var82 = !var81;
+var79 = var82;
+goto RET_LABEL80;
+RET_LABEL80:(void)0;
 }
-} else {
+var78 = var79;
 }
+var_83 = var78;
+if (var78){
 {
-{ /* Inline typing#ANewExpr#recvtype= (self,var_recvtype) on <self:ANewExpr> */
-self->attrs[COLOR_nit__typing__ANewExpr___recvtype].val = var_recvtype; /* _recvtype on <self:ANewExpr> */
-RET_LABEL43:(void)0;
+{ /* Inline model#MMethod#is_root_init (var_candidate) on <var_candidate:nullable MMethod(MMethod)> */
+var86 = var_candidate->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var_candidate:nullable MMethod(MMethod)> */
+var84 = var86;
+RET_LABEL85:(void)0;
 }
 }
-{
-{ /* Inline parser_nodes#ANewExpr#n_id (self) on <self:ANewExpr> */
-var46 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_id].val; /* _n_id on <self:ANewExpr> */
-var44 = var46;
-RET_LABEL45:(void)0;
+var77 = var84;
+} else {
+var77 = var_83;
 }
+if (var77){
+goto BREAK_label;
+} else {
 }
-var_nid = var44;
-var47 = NULL;
-if (var_nid == NULL) {
-var48 = 0; /* is null */
+if (var_superprop == NULL) {
+var89 = 0; /* is null */
 } else {
-var48 = 1; /* arg is null and recv is not */
+var89 = 1; /* arg is null and recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#!= (var_nid,var47) on <var_nid:nullable TId> */
-var_other51 = var47;
+{ /* Inline kernel#Object#!= (var_superprop,((val*)NULL)) on <var_superprop:nullable MMethodDef> */
+var_other = ((val*)NULL);
 {
-var52 = ((short int (*)(val* self, val* p0))(var_nid->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_nid, var_other51) /* == on <var_nid:nullable TId(TId)>*/;
+var92 = ((short int(*)(val* self, val* p0))(var_superprop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_superprop, var_other); /* == on <var_superprop:nullable MMethodDef(MMethodDef)>*/
 }
-var53 = !var52;
-var49 = var53;
-goto RET_LABEL50;
-RET_LABEL50:(void)0;
+var93 = !var92;
+var90 = var93;
+goto RET_LABEL91;
+RET_LABEL91:(void)0;
 }
-var48 = var49;
+var89 = var90;
 }
-if (var48){
+var_94 = var89;
+if (var89){
 {
-var54 = nit__lexer_work___Token___text(var_nid);
+{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var97 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
+if (unlikely(var97 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
-var_name = var54;
-} else {
-if (varonce55) {
-var56 = varonce55;
-} else {
-var57 = "new";
-var58 = 3;
-var59 = standard___standard__NativeString___to_s_with_length(var57, var58);
-var56 = var59;
-varonce55 = var56;
+var95 = var97;
+RET_LABEL96:(void)0;
 }
-var_name = var56;
 }
-var60 = 0;
 {
-var61 = nit__typing___nit__typing__TypeVisitor___get_method(var_v, self, var_recvtype, var_name, var60);
-}
-var_callsite = var61;
-var62 = NULL;
-if (var_callsite == NULL) {
-var63 = 1; /* is null */
-} else {
-var63 = 0; /* arg is null but recv is not */
-}
-if (0) {
-{ /* Inline kernel#Object#== (var_callsite,var62) on <var_callsite:nullable CallSite> */
-var_other = var62;
+{ /* Inline kernel#Object#!= (var95,var_candidate) on <var95:MProperty(MMethod)> */
+var_other = var_candidate;
 {
-{ /* Inline kernel#Object#is_same_instance (var_callsite,var_other) on <var_callsite:nullable CallSite(CallSite)> */
-var68 = var_callsite == var_other;
-var66 = var68;
-goto RET_LABEL67;
-RET_LABEL67:(void)0;
+var100 = ((short int(*)(val* self, val* p0))(var95->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var95, var_other); /* == on <var95:MProperty(MMethod)>*/
 }
+var101 = !var100;
+var98 = var101;
+goto RET_LABEL99;
+RET_LABEL99:(void)0;
 }
-var64 = var66;
-goto RET_LABEL65;
-RET_LABEL65:(void)0;
-}
-var63 = var64;
 }
-if (var63){
-goto RET_LABEL;
+var88 = var98;
 } else {
+var88 = var_94;
 }
+var_102 = var88;
+if (var88){
 {
-{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var71 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var71 == NULL)) {
+{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var105 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
+if (unlikely(var105 == NULL)) {
 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 487);
-show_backtrace(1);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
-var69 = var71;
-RET_LABEL70:(void)0;
+var103 = var105;
+RET_LABEL104:(void)0;
 }
 }
 {
-{ /* Inline model#MMethod#is_new (var69) on <var69:MMethod> */
-var74 = var69->attrs[COLOR_nit__model__MMethod___is_new].s; /* _is_new on <var69:MMethod> */
-var72 = var74;
-RET_LABEL73:(void)0;
+{ /* Inline model#MMethod#is_root_init (var103) on <var103:MProperty(MMethod)> */
+var108 = var103->attrs[COLOR_nit__model__MMethod___is_root_init].s; /* _is_root_init on <var103:MProperty(MMethod)> */
+var106 = var108;
+RET_LABEL107:(void)0;
 }
 }
-var75 = !var72;
-if (var75){
-{
-{ /* Inline model#MClassType#mclass (var_recvtype) on <var_recvtype:nullable MType(MClassType)> */
-var78 = var_recvtype->attrs[COLOR_nit__model__MClassType___mclass].val; /* _mclass on <var_recvtype:nullable MType(MClassType)> */
-if (unlikely(var78 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1058);
-show_backtrace(1);
+var109 = !var106;
+var87 = var109;
+} else {
+var87 = var_102;
 }
-var76 = var78;
-RET_LABEL77:(void)0;
+if (var87){
+if (unlikely(varonce==NULL)) {
+var110 = NEW_standard__NativeArray(7l, &type_standard__NativeArray__standard__String);
+if (likely(varonce111!=NULL)) {
+var112 = varonce111;
+} else {
+var113 = "Error: conflicting super constructor to call for `";
+var114 = standard___standard__NativeString___to_s_with_length(var113, 50l);
+var112 = var114;
+varonce111 = var112;
 }
+((struct instance_standard__NativeArray*)var110)->values[0]=var112;
+if (likely(varonce115!=NULL)) {
+var116 = varonce115;
+} else {
+var117 = "`: `";
+var118 = standard___standard__NativeString___to_s_with_length(var117, 4l);
+var116 = var118;
+varonce115 = var116;
 }
-{
-{ /* Inline model#MClass#kind (var76) on <var76:MClass> */
-var81 = var76->attrs[COLOR_nit__model__MClass___kind].val; /* _kind on <var76:MClass> */
-if (unlikely(var81 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _kind");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 399);
-show_backtrace(1);
+((struct instance_standard__NativeArray*)var110)->values[2]=var116;
+if (likely(varonce119!=NULL)) {
+var120 = varonce119;
+} else {
+var121 = "`, `";
+var122 = standard___standard__NativeString___to_s_with_length(var121, 4l);
+var120 = var122;
+varonce119 = var120;
 }
-var79 = var81;
-RET_LABEL80:(void)0;
+((struct instance_standard__NativeArray*)var110)->values[4]=var120;
+if (likely(varonce123!=NULL)) {
+var124 = varonce123;
+} else {
+var125 = "`";
+var126 = standard___standard__NativeString___to_s_with_length(var125, 1l);
+var124 = var126;
+varonce123 = var124;
 }
+((struct instance_standard__NativeArray*)var110)->values[6]=var124;
+} else {
+var110 = varonce;
+varonce = NULL;
 }
-var_kind = var79;
 {
-var82 = nit__model___standard__Object___concrete_kind(self);
+var127 = ((val*(*)(val* self))(var_mproperty->class->vft[COLOR_standard__string__Object__to_s]))(var_mproperty); /* to_s on <var_mproperty:MMethod>*/
 }
+((struct instance_standard__NativeArray*)var110)->values[1]=var127;
 {
-{ /* Inline kernel#Object#!= (var_kind,var82) on <var_kind:MClassKind> */
-var_other51 = var82;
-{
-var85 = ((short int (*)(val* self, val* p0))(var_kind->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_kind, var_other51) /* == on <var_kind:MClassKind>*/;
+var128 = nit___nit__MProperty___nit__model_base__MEntity__full_name(var_candidate);
 }
-var86 = !var85;
-var83 = var86;
-goto RET_LABEL84;
-RET_LABEL84:(void)0;
+((struct instance_standard__NativeArray*)var110)->values[3]=var128;
+{
+{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var131 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
+if (unlikely(var131 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
+var129 = var131;
+RET_LABEL130:(void)0;
 }
-if (var83){
-if (varonce87) {
-var88 = varonce87;
-} else {
-var89 = "Type Error: Cannot instantiate ";
-var90 = 31;
-var91 = standard___standard__NativeString___to_s_with_length(var89, var90);
-var88 = var91;
-varonce87 = var88;
-}
-if (varonce92) {
-var93 = varonce92;
-} else {
-var94 = " ";
-var95 = 1;
-var96 = standard___standard__NativeString___to_s_with_length(var94, var95);
-var93 = var96;
-varonce92 = var93;
-}
-if (varonce97) {
-var98 = varonce97;
-} else {
-var99 = ".";
-var100 = 1;
-var101 = standard___standard__NativeString___to_s_with_length(var99, var100);
-var98 = var101;
-varonce97 = var98;
 }
-var102 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var102 = array_instance Array[Object] */
-var103 = 5;
-var104 = NEW_standard__NativeArray(var103, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var104)->values[0] = (val*) var88;
-((struct instance_standard__NativeArray*)var104)->values[1] = (val*) var_kind;
-((struct instance_standard__NativeArray*)var104)->values[2] = (val*) var93;
-((struct instance_standard__NativeArray*)var104)->values[3] = (val*) var_recvtype;
-((struct instance_standard__NativeArray*)var104)->values[4] = (val*) var98;
 {
-((void (*)(val* self, val* p0, long p1))(var102->class->vft[COLOR_standard__array__Array__with_native]))(var102, var104, var103) /* with_native on <var102:Array[Object]>*/;
-}
+var132 = nit___nit__MProperty___nit__model_base__MEntity__full_name(var129);
 }
+((struct instance_standard__NativeArray*)var110)->values[5]=var132;
 {
-var105 = ((val* (*)(val* self))(var102->class->vft[COLOR_standard__string__Object__to_s]))(var102) /* to_s on <var102:Array[Object]>*/;
+var133 = ((val*(*)(val* self))(var110->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var110); /* native_to_s on <var110:NativeArray[String]>*/
 }
+varonce = var110;
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var105); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var133); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
 goto RET_LABEL;
 } else {
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var_recvtype) on <self:ANewExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var_recvtype; /* _mtype on <self:ANewExpr> */
-RET_LABEL106:(void)0;
+{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
+var136 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var136 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
+fatal_exit(1);
+}
+var134 = var136;
+RET_LABEL135:(void)0;
+}
 }
+{
+var137 = nit___nit__MProperty___lookup_definitions(var_candidate, var134, var_anchor);
 }
+var_candidatedefs = var137;
+if (var_superprop == NULL) {
+var139 = 0; /* is null */
 } else {
+var139 = 1; /* arg is null and recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#!= (var_superprop,((val*)NULL)) on <var_superprop:nullable MMethodDef> */
+var_other = ((val*)NULL);
 {
-{ /* Inline typing#CallSite#msignature (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var109 = var_callsite->attrs[COLOR_nit__typing__CallSite___msignature].val; /* _msignature on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var109 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _msignature");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 494);
-show_backtrace(1);
+var142 = ((short int(*)(val* self, val* p0))(var_superprop->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var_superprop, var_other); /* == on <var_superprop:nullable MMethodDef(MMethodDef)>*/
 }
-var107 = var109;
-RET_LABEL108:(void)0;
+var143 = !var142;
+var140 = var143;
+goto RET_LABEL141;
+RET_LABEL141:(void)0;
 }
+var139 = var140;
 }
+var_144 = var139;
+if (var139){
 {
-{ /* Inline model#MSignature#return_mtype (var107) on <var107:MSignature> */
-var112 = var107->attrs[COLOR_nit__model__MSignature___return_mtype].val; /* _return_mtype on <var107:MSignature> */
-var110 = var112;
-RET_LABEL111:(void)0;
+{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var147 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
+if (unlikely(var147 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
+}
+var145 = var147;
+RET_LABEL146:(void)0;
 }
 }
 {
-{ /* Inline typing#AExpr#mtype= (self,var110) on <self:ANewExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var110; /* _mtype on <self:ANewExpr> */
-RET_LABEL113:(void)0;
+{ /* Inline kernel#Object#== (var145,var_candidate) on <var145:MProperty(MMethod)> */
+var_other57 = var_candidate;
+{
+{ /* Inline kernel#Object#is_same_instance (var145,var_other57) on <var145:MProperty(MMethod)> */
+var152 = var145 == var_other57;
+var150 = var152;
+goto RET_LABEL151;
+RET_LABEL151:(void)0;
 }
 }
-{
-{ /* Inline typing#AExpr#mtype (self) on <self:ANewExpr> */
-var116 = self->attrs[COLOR_nit__typing__AExpr___mtype].val; /* _mtype on <self:ANewExpr> */
-var114 = var116;
-RET_LABEL115:(void)0;
+var148 = var150;
+goto RET_LABEL149;
+RET_LABEL149:(void)0;
 }
 }
-var117 = NULL;
-if (var114 == NULL) {
-var118 = 0; /* is null */
+var138 = var148;
 } else {
-var118 = 1; /* arg is null and recv is not */
+var138 = var_144;
 }
-if (0) {
-{ /* Inline kernel#Object#!= (var114,var117) on <var114:nullable MType> */
-var_other51 = var117;
+if (var138){
 {
-var121 = ((short int (*)(val* self, val* p0))(var114->class->vft[COLOR_standard__kernel__Object___61d_61d]))(var114, var_other51) /* == on <var114:nullable MType(MType)>*/;
+var153 = standard___standard__SequenceRead___Collection__first(var_candidatedefs);
 }
-var122 = !var121;
-var119 = var122;
-goto RET_LABEL120;
-RET_LABEL120:(void)0;
+{
+{ /* Inline kernel#Object#== (var_superprop,var153) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var_other57 = var153;
+{
+{ /* Inline kernel#Object#is_same_instance (var_superprop,var_other57) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var158 = var_superprop == var_other57;
+var156 = var158;
+goto RET_LABEL157;
+RET_LABEL157:(void)0;
 }
-var118 = var119;
 }
-if (unlikely(!var118)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1771);
-show_backtrace(1);
+var154 = var156;
+goto RET_LABEL155;
+RET_LABEL155:(void)0;
 }
 }
+if (var154){
+goto BREAK_label;
+} else {
+}
 {
-{ /* Inline typing#ANewExpr#callsite= (self,var_callsite) on <self:ANewExpr> */
-self->attrs[COLOR_nit__typing__ANewExpr___callsite].val = var_callsite; /* _callsite on <self:ANewExpr> */
-RET_LABEL123:(void)0;
+standard___standard__Array___standard__abstract_collection__SimpleCollection__add(var_candidatedefs, var_superprop); /* Direct call array#Array#add on <var_candidatedefs:Array[MMethodDef]>*/
 }
+} else {
 }
 {
-{ /* Inline typing#CallSite#mproperty (var_callsite) on <var_callsite:nullable CallSite(CallSite)> */
-var126 = var_callsite->attrs[COLOR_nit__typing__CallSite___mproperty].val; /* _mproperty on <var_callsite:nullable CallSite(CallSite)> */
-if (unlikely(var126 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 487);
-show_backtrace(1);
-}
-var124 = var126;
-RET_LABEL125:(void)0;
+{ /* Inline array#AbstractArrayRead#length (var_candidatedefs) on <var_candidatedefs:Array[MMethodDef]> */
+var161 = var_candidatedefs->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_candidatedefs:Array[MMethodDef]> */
+var159 = var161;
+RET_LABEL160:(void)0;
 }
 }
 {
-{ /* Inline model#MClassType#mclass (var_recvtype) on <var_recvtype:nullable MType(MClassType)> */
-var129 = var_recvtype->attrs[COLOR_nit__model__MClassType___mclass].val; /* _mclass on <var_recvtype:nullable MType(MClassType)> */
-if (unlikely(var129 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mclass");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1058);
-show_backtrace(1);
-}
-var127 = var129;
-RET_LABEL128:(void)0;
+{ /* Inline kernel#Int#> (var159,1l) on <var159:Int> */
+/* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
+/* <1l:Int> isa OTHER */
+var164 = 1; /* easy <1l:Int> isa OTHER*/
+if (unlikely(!var164)) {
+var_class_name167 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name167);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 536);
+fatal_exit(1);
 }
+var168 = var159 > 1l;
+var162 = var168;
+goto RET_LABEL163;
+RET_LABEL163:(void)0;
 }
-{
-var130 = nit___nit__MMethod___is_init_for(var124, var127);
 }
-var131 = !var130;
-if (var131){
-if (varonce132) {
-var133 = varonce132;
+if (var162){
+if (unlikely(varonce169==NULL)) {
+var170 = NEW_standard__NativeArray(6l, &type_standard__NativeArray__standard__String);
+if (likely(varonce171!=NULL)) {
+var172 = varonce171;
 } else {
-var134 = "Error: ";
-var135 = 7;
-var136 = standard___standard__NativeString___to_s_with_length(var134, var135);
-var133 = var136;
-varonce132 = var133;
+var173 = "Error: conflicting property definitions for property `";
+var174 = standard___standard__NativeString___to_s_with_length(var173, 54l);
+var172 = var174;
+varonce171 = var172;
 }
-if (varonce137) {
-var138 = varonce137;
+((struct instance_standard__NativeArray*)var170)->values[0]=var172;
+if (likely(varonce175!=NULL)) {
+var176 = varonce175;
 } else {
-var139 = " is not a constructor.";
-var140 = 22;
-var141 = standard___standard__NativeString___to_s_with_length(var139, var140);
-var138 = var141;
-varonce137 = var138;
+var177 = "` in `";
+var178 = standard___standard__NativeString___to_s_with_length(var177, 6l);
+var176 = var178;
+varonce175 = var176;
 }
-var142 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var142 = array_instance Array[Object] */
-var143 = 3;
-var144 = NEW_standard__NativeArray(var143, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var144)->values[0] = (val*) var133;
-((struct instance_standard__NativeArray*)var144)->values[1] = (val*) var_name;
-((struct instance_standard__NativeArray*)var144)->values[2] = (val*) var138;
-{
-((void (*)(val* self, val* p0, long p1))(var142->class->vft[COLOR_standard__array__Array__with_native]))(var142, var144, var143) /* with_native on <var142:Array[Object]>*/;
+((struct instance_standard__NativeArray*)var170)->values[2]=var176;
+if (likely(varonce179!=NULL)) {
+var180 = varonce179;
+} else {
+var181 = "`: ";
+var182 = standard___standard__NativeString___to_s_with_length(var181, 3l);
+var180 = var182;
+varonce179 = var180;
 }
+((struct instance_standard__NativeArray*)var170)->values[4]=var180;
+} else {
+var170 = varonce169;
+varonce169 = NULL;
 }
 {
-var145 = ((val* (*)(val* self))(var142->class->vft[COLOR_standard__string__Object__to_s]))(var142) /* to_s on <var142:Array[Object]>*/;
+var183 = ((val*(*)(val* self))(var_mproperty->class->vft[COLOR_standard__string__Object__to_s]))(var_mproperty); /* to_s on <var_mproperty:MMethod>*/
 }
+((struct instance_standard__NativeArray*)var170)->values[1]=var183;
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var145); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+var184 = ((val*(*)(val* self))(var_recvtype->class->vft[COLOR_standard__string__Object__to_s]))(var_recvtype); /* to_s on <var_recvtype:nullable MType(MType)>*/
 }
-goto RET_LABEL;
+((struct instance_standard__NativeArray*)var170)->values[3]=var184;
+if (likely(varonce185!=NULL)) {
+var186 = varonce185;
 } else {
+var187 = ", ";
+var188 = standard___standard__NativeString___to_s_with_length(var187, 2l);
+var186 = var188;
+varonce185 = var186;
 }
 {
-{ /* Inline parser_nodes#ANewExpr#n_args (self) on <self:ANewExpr> */
-var148 = self->attrs[COLOR_nit__parser_nodes__ANewExpr___n_args].val; /* _n_args on <self:ANewExpr> */
-if (unlikely(var148 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1968);
-show_backtrace(1);
-}
-var146 = var148;
-RET_LABEL147:(void)0;
-}
+var189 = standard__string___Collection___join(var_candidatedefs, var186);
 }
+((struct instance_standard__NativeArray*)var170)->values[5]=var189;
 {
-var149 = nit__typing___AExprs___to_a(var146);
+var190 = ((val*(*)(val* self))(var170->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var170); /* native_to_s on <var170:NativeArray[String]>*/
 }
-var_args = var149;
+varonce169 = var170;
 {
-var150 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
-}
-RET_LABEL:;
-}
-/* method typing#AAttrFormExpr#mproperty for (self: AAttrFormExpr): nullable MAttribute */
-val* nit__typing___AAttrFormExpr___mproperty(val* self) {
-val* var /* : nullable MAttribute */;
-val* var1 /* : nullable MAttribute */;
-var1 = self->attrs[COLOR_nit__typing__AAttrFormExpr___mproperty].val; /* _mproperty on <self:AAttrFormExpr> */
-var = var1;
-RET_LABEL:;
-return var;
-}
-/* method typing#AAttrFormExpr#mproperty= for (self: AAttrFormExpr, nullable MAttribute) */
-void nit__typing___AAttrFormExpr___mproperty_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__AAttrFormExpr___mproperty].val = p0; /* _mproperty on <self:AAttrFormExpr> */
-RET_LABEL:;
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var190); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-/* method typing#AAttrFormExpr#attr_type for (self: AAttrFormExpr): nullable MType */
-val* nit__typing___AAttrFormExpr___attr_type(val* self) {
-val* var /* : nullable MType */;
-val* var1 /* : nullable MType */;
-var1 = self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val; /* _attr_type on <self:AAttrFormExpr> */
-var = var1;
-RET_LABEL:;
-return var;
+goto RET_LABEL;
+} else {
 }
-/* method typing#AAttrFormExpr#attr_type= for (self: AAttrFormExpr, nullable MType) */
-void nit__typing___AAttrFormExpr___attr_type_61d(val* self, val* p0) {
-self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val = p0; /* _attr_type on <self:AAttrFormExpr> */
-RET_LABEL:;
+{
+var191 = standard___standard__SequenceRead___Collection__first(var_candidatedefs);
 }
-/* method typing#AAttrFormExpr#resolve_property for (self: AAttrFormExpr, TypeVisitor) */
-void nit__typing___AAttrFormExpr___resolve_property(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : AExpr */;
-val* var2 /* : AExpr */;
-val* var3 /* : nullable MType */;
-val* var_recvtype /* var recvtype: nullable MType */;
-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 /* : TAttrid */;
-val* var13 /* : TAttrid */;
-val* var14 /* : String */;
-val* var_name /* var name: String */;
-short int var15 /* : Bool */;
-int cltype;
-int idtype;
-static val* varonce;
-val* var16 /* : String */;
-char* var17 /* : NativeString */;
-long var18 /* : Int */;
-val* var19 /* : FlatString */;
-static val* varonce20;
-val* var21 /* : String */;
-char* var22 /* : NativeString */;
-long var23 /* : Int */;
-val* var24 /* : FlatString */;
-val* var25 /* : Array[Object] */;
-long var26 /* : Int */;
-val* var27 /* : NativeArray[Object] */;
-val* var28 /* : String */;
-val* var29 /* : MType */;
-val* var_unsafe_type /* var unsafe_type: MType */;
-val* var30 /* : nullable MProperty */;
-val* var_mproperty /* var mproperty: nullable MProperty */;
-val* var31 /* : null */;
-short int var32 /* : Bool */;
-short int var33 /* : Bool */;
-short int var35 /* : Bool */;
-short int var37 /* : Bool */;
-val* var38 /* : ModelBuilder */;
-val* var40 /* : ModelBuilder */;
-static val* varonce41;
-val* var42 /* : String */;
-char* var43 /* : NativeString */;
-long var44 /* : Int */;
-val* var45 /* : FlatString */;
-static val* varonce46;
-val* var47 /* : String */;
-char* var48 /* : NativeString */;
-long var49 /* : Int */;
-val* var50 /* : FlatString */;
-static val* varonce51;
-val* var52 /* : String */;
-char* var53 /* : NativeString */;
-long var54 /* : Int */;
-val* var55 /* : FlatString */;
-val* var56 /* : Array[Object] */;
-long var57 /* : Int */;
-val* var58 /* : NativeArray[Object] */;
-val* var59 /* : String */;
-short int var60 /* : Bool */;
-int cltype61;
-int idtype62;
-val* var64 /* : MModule */;
-val* var66 /* : MModule */;
-val* var67 /* : Array[MPropDef] */;
-val* var_mpropdefs /* var mpropdefs: Array[MAttributeDef] */;
-long var68 /* : Int */;
-long var70 /* : Int */;
-long var71 /* : Int */;
-short int var72 /* : Bool */;
-short int var74 /* : Bool */;
-val* var75 /* : nullable Object */;
-val* var_mpropdef /* var mpropdef: MAttributeDef */;
-val* var76 /* : nullable MType */;
-val* var78 /* : nullable MType */;
-val* var_attr_type /* var attr_type: MType */;
-val* var79 /* : AExpr */;
-val* var81 /* : AExpr */;
-short int var82 /* : Bool */;
-int cltype83;
-int idtype84;
-val* var85 /* : MType */;
-var_v = p0;
+var_superprop = var191;
+BREAK_label: (void)0;
 {
-{ /* Inline parser_nodes#AAttrFormExpr#n_expr (self) on <self:AAttrFormExpr> */
-var2 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrFormExpr> */
-if (unlikely(var2 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1976);
-show_backtrace(1);
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_31); /* Direct call array#ArrayIterator#next on <var_31:ArrayIterator[MClassType]>*/
 }
-var = var2;
-RET_LABEL1:(void)0;
+} else {
+goto BREAK_label192;
 }
 }
+BREAK_label192: (void)0;
 {
-var3 = nit__typing___nit__typing__TypeVisitor___visit_expr(var_v, var);
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_31); /* Direct call array#ArrayIterator#finish on <var_31:ArrayIterator[MClassType]>*/
 }
-var_recvtype = var3;
-var4 = NULL;
-if (var_recvtype == NULL) {
-var5 = 1; /* is null */
+if (var_superprop == NULL) {
+var193 = 1; /* is null */
 } else {
-var5 = 0; /* arg is null but recv is not */
+var193 = 0; /* arg is null but recv is not */
 }
 if (0) {
-{ /* Inline kernel#Object#== (var_recvtype,var4) on <var_recvtype:nullable MType> */
-var_other = var4;
+{ /* Inline kernel#Object#== (var_superprop,((val*)NULL)) on <var_superprop:nullable MMethodDef> */
+var_other57 = ((val*)NULL);
 {
-{ /* Inline kernel#Object#is_same_instance (var_recvtype,var_other) on <var_recvtype:nullable MType(MType)> */
-var10 = var_recvtype == var_other;
-var8 = var10;
-goto RET_LABEL9;
-RET_LABEL9:(void)0;
+{ /* Inline kernel#Object#is_same_instance (var_superprop,var_other57) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var198 = var_superprop == var_other57;
+var196 = var198;
+goto RET_LABEL197;
+RET_LABEL197:(void)0;
 }
 }
-var6 = var8;
-goto RET_LABEL7;
-RET_LABEL7:(void)0;
+var194 = var196;
+goto RET_LABEL195;
+RET_LABEL195:(void)0;
 }
-var5 = var6;
+var193 = var194;
 }
-if (var5){
-goto RET_LABEL;
+if (var193){
+if (unlikely(varonce199==NULL)) {
+var200 = NEW_standard__NativeArray(3l, &type_standard__NativeArray__standard__String);
+if (likely(varonce201!=NULL)) {
+var202 = varonce201;
 } else {
+var203 = "Error: no super method to call for `";
+var204 = standard___standard__NativeString___to_s_with_length(var203, 36l);
+var202 = var204;
+varonce201 = var202;
 }
-{
-{ /* Inline parser_nodes#AAttrFormExpr#n_id (self) on <self:AAttrFormExpr> */
-var13 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_id].val; /* _n_id on <self:AAttrFormExpr> */
-if (unlikely(var13 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_id");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1979);
-show_backtrace(1);
-}
-var11 = var13;
-RET_LABEL12:(void)0;
+((struct instance_standard__NativeArray*)var200)->values[0]=var202;
+if (likely(varonce205!=NULL)) {
+var206 = varonce205;
+} else {
+var207 = "`.";
+var208 = standard___standard__NativeString___to_s_with_length(var207, 2l);
+var206 = var208;
+varonce205 = var206;
 }
+((struct instance_standard__NativeArray*)var200)->values[2]=var206;
+} else {
+var200 = varonce199;
+varonce199 = NULL;
 }
 {
-var14 = nit__lexer_work___Token___text(var11);
+var209 = ((val*(*)(val* self))(var_mproperty->class->vft[COLOR_standard__string__Object__to_s]))(var_mproperty); /* to_s on <var_mproperty:MMethod>*/
 }
-var_name = var14;
-/* <var_recvtype:nullable MType(MType)> isa MNullType */
-cltype = type_nit__MNullType.color;
-idtype = type_nit__MNullType.id;
-if(cltype >= var_recvtype->type->table_size) {
-var15 = 0;
-} else {
-var15 = var_recvtype->type->type_table[cltype] == idtype;
+((struct instance_standard__NativeArray*)var200)->values[1]=var209;
+{
+var210 = ((val*(*)(val* self))(var200->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var200); /* native_to_s on <var200:NativeArray[String]>*/
 }
-if (var15){
-if (varonce) {
-var16 = varonce;
-} else {
-var17 = "Error: Attribute \'";
-var18 = 18;
-var19 = standard___standard__NativeString___to_s_with_length(var17, var18);
-var16 = var19;
-varonce = var16;
+varonce199 = var200;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var210); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-if (varonce20) {
-var21 = varonce20;
+goto RET_LABEL;
 } else {
-var22 = "\' access on \'null\'.";
-var23 = 19;
-var24 = standard___standard__NativeString___to_s_with_length(var22, var23);
-var21 = var24;
-varonce20 = var21;
 }
-var25 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var25 = array_instance Array[Object] */
-var26 = 3;
-var27 = NEW_standard__NativeArray(var26, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var27)->values[0] = (val*) var16;
-((struct instance_standard__NativeArray*)var27)->values[1] = (val*) var_name;
-((struct instance_standard__NativeArray*)var27)->values[2] = (val*) var21;
 {
-((void (*)(val* self, val* p0, long p1))(var25->class->vft[COLOR_standard__array__Array__with_native]))(var25, var27, var26) /* with_native on <var25:Array[Object]>*/;
+{ /* Inline model#MMethodDef#new_msignature (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var214 = var_superprop->attrs[COLOR_nit__model__MMethodDef___new_msignature].val; /* _new_msignature on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var212 = var214;
+RET_LABEL213:(void)0;
 }
 }
+if (var212!=NULL) {
+var211 = var212;
+} else {
 {
-var28 = ((val* (*)(val* self))(var25->class->vft[COLOR_standard__string__Object__to_s]))(var25) /* to_s on <var25:Array[Object]>*/;
+{ /* Inline model#MMethodDef#msignature (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var217 = var_superprop->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var215 = var217;
+RET_LABEL216:(void)0;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var28); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
-goto RET_LABEL;
-} else {
+if (unlikely(var215 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Cast failed");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1899);
+fatal_exit(1);
 }
-{
-var29 = nit__typing___nit__typing__TypeVisitor___anchor_to(var_v, var_recvtype);
+var211 = var215;
 }
-var_unsafe_type = var29;
+var_msignature = var211;
 {
-var30 = nit__typing___nit__typing__TypeVisitor___try_get_mproperty_by_name2(var_v, self, var_unsafe_type, var_name);
+var218 = nit__typing___nit__typing__TypeVisitor___resolve_for(var_v, var_msignature, var_recvtype, 1);
 }
-var_mproperty = var30;
-var31 = NULL;
-if (var_mproperty == NULL) {
-var32 = 1; /* is null */
+/* <var218:MType> isa MSignature */
+cltype220 = type_nit__MSignature.color;
+idtype221 = type_nit__MSignature.id;
+if(cltype220 >= var218->type->table_size) {
+var219 = 0;
 } else {
-var32 = 0; /* arg is null but recv is not */
+var219 = var218->type->type_table[cltype220] == idtype221;
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mproperty,var31) on <var_mproperty:nullable MProperty> */
-var_other = var31;
+if (unlikely(!var219)) {
+var_class_name222 = var218 == NULL ? "null" : var218->type->name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "MSignature", var_class_name222);
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1900);
+fatal_exit(1);
+}
+var_msignature = var218;
+var223 = NEW_nit__CallSite(&type_nit__CallSite);
 {
-{ /* Inline kernel#Object#is_same_instance (var_mproperty,var_other) on <var_mproperty:nullable MProperty(MProperty)> */
-var37 = var_mproperty == var_other;
-var35 = var37;
-goto RET_LABEL36;
-RET_LABEL36:(void)0;
+{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
+var226 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
+if (unlikely(var226 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
+fatal_exit(1);
 }
+var224 = var226;
+RET_LABEL225:(void)0;
 }
-var33 = var35;
-goto RET_LABEL34;
-RET_LABEL34:(void)0;
 }
-var32 = var33;
+{
+{ /* Inline typing#TypeVisitor#anchor (var_v) on <var_v:TypeVisitor> */
+var229 = var_v->attrs[COLOR_nit__typing__TypeVisitor___anchor].val; /* _anchor on <var_v:TypeVisitor> */
+var227 = var229;
+RET_LABEL228:(void)0;
+}
 }
-if (var32){
 {
-{ /* Inline typing#TypeVisitor#modelbuilder (var_v) on <var_v:TypeVisitor> */
-var40 = var_v->attrs[COLOR_nit__typing__TypeVisitor___modelbuilder].val; /* _modelbuilder on <var_v:TypeVisitor> */
-if (unlikely(var40 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _modelbuilder");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 34);
-show_backtrace(1);
+{ /* Inline model#MPropDef#mproperty (var_superprop) on <var_superprop:nullable MMethodDef(MMethodDef)> */
+var232 = var_superprop->attrs[COLOR_nit__model__MPropDef___mproperty].val; /* _mproperty on <var_superprop:nullable MMethodDef(MMethodDef)> */
+if (unlikely(var232 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mproperty");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 2212);
+fatal_exit(1);
 }
-var38 = var40;
-RET_LABEL39:(void)0;
+var230 = var232;
+RET_LABEL231:(void)0;
 }
 }
-if (varonce41) {
-var42 = varonce41;
-} else {
-var43 = "Error: Attribute ";
-var44 = 17;
-var45 = standard___standard__NativeString___to_s_with_length(var43, var44);
-var42 = var45;
-varonce41 = var42;
+{
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__node_61d]))(var223, self); /* node= on <var223:CallSite>*/
 }
-if (varonce46) {
-var47 = varonce46;
-} else {
-var48 = " doesn\'t exists in ";
-var49 = 19;
-var50 = standard___standard__NativeString___to_s_with_length(var48, var49);
-var47 = var50;
-varonce46 = var47;
+{
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__recv_61d]))(var223, var_recvtype); /* recv= on <var223:CallSite>*/
 }
-if (varonce51) {
-var52 = varonce51;
-} else {
-var53 = ".";
-var54 = 1;
-var55 = standard___standard__NativeString___to_s_with_length(var53, var54);
-var52 = var55;
-varonce51 = var52;
+{
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__mmodule_61d]))(var223, var224); /* mmodule= on <var223:CallSite>*/
 }
-var56 = NEW_standard__Array(&type_standard__Array__standard__Object);
-{ /* var56 = array_instance Array[Object] */
-var57 = 5;
-var58 = NEW_standard__NativeArray(var57, &type_standard__NativeArray__standard__Object);
-((struct instance_standard__NativeArray*)var58)->values[0] = (val*) var42;
-((struct instance_standard__NativeArray*)var58)->values[1] = (val*) var_name;
-((struct instance_standard__NativeArray*)var58)->values[2] = (val*) var47;
-((struct instance_standard__NativeArray*)var58)->values[3] = (val*) var_recvtype;
-((struct instance_standard__NativeArray*)var58)->values[4] = (val*) var52;
 {
-((void (*)(val* self, val* p0, long p1))(var56->class->vft[COLOR_standard__array__Array__with_native]))(var56, var58, var57) /* with_native on <var56:Array[Object]>*/;
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__anchor_61d]))(var223, var227); /* anchor= on <var223:CallSite>*/
 }
+{
+((void(*)(val* self, short int p0))(var223->class->vft[COLOR_nit__typing__CallSite__recv_is_self_61d]))(var223, 1); /* recv_is_self= on <var223:CallSite>*/
 }
 {
-var59 = ((val* (*)(val* self))(var56->class->vft[COLOR_standard__string__Object__to_s]))(var56) /* to_s on <var56:Array[Object]>*/;
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__mproperty_61d]))(var223, var230); /* mproperty= on <var223:CallSite>*/
 }
 {
-nit___nit__ModelBuilder___error(var38, self, var59); /* Direct call modelbuilder_base#ModelBuilder#error on <var38:ModelBuilder>*/
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__mpropdef_61d]))(var223, var_superprop); /* mpropdef= on <var223:CallSite>*/
 }
-goto RET_LABEL;
-} else {
+{
+((void(*)(val* self, val* p0))(var223->class->vft[COLOR_nit__typing__CallSite__msignature_61d]))(var223, var_msignature); /* msignature= on <var223:CallSite>*/
 }
-/* <var_mproperty:nullable MProperty(MProperty)> isa MAttribute */
-cltype61 = type_nit__MAttribute.color;
-idtype62 = type_nit__MAttribute.id;
-if(cltype61 >= var_mproperty->type->table_size) {
-var60 = 0;
-} else {
-var60 = var_mproperty->type->type_table[cltype61] == idtype62;
+{
+((void(*)(val* self, short int p0))(var223->class->vft[COLOR_nit__typing__CallSite__erasure_cast_61d]))(var223, 0); /* erasure_cast= on <var223:CallSite>*/
 }
-if (unlikely(!var60)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1812);
-show_backtrace(1);
+{
+((void(*)(val* self))(var223->class->vft[COLOR_standard__kernel__Object__init]))(var223); /* init on <var223:CallSite>*/
 }
+var_callsite = var223;
 {
-{ /* Inline typing#AAttrFormExpr#mproperty= (self,var_mproperty) on <self:AAttrFormExpr> */
-self->attrs[COLOR_nit__typing__AAttrFormExpr___mproperty].val = var_mproperty; /* _mproperty on <self:AAttrFormExpr> */
-RET_LABEL63:(void)0;
+{ /* Inline typing#ASuperExpr#callsite= (self,var_callsite) on <self:ASuperExpr> */
+self->attrs[COLOR_nit__typing__ASuperExpr___callsite].val = var_callsite; /* _callsite on <self:ASuperExpr> */
+RET_LABEL233:(void)0;
 }
 }
 {
-{ /* Inline typing#TypeVisitor#mmodule (var_v) on <var_v:TypeVisitor> */
-var66 = var_v->attrs[COLOR_nit__typing__TypeVisitor___mmodule].val; /* _mmodule on <var_v:TypeVisitor> */
-if (unlikely(var66 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mmodule");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 36);
-show_backtrace(1);
+{ /* Inline parser_nodes#ASuperExpr#n_args (self) on <self:ASuperExpr> */
+var236 = self->attrs[COLOR_nit__parser_nodes__ASuperExpr___n_args].val; /* _n_args on <self:ASuperExpr> */
+if (unlikely(var236 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_args");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 2344);
+fatal_exit(1);
 }
-var64 = var66;
-RET_LABEL65:(void)0;
+var234 = var236;
+RET_LABEL235:(void)0;
 }
 }
 {
-var67 = nit___nit__MProperty___lookup_definitions(var_mproperty, var64, var_unsafe_type);
+var237 = nit__typing___AExprs___to_a(var234);
 }
-var_mpropdefs = var67;
+var_args = var237;
 {
-{ /* Inline array#AbstractArrayRead#length (var_mpropdefs) on <var_mpropdefs:Array[MAttributeDef]> */
-var70 = var_mpropdefs->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_mpropdefs:Array[MAttributeDef]> */
-var68 = var70;
-RET_LABEL69:(void)0;
+{ /* Inline array#AbstractArrayRead#length (var_args) on <var_args:Array[AExpr]> */
+var240 = var_args->attrs[COLOR_standard__array__AbstractArrayRead___length].l; /* _length on <var_args:Array[AExpr]> */
+var238 = var240;
+RET_LABEL239:(void)0;
 }
 }
-var71 = 1;
 {
-{ /* Inline kernel#Int#== (var68,var71) on <var68:Int> */
-var74 = var68 == var71;
-var72 = var74;
-goto RET_LABEL73;
-RET_LABEL73:(void)0;
+{ /* Inline kernel#Int#> (var238,0l) on <var238:Int> */
+/* Covariant cast for argument 0 (i) <0l:Int> isa OTHER */
+/* <0l:Int> isa OTHER */
+var243 = 1; /* easy <0l:Int> isa OTHER*/
+if (unlikely(!var243)) {
+var_class_name246 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name246);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 536);
+fatal_exit(1);
 }
+var247 = var238 > 0l;
+var241 = var247;
+goto RET_LABEL242;
+RET_LABEL242:(void)0;
 }
-if (unlikely(!var72)) {
-PRINT_ERROR("Runtime error: %s", "Assert failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1816);
-show_backtrace(1);
 }
+if (var241){
 {
-var75 = standard___standard__SequenceRead___Collection__first(var_mpropdefs);
+var248 = nit___nit__CallSite___check_signature(var_callsite, var_v, var_args);
 }
-var_mpropdef = var75;
+} else {
 {
-{ /* Inline model#MAttributeDef#static_mtype (var_mpropdef) on <var_mpropdef:MAttributeDef> */
-var78 = var_mpropdef->attrs[COLOR_nit__model__MAttributeDef___static_mtype].val; /* _static_mtype on <var_mpropdef:MAttributeDef> */
-var76 = var78;
-RET_LABEL77:(void)0;
+{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var251 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var249 = var251;
+RET_LABEL250:(void)0;
 }
 }
-if (unlikely(var76 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1818);
-show_backtrace(1);
+if (var249 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1910);
+fatal_exit(1);
+} else {
+var252 = nit___nit__MSignature___arity(var249);
 }
-var_attr_type = var76;
 {
-{ /* Inline parser_nodes#AAttrFormExpr#n_expr (self) on <self:AAttrFormExpr> */
-var81 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AAttrFormExpr> */
-if (unlikely(var81 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1976);
-show_backtrace(1);
+var253 = nit___nit__MSignature___arity(var_msignature);
 }
-var79 = var81;
-RET_LABEL80:(void)0;
+{
+{ /* Inline kernel#Int#< (var252,var253) on <var252:Int> */
+/* Covariant cast for argument 0 (i) <var253:Int> isa OTHER */
+/* <var253:Int> isa OTHER */
+var256 = 1; /* easy <var253:Int> isa OTHER*/
+if (unlikely(!var256)) {
+var_class_name259 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name259);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 534);
+fatal_exit(1);
 }
+var260 = var252 < var253;
+var254 = var260;
+goto RET_LABEL255;
+RET_LABEL255:(void)0;
 }
-/* <var79:AExpr> isa ASelfExpr */
-cltype83 = type_nit__ASelfExpr.color;
-idtype84 = type_nit__ASelfExpr.id;
-if(cltype83 >= var79->type->table_size) {
-var82 = 0;
+}
+if (var254){
+if (unlikely(varonce261==NULL)) {
+var262 = NEW_standard__NativeArray(7l, &type_standard__NativeArray__standard__String);
+if (likely(varonce263!=NULL)) {
+var264 = varonce263;
 } else {
-var82 = var79->type->type_table[cltype83] == idtype84;
+var265 = "Error: not enough implicit arguments to pass. Got `";
+var266 = standard___standard__NativeString___to_s_with_length(var265, 51l);
+var264 = var266;
+varonce263 = var264;
 }
-{
-var85 = nit__typing___nit__typing__TypeVisitor___resolve_for(var_v, var_attr_type, var_recvtype, var82);
+((struct instance_standard__NativeArray*)var262)->values[0]=var264;
+if (likely(varonce267!=NULL)) {
+var268 = varonce267;
+} else {
+var269 = "`, expected at least `";
+var270 = standard___standard__NativeString___to_s_with_length(var269, 22l);
+var268 = var270;
+varonce267 = var268;
+}
+((struct instance_standard__NativeArray*)var262)->values[2]=var268;
+if (likely(varonce271!=NULL)) {
+var272 = varonce271;
+} else {
+var273 = "`. Signature is `";
+var274 = standard___standard__NativeString___to_s_with_length(var273, 17l);
+var272 = var274;
+varonce271 = var272;
+}
+((struct instance_standard__NativeArray*)var262)->values[4]=var272;
+if (likely(varonce275!=NULL)) {
+var276 = varonce275;
+} else {
+var277 = "`.";
+var278 = standard___standard__NativeString___to_s_with_length(var277, 2l);
+var276 = var278;
+varonce275 = var276;
+}
+((struct instance_standard__NativeArray*)var262)->values[6]=var276;
+} else {
+var262 = varonce261;
+varonce261 = NULL;
 }
-var_attr_type = var85;
 {
-{ /* Inline typing#AAttrFormExpr#attr_type= (self,var_attr_type) on <self:AAttrFormExpr> */
-self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val = var_attr_type; /* _attr_type on <self:AAttrFormExpr> */
-RET_LABEL86:(void)0;
+{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var281 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var279 = var281;
+RET_LABEL280:(void)0;
 }
 }
-RET_LABEL:;
+if (var279 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1911);
+fatal_exit(1);
+} else {
+var282 = nit___nit__MSignature___arity(var279);
 }
-/* method typing#AAttrExpr#accept_typing for (self: AAttrExpr, TypeVisitor) */
-void nit__typing___AAttrExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MType */;
-val* var2 /* : nullable MType */;
-var_v = p0;
+var283 = standard__string___Int___Object__to_s(var282);
+((struct instance_standard__NativeArray*)var262)->values[1]=var283;
 {
-nit__typing___AAttrFormExpr___resolve_property(self, var_v); /* Direct call typing#AAttrFormExpr#resolve_property on <self:AAttrExpr>*/
+var284 = nit___nit__MSignature___arity(var_msignature);
 }
+var285 = standard__string___Int___Object__to_s(var284);
+((struct instance_standard__NativeArray*)var262)->values[3]=var285;
 {
-{ /* Inline typing#AAttrFormExpr#attr_type (self) on <self:AAttrExpr> */
-var2 = self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val; /* _attr_type on <self:AAttrExpr> */
-var = var2;
-RET_LABEL1:(void)0;
+var286 = ((val*(*)(val* self))(var_msignature->class->vft[COLOR_standard__string__Object__to_s]))(var_msignature); /* to_s on <var_msignature:MSignature>*/
 }
+((struct instance_standard__NativeArray*)var262)->values[5]=var286;
+{
+var287 = ((val*(*)(val* self))(var262->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var262); /* native_to_s on <var262:NativeArray[String]>*/
 }
+varonce261 = var262;
 {
-{ /* Inline typing#AExpr#mtype= (self,var) on <self:AAttrExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var; /* _mtype on <self:AAttrExpr> */
-RET_LABEL3:(void)0;
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var287); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
 }
-RET_LABEL:;
+var_i = 0l;
+{
+{ /* Inline model#MSignature#mparameters (var_msignature) on <var_msignature:MSignature> */
+var290 = var_msignature->attrs[COLOR_nit__model__MSignature___mparameters].val; /* _mparameters on <var_msignature:MSignature> */
+if (unlikely(var290 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1756);
+fatal_exit(1);
 }
-/* method typing#AAttrAssignExpr#accept_typing for (self: AAttrAssignExpr, TypeVisitor) */
-void nit__typing___AAttrAssignExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MType */;
-val* var2 /* : nullable MType */;
-val* var_mtype /* var mtype: nullable MType */;
-val* var3 /* : AExpr */;
-val* var5 /* : AExpr */;
-val* var6 /* : nullable MType */;
-short int var7 /* : Bool */;
-var_v = p0;
+var288 = var290;
+RET_LABEL289:(void)0;
+}
+}
+var_291 = var288;
 {
-nit__typing___AAttrFormExpr___resolve_property(self, var_v); /* Direct call typing#AAttrFormExpr#resolve_property on <self:AAttrAssignExpr>*/
+var292 = standard___standard__AbstractArrayRead___standard__abstract_collection__Collection__iterator(var_291);
 }
+var_293 = var292;
+for(;;) {
 {
-{ /* Inline typing#AAttrFormExpr#attr_type (self) on <self:AAttrAssignExpr> */
-var2 = self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val; /* _attr_type on <self:AAttrAssignExpr> */
-var = var2;
-RET_LABEL1:(void)0;
+var294 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__is_ok(var_293);
 }
+if (var294){
+{
+var295 = standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__item(var_293);
 }
-var_mtype = var;
+var_sp = var295;
 {
-{ /* Inline parser_nodes#AAssignFormExpr#n_value (self) on <self:AAttrAssignExpr> */
-var5 = self->attrs[COLOR_nit__parser_nodes__AAssignFormExpr___n_value].val; /* _n_value on <self:AAttrAssignExpr> */
-if (unlikely(var5 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_value");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1772);
-show_backtrace(1);
+{ /* Inline model#MMethodDef#msignature (var_mpropdef) on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var298 = var_mpropdef->attrs[COLOR_nit__model__MMethodDef___msignature].val; /* _msignature on <var_mpropdef:nullable MPropDef(MMethodDef)> */
+var296 = var298;
+RET_LABEL297:(void)0;
 }
-var3 = var5;
-RET_LABEL4:(void)0;
 }
+if (var296 == NULL) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1917);
+fatal_exit(1);
+} else {
+{ /* Inline model#MSignature#mparameters (var296) on <var296:nullable MSignature> */
+if (unlikely(var296 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Receiver is null");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1756);
+fatal_exit(1);
 }
-{
-var6 = nit__typing___nit__typing__TypeVisitor___visit_expr_subtype(var_v, var3, var_mtype);
+var301 = var296->attrs[COLOR_nit__model__MSignature___mparameters].val; /* _mparameters on <var296:nullable MSignature> */
+if (unlikely(var301 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mparameters");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1756);
+fatal_exit(1);
 }
-var7 = 1;
-{
-{ /* Inline typing#AExpr#is_typed= (self,var7) on <self:AAttrAssignExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var7; /* _is_typed on <self:AAttrAssignExpr> */
-RET_LABEL8:(void)0;
+var299 = var301;
+RET_LABEL300:(void)0;
 }
 }
-RET_LABEL:;
+{
+var302 = standard___standard__Array___standard__abstract_collection__SequenceRead___91d_93d(var299, var_i);
 }
-/* method typing#AAttrReassignExpr#accept_typing for (self: AAttrReassignExpr, TypeVisitor) */
-void nit__typing___AAttrReassignExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MType */;
-val* var2 /* : nullable MType */;
-val* var_mtype /* var mtype: nullable MType */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var7 /* : Bool */;
-short int var9 /* : Bool */;
-val* var10 /* : nullable MType */;
-short int var11 /* : Bool */;
-var_v = p0;
+var_p = var302;
 {
-nit__typing___AAttrFormExpr___resolve_property(self, var_v); /* Direct call typing#AAttrFormExpr#resolve_property on <self:AAttrReassignExpr>*/
+{ /* Inline model#MParameter#mtype (var_p) on <var_p:MParameter> */
+var305 = var_p->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_p:MParameter> */
+if (unlikely(var305 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1879);
+fatal_exit(1);
+}
+var303 = var305;
+RET_LABEL304:(void)0;
+}
 }
 {
-{ /* Inline typing#AAttrFormExpr#attr_type (self) on <self:AAttrReassignExpr> */
-var2 = self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val; /* _attr_type on <self:AAttrReassignExpr> */
-var = var2;
-RET_LABEL1:(void)0;
+{ /* Inline model#MParameter#mtype (var_sp) on <var_sp:MParameter> */
+var308 = var_sp->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_sp:MParameter> */
+if (unlikely(var308 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1879);
+fatal_exit(1);
 }
+var306 = var308;
+RET_LABEL307:(void)0;
 }
-var_mtype = var;
-var3 = NULL;
-if (var_mtype == NULL) {
-var4 = 1; /* is null */
-} else {
-var4 = 0; /* arg is null but recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var3) on <var_mtype:nullable MType> */
-var_other = var3;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
-var9 = var_mtype == var_other;
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+var309 = nit__typing___nit__typing__TypeVisitor___is_subtype(var_v, var303, var306);
+}
+var310 = !var309;
+if (var310){
+if (unlikely(varonce311==NULL)) {
+var312 = NEW_standard__NativeArray(10l, &type_standard__NativeArray__standard__String);
+if (likely(varonce313!=NULL)) {
+var314 = varonce313;
+} else {
+var315 = "Type Error: expected argument #";
+var316 = standard___standard__NativeString___to_s_with_length(var315, 31l);
+var314 = var316;
+varonce313 = var314;
 }
+((struct instance_standard__NativeArray*)var312)->values[0]=var314;
+if (likely(varonce317!=NULL)) {
+var318 = varonce317;
+} else {
+var319 = " of type `";
+var320 = standard___standard__NativeString___to_s_with_length(var319, 10l);
+var318 = var320;
+varonce317 = var318;
 }
-var5 = var7;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
+((struct instance_standard__NativeArray*)var312)->values[2]=var318;
+if (likely(varonce321!=NULL)) {
+var322 = varonce321;
+} else {
+var323 = "`, got implicit argument `";
+var324 = standard___standard__NativeString___to_s_with_length(var323, 26l);
+var322 = var324;
+varonce321 = var322;
 }
-var4 = var5;
+((struct instance_standard__NativeArray*)var312)->values[4]=var322;
+if (likely(varonce325!=NULL)) {
+var326 = varonce325;
+} else {
+var327 = "` of type `";
+var328 = standard___standard__NativeString___to_s_with_length(var327, 11l);
+var326 = var328;
+varonce325 = var326;
 }
-if (var4){
-goto RET_LABEL;
+((struct instance_standard__NativeArray*)var312)->values[6]=var326;
+if (likely(varonce329!=NULL)) {
+var330 = varonce329;
 } else {
+var331 = "`. Signature is ";
+var332 = standard___standard__NativeString___to_s_with_length(var331, 16l);
+var330 = var332;
+varonce329 = var330;
 }
-{
-var10 = nit__typing___AReassignFormExpr___resolve_reassignment(self, var_v, var_mtype, var_mtype);
+((struct instance_standard__NativeArray*)var312)->values[8]=var330;
+} else {
+var312 = varonce311;
+varonce311 = NULL;
 }
-var11 = 1;
+var333 = standard__string___Int___Object__to_s(var_i);
+((struct instance_standard__NativeArray*)var312)->values[1]=var333;
 {
-{ /* Inline typing#AExpr#is_typed= (self,var11) on <self:AAttrReassignExpr> */
-self->attrs[COLOR_nit__typing__AExpr___is_typed].s = var11; /* _is_typed on <self:AAttrReassignExpr> */
-RET_LABEL12:(void)0;
+{ /* Inline model#MParameter#mtype (var_sp) on <var_sp:MParameter> */
+var336 = var_sp->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_sp:MParameter> */
+if (unlikely(var336 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1879);
+fatal_exit(1);
 }
+var334 = var336;
+RET_LABEL335:(void)0;
 }
-RET_LABEL:;
 }
-/* method typing#AIssetAttrExpr#accept_typing for (self: AIssetAttrExpr, TypeVisitor) */
-void nit__typing___AIssetAttrExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-val* var /* : nullable MType */;
-val* var2 /* : nullable MType */;
-val* var_mtype /* var mtype: nullable MType */;
-val* var3 /* : null */;
-short int var4 /* : Bool */;
-short int var5 /* : Bool */;
-val* var_other /* var other: nullable Object */;
-short int var7 /* : Bool */;
-short int var9 /* : Bool */;
-val* var10 /* : AExpr */;
-val* var12 /* : AExpr */;
-val* var13 /* : nullable MType */;
-val* var_recvtype /* var recvtype: MType */;
-short int var14 /* : Bool */;
-val* var15 /* : MType */;
-val* var_bound /* var bound: MType */;
-short int var16 /* : Bool */;
-int cltype;
-int idtype;
-static val* varonce;
-val* var17 /* : String */;
-char* var18 /* : NativeString */;
-long var19 /* : Int */;
-val* var20 /* : FlatString */;
-val* var21 /* : nullable MType */;
-var_v = p0;
 {
-nit__typing___AAttrFormExpr___resolve_property(self, var_v); /* Direct call typing#AAttrFormExpr#resolve_property on <self:AIssetAttrExpr>*/
+var337 = ((val*(*)(val* self))(var334->class->vft[COLOR_standard__string__Object__to_s]))(var334); /* to_s on <var334:MType>*/
 }
+((struct instance_standard__NativeArray*)var312)->values[3]=var337;
 {
-{ /* Inline typing#AAttrFormExpr#attr_type (self) on <self:AIssetAttrExpr> */
-var2 = self->attrs[COLOR_nit__typing__AAttrFormExpr___attr_type].val; /* _attr_type on <self:AIssetAttrExpr> */
-var = var2;
-RET_LABEL1:(void)0;
+{ /* Inline model#MParameter#name (var_p) on <var_p:MParameter> */
+var340 = var_p->attrs[COLOR_nit__model__MParameter___name].val; /* _name on <var_p:MParameter> */
+if (unlikely(var340 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1876);
+fatal_exit(1);
 }
+var338 = var340;
+RET_LABEL339:(void)0;
 }
-var_mtype = var;
-var3 = NULL;
-if (var_mtype == NULL) {
-var4 = 1; /* is null */
-} else {
-var4 = 0; /* arg is null but recv is not */
 }
-if (0) {
-{ /* Inline kernel#Object#== (var_mtype,var3) on <var_mtype:nullable MType> */
-var_other = var3;
+((struct instance_standard__NativeArray*)var312)->values[5]=var338;
 {
-{ /* Inline kernel#Object#is_same_instance (var_mtype,var_other) on <var_mtype:nullable MType(MType)> */
-var9 = var_mtype == var_other;
-var7 = var9;
-goto RET_LABEL8;
-RET_LABEL8:(void)0;
+{ /* Inline model#MParameter#mtype (var_p) on <var_p:MParameter> */
+var343 = var_p->attrs[COLOR_nit__model__MParameter___mtype].val; /* _mtype on <var_p:MParameter> */
+if (unlikely(var343 == NULL)) {
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _mtype");
+PRINT_ERROR(" (%s:%d)\n", FILE_nit__model, 1879);
+fatal_exit(1);
 }
+var341 = var343;
+RET_LABEL342:(void)0;
 }
-var5 = var7;
-goto RET_LABEL6;
-RET_LABEL6:(void)0;
 }
-var4 = var5;
+{
+var344 = ((val*(*)(val* self))(var341->class->vft[COLOR_standard__string__Object__to_s]))(var341); /* to_s on <var341:MType>*/
 }
-if (var4){
-goto RET_LABEL;
-} else {
+((struct instance_standard__NativeArray*)var312)->values[7]=var344;
+{
+var345 = ((val*(*)(val* self))(var_msignature->class->vft[COLOR_standard__string__Object__to_s]))(var_msignature); /* to_s on <var_msignature:MSignature>*/
 }
+((struct instance_standard__NativeArray*)var312)->values[9]=var345;
 {
-{ /* Inline parser_nodes#AAttrFormExpr#n_expr (self) on <self:AIssetAttrExpr> */
-var12 = self->attrs[COLOR_nit__parser_nodes__AAttrFormExpr___n_expr].val; /* _n_expr on <self:AIssetAttrExpr> */
-if (unlikely(var12 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _n_expr");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__parser_nodes, 1976);
-show_backtrace(1);
+var346 = ((val*(*)(val* self))(var312->class->vft[COLOR_standard__string__NativeArray__native_to_s]))(var312); /* native_to_s on <var312:NativeArray[String]>*/
 }
-var10 = var12;
-RET_LABEL11:(void)0;
+varonce311 = var312;
+{
+nit__typing___nit__typing__TypeVisitor___error(var_v, self, var346); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
 }
+goto RET_LABEL;
+} else {
 }
 {
-var13 = ((val* (*)(val* self))(var10->class->vft[COLOR_nit__typing__AExpr__mtype]))(var10) /* mtype on <var10:AExpr>*/;
+{ /* Inline kernel#Int#+ (var_i,1l) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
+/* <1l:Int> isa OTHER */
+var349 = 1; /* easy <1l:Int> isa OTHER*/
+if (unlikely(!var349)) {
+var_class_name352 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name352);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 537);
+fatal_exit(1);
 }
-if (unlikely(var13 == NULL)) {
-PRINT_ERROR("Runtime error: %s", "Cast failed");
-PRINT_ERROR(" (%s:%d)\n", FILE_nit__typing, 1864);
-show_backtrace(1);
+var353 = var_i + 1l;
+var347 = var353;
+goto RET_LABEL348;
+RET_LABEL348:(void)0;
 }
-var_recvtype = var13;
-var14 = 0;
+}
+var_i = var347;
 {
-var15 = nit__typing___nit__typing__TypeVisitor___resolve_for(var_v, var_mtype, var_recvtype, var14);
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__next(var_293); /* Direct call array#ArrayIterator#next on <var_293:ArrayIterator[MParameter]>*/
 }
-var_bound = var15;
-/* <var_bound:MType> isa MNullableType */
-cltype = type_nit__MNullableType.color;
-idtype = type_nit__MNullableType.id;
-if(cltype >= var_bound->type->table_size) {
-var16 = 0;
 } else {
-var16 = var_bound->type->type_table[cltype] == idtype;
+goto BREAK_label354;
 }
-if (var16){
-if (varonce) {
-var17 = varonce;
-} else {
-var18 = "Error: isset on a nullable attribute.";
-var19 = 37;
-var20 = standard___standard__NativeString___to_s_with_length(var18, var19);
-var17 = var20;
-varonce = var17;
 }
+BREAK_label354: (void)0;
 {
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var17); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+standard__array___standard__array__ArrayIterator___standard__abstract_collection__Iterator__finish(var_293); /* Direct call array#ArrayIterator#finish on <var_293:ArrayIterator[MParameter]>*/
 }
-} else {
 }
 {
-var21 = nit__typing___nit__typing__TypeVisitor___type_bool(var_v, self);
+{ /* Inline typing#AExpr#is_typed= (self,1) on <self:ASuperExpr> */
+self->attrs[COLOR_nit__typing__AExpr___is_typed].s = 1; /* _is_typed on <self:ASuperExpr> */
+RET_LABEL355:(void)0;
 }
-{
-{ /* Inline typing#AExpr#mtype= (self,var21) on <self:AIssetAttrExpr> */
-self->attrs[COLOR_nit__typing__AExpr___mtype].val = var21; /* _mtype on <self:AIssetAttrExpr> */
-RET_LABEL22:(void)0;
 }
+RET_LABEL:;
 }
+/* method typing#ANewExpr#callsite for (self: ANewExpr): nullable CallSite */
+val* nit__typing___ANewExpr___callsite(val* self) {
+val* var /* : nullable CallSite */;
+val* var1 /* : nullable CallSite */;
+var1 = self->attrs[COLOR_nit__typing__ANewExpr___callsite].val; /* _callsite on <self:ANewExpr> */
+var = var1;
 RET_LABEL:;
+return var;
 }
-/* method typing#AVarargExpr#accept_typing for (self: AVarargExpr, TypeVisitor) */
-void nit__typing___AVarargExpr___AExpr__accept_typing(val* self, val* p0) {
-val* var_v /* var v: TypeVisitor */;
-static val* varonce;
-val* var /* : String */;
-char* var1 /* : NativeString */;
-long var2 /* : Int */;
-val* var3 /* : FlatString */;
-var_v = p0;
-if (varonce) {
-var = varonce;
-} else {
-var1 = "Syntax error: unexpected `...`";
-var2 = 30;
-var3 = standard___standard__NativeString___to_s_with_length(var1, var2);
-var = var3;
-varonce = var;
+/* method typing#ANewExpr#callsite= for (self: ANewExpr, nullable CallSite) */
+void nit__typing___ANewExpr___callsite_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ANewExpr___callsite].val = p0; /* _callsite on <self:ANewExpr> */
+RET_LABEL:;
 }
-{
-nit__typing___nit__typing__TypeVisitor___error(var_v, self, var); /* Direct call typing#TypeVisitor#error on <var_v:TypeVisitor>*/
+/* method typing#ANewExpr#recvtype for (self: ANewExpr): nullable MClassType */
+val* nit__typing___ANewExpr___recvtype(val* self) {
+val* var /* : nullable MClassType */;
+val* var1 /* : nullable MClassType */;
+var1 = self->attrs[COLOR_nit__typing__ANewExpr___recvtype].val; /* _recvtype on <self:ANewExpr> */
+var = var1;
+RET_LABEL:;
+return var;
 }
+/* method typing#ANewExpr#recvtype= for (self: ANewExpr, nullable MClassType) */
+void nit__typing___ANewExpr___recvtype_61d(val* self, val* p0) {
+self->attrs[COLOR_nit__typing__ANewExpr___recvtype].val = p0; /* _recvtype on <self:ANewExpr> */
 RET_LABEL:;
 }