model: the anonymous constructor is now called `autoinit`
authorJean Privat <jean@pryen.org>
Fri, 26 Feb 2016 19:23:11 +0000 (14:23 -0500)
committerJean Privat <jean@pryen.org>
Fri, 26 Feb 2016 19:23:11 +0000 (14:23 -0500)
Still fallback to `init` if no anonymous constructor found.

Signed-off-by: Jean Privat <jean@pryen.org>

src/modelize/modelize_property.nit
src/nitni/nitni_callbacks.nit
src/nitni/nitni_utilities.nit
src/semantize/typing.nit

index f2f791a..158dbec 100644 (file)
@@ -165,7 +165,7 @@ redef class ModelBuilder
                        if mpropdef.mproperty.is_root_init then
                                assert defined_init == null
                                defined_init = mpropdef
-                       else if mpropdef.mproperty.name == "init" then
+                       else if mpropdef.mproperty.name == "autoinit" then
                                # An explicit old-style init named "init", so return
                                return
                        end
@@ -777,6 +777,9 @@ redef class AMethPropdef
                        else if n_kwinit != null then
                                name = "init"
                                name_node = n_kwinit
+                               if self.n_signature.n_params.not_empty or get_single_annotation("old_style_init", modelbuilder) != null then
+                                       name = "autoinit"
+                               end
                        else if n_kwnew != null then
                                name = "new"
                                name_node = n_kwnew
index 823f624..4543308 100644 (file)
@@ -219,7 +219,7 @@ class MExplicitCall
 
                        var cname
                        if mproperty.is_init then
-                               if mproperty.name == "init" or mproperty.name == "new" then
+                               if mproperty.name == "init" or mproperty.name == "new" or mproperty.name == "autoinit" then
                                        cname = "new_{recv_mtype.mangled_cname}"
                                else
                                        cname = "new_{recv_mtype.mangled_cname}_{mproperty.short_cname}"
@@ -350,7 +350,7 @@ redef class AInitPropExternCall
                        mmodule, mtype, meth_name )
 
                if meth == null then
-                       meth_name = "init"
+                       meth_name = "autoinit"
                        meth = toolcontext.modelbuilder.try_get_mproperty_by_name2( self,
                                mmodule, mtype, meth_name )
                end
index c0a8a15..d6331d6 100644 (file)
@@ -28,7 +28,7 @@ redef class MMethod
        do
                var cname
                if self.is_init then
-                       if self.name == "init" or self.name == "new" then
+                       if self.name == "init" or self.name == "new" or self.name == "autoinit" then
                                cname = "new_{recv_mtype.mangled_cname}"
                        else
                                cname = "new_{recv_mtype.mangled_cname}_{self.short_cname}"
index aeb3b7e..ffabc08 100644 (file)
@@ -314,8 +314,12 @@ private class TypeVisitor
 
                var mproperty = self.try_get_mproperty_by_name2(node, unsafe_type, name)
                if name == "new" and mproperty == null then
-                       name = "init"
+                       name = "autoinit"
                        mproperty = self.try_get_mproperty_by_name2(node, unsafe_type, name)
+                       if mproperty == null then
+                               name = "init"
+                               mproperty = self.try_get_mproperty_by_name2(node, unsafe_type, name)
+                       end
                end
 
                if mproperty == null then
@@ -1581,7 +1585,7 @@ redef class ARangeExpr
                # get the constructor
                var callsite
                if self isa ACrangeExpr then
-                       callsite = v.get_method(self, mtype, "init", false)
+                       callsite = v.get_method(self, mtype, "autoinit", false)
                else if self isa AOrangeExpr then
                        callsite = v.get_method(self, mtype, "without_last", false)
                else
@@ -1904,7 +1908,7 @@ redef class ABraReassignExpr
 end
 
 redef class AInitExpr
-       redef fun property_name do return "init"
+       redef fun property_name do if n_args.n_exprs.is_empty then return "init" else return "autoinit"
        redef fun property_node do return n_kwinit
        redef fun compute_raw_arguments do return n_args.to_a
 end