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