model: the anonymous constructor is now called `autoinit`
[nit.git] / src / nitni / nitni_utilities.nit
index 8cacbf1..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}"
@@ -72,7 +72,7 @@ redef class MMethod
 
                var cparams = new List[String]
                if not self.is_init then
-                       cparams.add( "{call_context.name_mtype(recv_mtype)} recv" )
+                       cparams.add( "{call_context.name_mtype(recv_mtype)} self" )
                end
                for p in signature.mparameters do
                        var param_mtype = p.mtype.resolve_for(recv_mtype, recv_mtype, from_mmodule, true)
@@ -103,17 +103,19 @@ redef class MMethod
                        return_mtype = recv_mtype
                else if signature.return_mtype != null then
                        return_mtype = signature.return_mtype
+                       return_mtype = return_mtype.resolve_for(recv_mtype, recv_mtype, from_mmodule, true)
                end
 
                var cname = build_cname(recv_mtype, from_mmodule, suffix, length)
 
                var cparams = new List[String]
                if not self.is_init then
-                       cparams.add(call_context.cast_to(recv_mtype, "recv{param_suffix}"))
+                       cparams.add(call_context.cast_to(recv_mtype, "self{param_suffix}"))
                end
 
                for p in signature.mparameters do
-                       cparams.add(call_context.cast_to(p.mtype, "{p.name}{param_suffix}"))
+                       var param_mtype = p.mtype.resolve_for(recv_mtype, recv_mtype, from_mmodule, true)
+                       cparams.add(call_context.cast_to(param_mtype, "{p.name}{param_suffix}"))
                end
 
                var joined_cparams = cparams.join(", ")
@@ -138,15 +140,14 @@ class CallContext
        fun cast_to(mtype: MType, name: String): String do return name
 end
 
-redef class Object
-       # Call context to use
-       protected fun internal_call_context: CallContext do return new CallContext
-       protected fun long_signature: SignatureLength do return once new SignatureLength(true)
-       protected fun short_signature: SignatureLength do return once new SignatureLength(false)
-end
+# Call context to use
+fun internal_call_context: CallContext do return new CallContext
+fun long_signature: SignatureLength do return once new SignatureLength(true)
+fun short_signature: SignatureLength do return once new SignatureLength(false)
 
 # Length of the signature of a C function (long version hase the module name as prefix)
 class SignatureLength
        private var long: Bool
-       private init(long: Bool) do self.long = long
+
+       # TODO: private init because singleton class.
 end