2007-02-24 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Sat, 24 Feb 2007 15:44:21 +0000 (15:44 -0000)
committerMarek Safar <marek.safar@gmail.com>
Sat, 24 Feb 2007 15:44:21 +0000 (15:44 -0000)
A fix for bug #80407
* ecore.cs: Don't report ambiguity error when methods have same parent.

svn path=/trunk/mcs/; revision=73391

mcs/mcs/ChangeLog
mcs/mcs/ecore.cs

index 0b01867044777d4d33bb38d5926a63cff20d6f96..97e4cef6215f73f51c381d7e027f64d9d90778e7 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-24  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #80407
+       * ecore.cs: Don't report ambiguity error when methods have same parent.
+
 2007-02-23  Marek Safar  <marek.safar@gmail.com>
 
        A fix for bug #80878
index 573440c3dd48ce318f9a4419622805e2c22b230c..b0100b958342d8636a229b2bf7bc6aaec3cd94bf 100644 (file)
@@ -628,8 +628,8 @@ namespace Mono.CSharp {
 
                        if (mi.Length > 1) {
                                bool is_interface = qualifier_type != null && qualifier_type.IsInterface;
-                               MemberInfo non_method = null;
                                ArrayList methods = new ArrayList (2);
+                               ArrayList non_methods = null;
 
                                foreach (MemberInfo m in mi) {
                                        if (m is MethodBase) {
@@ -637,24 +637,29 @@ namespace Mono.CSharp {
                                                continue;
                                        }
 
-                                       if (non_method == null) {
-                                               non_method = m;
+                                       if (non_methods == null) {
+                                               non_methods = new ArrayList (2);
+                                               non_methods.Add (m);
                                                continue;
                                        }
 
-                                       Report.SymbolRelatedToPreviousError (m);
-                                       Report.SymbolRelatedToPreviousError (non_method);
-                                       Report.Error (229, loc, "Ambiguity between `{0}' and `{1}'",
-                                               TypeManager.GetFullNameSignature (m), TypeManager.GetFullNameSignature (non_method));
-                                       return null;
+                                       foreach (MemberInfo n_m in non_methods) {
+                                               if (m.DeclaringType.IsInterface && TypeManager.ImplementsInterface (m.DeclaringType, n_m.DeclaringType))
+                                                       continue;
+
+                                               Report.SymbolRelatedToPreviousError (m);
+                                               Report.Error (229, loc, "Ambiguity between `{0}' and `{1}'",
+                                                       TypeManager.GetFullNameSignature (m), TypeManager.GetFullNameSignature (n_m));
+                                               return null;
+                                       }
                                }
 
                                if (methods.Count == 0)
-                                       return null;
+                                       return ExprClassFromMemberInfo (container_type, (MemberInfo)non_methods [0], loc);
 
-                               if (non_method != null) {
+                               if (non_methods != null) {
                                        MethodBase method = (MethodBase) methods [0];
-
+                                       MemberInfo non_method = (MemberInfo) non_methods [0];
                                        if (method.DeclaringType == non_method.DeclaringType) {
                                                // Cannot happen with C# code, but is valid in IL
                                                Report.SymbolRelatedToPreviousError (method);