Author: marek
Date: 2005-05-10 09:01:05 -0400 (Tue, 10 May 2005)
New Revision: 44326

Modified:
   trunk/mcs/mcs/ChangeLog
   trunk/mcs/mcs/class.cs
   trunk/mcs/mcs/expression.cs
   trunk/mcs/mcs/parameter.cs
Log:
2005-05-10  Marek Safar  <[EMAIL PROTECTED]>

        * class.cs (Method.Define): Catch attempt for Finalizer declaration.
        
        * expression.cs (Argument.GetParameterModifier): Turned to property.
        (Invocation.Error_InvalidArguments): Add more descriptive errors.
        
        * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
        its C# equivalent.

Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2005-05-10 11:30:12 UTC (rev 44325)
+++ trunk/mcs/mcs/ChangeLog     2005-05-10 13:01:05 UTC (rev 44326)
@@ -1,3 +1,13 @@
+2005-05-10  Marek Safar  <[EMAIL PROTECTED]>
+
+       * class.cs (Method.Define): Catch attempt for Finalizer declaration.
+       
+       * expression.cs (Argument.GetParameterModifier): Turned to property.
+       (Invocation.Error_InvalidArguments): Add more descriptive errors.
+       
+       * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
+       its C# equivalent.
+       
 2005-05-09  Raja R Harinath  <[EMAIL PROTECTED]>
 
        Fix #74852.

Modified: trunk/mcs/mcs/class.cs
===================================================================
--- trunk/mcs/mcs/class.cs      2005-05-10 11:30:12 UTC (rev 44325)
+++ trunk/mcs/mcs/class.cs      2005-05-10 13:01:05 UTC (rev 44326)
@@ -3808,6 +3808,11 @@
                        if (!MethodData.Define (Parent))
                                return false;
 
+                       if (ReturnType == TypeManager.void_type && 
ParameterTypes.Length == 0 && 
+                               Name == "Finalize" && !(this is Destructor)) {
+                               Report.Warning (465, 1, Location, "Introducing 
a 'Finalize' method can interfere with destructor invocation. Did you intend to 
declare a destructor?");
+                       }
+
                        //
                        // Setup iterator if we are one
                        //

Modified: trunk/mcs/mcs/expression.cs
===================================================================
--- trunk/mcs/mcs/expression.cs 2005-05-10 11:30:12 UTC (rev 44325)
+++ trunk/mcs/mcs/expression.cs 2005-05-10 13:01:05 UTC (rev 44326)
@@ -4173,17 +4173,19 @@
                        }
                }
 
-               public Parameter.Modifier GetParameterModifier ()
+               public Parameter.Modifier Modifier
                {
-                       switch (ArgType) {
-                       case AType.Out:
-                               return Parameter.Modifier.OUT | 
Parameter.Modifier.ISBYREF;
+                       get {
+                               switch (ArgType) {
+                                       case AType.Out:
+                                               return Parameter.Modifier.OUT | 
Parameter.Modifier.ISBYREF;
 
-                       case AType.Ref:
-                               return Parameter.Modifier.REF | 
Parameter.Modifier.ISBYREF;
+                                       case AType.Ref:
+                                               return Parameter.Modifier.REF | 
Parameter.Modifier.ISBYREF;
 
-                       default:
-                               return Parameter.Modifier.NONE;
+                                       default:
+                                               return Parameter.Modifier.NONE;
+                               }
                        }
                }
 
@@ -4680,7 +4682,7 @@
 
                                Argument a = (Argument) arguments [i];
 
-                               Parameter.Modifier a_mod = 
a.GetParameterModifier () & 
+                               Parameter.Modifier a_mod = a.Modifier & 
                                        (unchecked (~(Parameter.Modifier.OUT | 
Parameter.Modifier.REF)));
                                Parameter.Modifier p_mod = pd.ParameterModifier 
(i) &
                                        (unchecked (~(Parameter.Modifier.OUT | 
Parameter.Modifier.REF)));
@@ -4751,7 +4753,7 @@
 
                                Argument a = (Argument) arguments [i];
 
-                               Parameter.Modifier a_mod = 
a.GetParameterModifier () &
+                               Parameter.Modifier a_mod = a.Modifier &
                                        unchecked (~(Parameter.Modifier.OUT | 
Parameter.Modifier.REF));
                                Parameter.Modifier p_mod = pd.ParameterModifier 
(i) &
                                        unchecked (~(Parameter.Modifier.OUT | 
Parameter.Modifier.REF));
@@ -5081,20 +5083,31 @@
                 }
                         
                static void Error_InvalidArguments (Location loc, int idx, 
MethodBase method,
-                                                    Type delegate_type, string 
arg_sig, string par_desc)
+                                                    Type delegate_type, 
Argument a, ParameterData expected_par)
                {
                        if (delegate_type == null) 
-                               Report.Error (1502, loc,
-                                             "The best overloaded match for 
method '" +
-                                             FullMethodDesc (method) +
-                                             "' has some invalid arguments");
+                               Report.Error (1502, loc, "The best overloaded 
match for method '{0}' has some invalid arguments",
+                                             TypeManager.CSharpSignature 
(method));
                        else
                                Report.Error (1594, loc,
                                              "Delegate '" + 
delegate_type.ToString () +
                                              "' has some invalid arguments.");
+
+                       string par_desc = expected_par.ParameterDesc (idx);
+
+                       if (a.Modifier != expected_par.ParameterModifier (idx)) 
{
+                               if ((expected_par.ParameterModifier (idx) & 
(Parameter.Modifier.REF | Parameter.Modifier.OUT)) == 0)
+                                       Report.Error (1615, loc, "Argument 
'{0}' should not be passed with the '{1}' keyword",
+                                               idx + 1, 
Parameter.GetModifierSignature (a.Modifier));
+                               else
+                                       Report.Error (1620, loc, "Argument 
'{0}' must be passed with the '{1}' keyword",
+                                               idx + 1, 
Parameter.GetModifierSignature (expected_par.ParameterModifier (idx)));
+                               return;
+                       }
+
                        Report.Error (1503, loc,
                                      String.Format ("Argument {0}: Cannot 
convert from '{1}' to '{2}'",
-                                                    idx, arg_sig, par_desc));
+                                                    idx + 1, Argument.FullDesc 
(a), par_desc));
                }
                
                public static bool VerifyArgumentsCompat (EmitContext ec, 
ArrayList Arguments,
@@ -5113,11 +5126,11 @@
                                Parameter.Modifier pm = pd.ParameterModifier 
(j);
                                
                                if (pm == Parameter.Modifier.PARAMS){
-                                       if ((pm & ~Parameter.Modifier.PARAMS) 
!= a.GetParameterModifier ()) {
+                                       if ((pm & ~Parameter.Modifier.PARAMS) 
!= a.Modifier) {
                                                if (!may_fail)
                                                        Error_InvalidArguments (
                                                                loc, j, method, 
delegate_type,
-                                                               
Argument.FullDesc (a), pd.ParameterDesc (j));
+                                                               a, pd);
                                                return false;
                                        }
 
@@ -5129,11 +5142,11 @@
                                        //
                                        // Check modifiers
                                        //
-                                       if (pd.ParameterModifier (j) != 
a.GetParameterModifier ()){
+                                       if (pd.ParameterModifier (j) != 
a.Modifier){
                                                if (!may_fail)
                                                        Error_InvalidArguments (
                                                                loc, j, method, 
delegate_type,
-                                                               
Argument.FullDesc (a), pd.ParameterDesc (j));
+                                                               a, pd);
                                                return false;
                                        }
                                }
@@ -5148,9 +5161,7 @@
 
                                        if (conv == null) {
                                                if (!may_fail)
-                                                       Error_InvalidArguments (
-                                                               loc, j, method, 
delegate_type,
-                                                               
Argument.FullDesc (a), pd.ParameterDesc (j));
+                                                       Error_InvalidArguments 
(loc, j, method, delegate_type, a, pd);
                                                return false;
                                        }
                                        
@@ -5168,7 +5179,7 @@
                                        }
                                }
                                
-                               Parameter.Modifier a_mod = 
a.GetParameterModifier () &
+                               Parameter.Modifier a_mod = a.Modifier &
                                        unchecked (~(Parameter.Modifier.OUT | 
Parameter.Modifier.REF));
                                Parameter.Modifier p_mod = pd.ParameterModifier 
(j) &
                                        unchecked (~(Parameter.Modifier.OUT | 
Parameter.Modifier.REF));

Modified: trunk/mcs/mcs/parameter.cs
===================================================================
--- trunk/mcs/mcs/parameter.cs  2005-05-10 11:30:12 UTC (rev 44325)
+++ trunk/mcs/mcs/parameter.cs  2005-05-10 13:01:05 UTC (rev 44326)
@@ -280,15 +280,27 @@
                        else
                                type_name = TypeName.ToString ();
 
-                       switch (ModFlags & unchecked (~Modifier.ISBYREF)) {
+                       string mod = GetModifierSignature (ModFlags);
+                       if (mod.Length > 0)
+                               return String.Concat (mod, " ", type_name);
+
+                       return type_name;
+               }
+
+               public static string GetModifierSignature (Modifier mod)
+               {
+                       switch (mod & unchecked (~Modifier.ISBYREF)) {
                                case Modifier.OUT:
-                                       return "out " + type_name;
+                                       return "out";
                                case Modifier.PARAMS:
-                                       return "params " + type_name;
+                                       return "params";
                                case Modifier.REF:
-                                       return "ref " + type_name;
+                                       return "ref";
+                               case Modifier.ARGLIST:
+                                       return "__arglist";
+                               default:
+                                       return "";
                        }
-                       return type_name;
                }
 
                public void DefineParameter (EmitContext ec, MethodBuilder mb, 
ConstructorBuilder cb, int index, Location loc)

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to