From a0da945620963cbf9cb788f35e52cce8349c97cb Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 26 Feb 2016 14:23:11 -0500 Subject: [PATCH] model: the anonymous constructor is now called `autoinit` Still fallback to `init` if no anonymous constructor found. Signed-off-by: Jean Privat --- src/modelize/modelize_property.nit | 5 ++++- src/nitni/nitni_callbacks.nit | 4 ++-- src/nitni/nitni_utilities.nit | 2 +- src/semantize/typing.nit | 10 +++++++--- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index f2f791a..158dbec 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -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 diff --git a/src/nitni/nitni_callbacks.nit b/src/nitni/nitni_callbacks.nit index 823f624..4543308 100644 --- a/src/nitni/nitni_callbacks.nit +++ b/src/nitni/nitni_callbacks.nit @@ -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 diff --git a/src/nitni/nitni_utilities.nit b/src/nitni/nitni_utilities.nit index c0a8a15..d6331d6 100644 --- a/src/nitni/nitni_utilities.nit +++ b/src/nitni/nitni_utilities.nit @@ -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}" diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index aeb3b7e..ffabc08 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -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 -- 1.7.9.5