typing: Add error when init is not found
[nit.git] / src / semantize / typing.nit
index 8258cbf..5d6b5da 100644 (file)
@@ -315,7 +315,7 @@ private class TypeVisitor
 
                var mproperty = self.try_get_mproperty_by_name2(node, unsafe_type, name)
                if name == "new" and mproperty == null then
-                       name = "autoinit"
+                       name = "defaultinit"
                        mproperty = self.try_get_mproperty_by_name2(node, unsafe_type, name)
                        if mproperty == null then
                                name = "init"
@@ -325,7 +325,12 @@ private class TypeVisitor
 
                if mproperty == null then
                        if recv_is_self then
-                               self.modelbuilder.error(node, "Error: method or variable `{name}` unknown in `{recvtype}`.")
+                               # FIXME This test was added to display a more explicit error when a potential duplication of root object class.
+                               if name == "init" then
+                                       self.modelbuilder.error(node, "Possible duplication of the root class `Object`")
+                               else
+                                       self.modelbuilder.error(node, "Error: method or variable `{name}` unknown in `{recvtype}`.")
+                               end
                        else if recvtype.need_anchor then
                                self.modelbuilder.error(node, "Error: method `{name}` does not exists in `{recvtype}: {unsafe_type}`.")
                        else
@@ -1778,7 +1783,7 @@ redef class ARangeExpr
                # get the constructor
                var callsite
                if self isa ACrangeExpr then
-                       callsite = v.build_callsite_by_name(self, mtype, "autoinit", false)
+                       callsite = v.build_callsite_by_name(self, mtype, "defaultinit", false)
                else if self isa AOrangeExpr then
                        callsite = v.build_callsite_by_name(self, mtype, "without_last", false)
                else
@@ -2160,7 +2165,7 @@ redef class ABraReassignExpr
 end
 
 redef class AInitExpr
-       redef fun property_name do if n_args.n_exprs.is_empty then return "init" else return "autoinit"
+       redef fun property_name do if n_args.n_exprs.is_empty then return "init" else return "defaultinit"
        redef fun property_node do return n_kwinit
        redef fun compute_raw_arguments do return n_args.to_a
 end