Author: martin
Date: 2005-04-12 17:01:19 -0400 (Tue, 12 Apr 2005)
New Revision: 42878

Modified:
   trunk/mcs/gmcs/ChangeLog
   trunk/mcs/gmcs/class.cs
Log:
**** Merged r41087 ****


Modified: trunk/mcs/gmcs/ChangeLog
===================================================================
--- trunk/mcs/gmcs/ChangeLog    2005-04-12 21:00:24 UTC (rev 42877)
+++ trunk/mcs/gmcs/ChangeLog    2005-04-12 21:01:19 UTC (rev 42878)
@@ -1,3 +1,13 @@
+2005-02-23  Raja R Harinath  <[EMAIL PROTECTED]>
+           Abin Thomas  <[EMAIL PROTECTED]>
+           Anoob V E  <[EMAIL PROTECTED]>
+           Harilal P R  <[EMAIL PROTECTED]>
+
+       Fix #57851, #72718.
+       * class.cs (ConstructorBuilder.Resolve): Make sure that the second
+       MemberLookup (used for error reporting) actually returns a result.
+       Fix error report number (122, not 112).
+
 2005-02-22  Abin Thomas  <[EMAIL PROTECTED]>
            Anoob V E  <[EMAIL PROTECTED]>
            Harilal P R  <[EMAIL PROTECTED]>

Modified: trunk/mcs/gmcs/class.cs
===================================================================
--- trunk/mcs/gmcs/class.cs     2005-04-12 21:00:24 UTC (rev 42877)
+++ trunk/mcs/gmcs/class.cs     2005-04-12 21:01:19 UTC (rev 42878)
@@ -4310,6 +4310,7 @@
                {
                        Expression base_constructor_group;
                        Type t;
+                       bool error = false;
 
                        ec.CurrentBlock = new ToplevelBlock 
(Block.Flags.Implicit, parameters, loc);
 
@@ -4340,34 +4341,34 @@
                                loc);
                        
                        if (base_constructor_group == null){
+                               error = true;
                                base_constructor_group = 
Expression.MemberLookup (
-                                       ec, t, ".ctor", MemberTypes.Constructor,
+                                       ec, t, null, t, ".ctor", 
MemberTypes.Constructor,
                                        BindingFlags.NonPublic | 
BindingFlags.Instance | BindingFlags.DeclaredOnly,
                                        loc);
+                       }
 
-                               if (base_constructor_group != null)
-                                       Report.Error (
-                                               112, loc, "`{0}.{1}' is 
inaccessible due to " +
-                                               "its protection level", 
t.FullName, t.Name);
-                               else
-                                       Report.Error (
-                                               1501, loc, "Can not find a 
constructor for " +
-                                               "this argument list");
+                       int errors = Report.Errors;
+                       if (base_constructor_group != null)
+                               base_constructor = (ConstructorInfo) 
Invocation.OverloadResolve (
+                                       ec, (MethodGroupExpr) 
base_constructor_group, argument_list,
+                                       false, loc);
+                       
+                       if (base_constructor == null) {
+                               if (errors == Report.Errors)
+                                       Report.Error (1501, loc, "Can not find 
a constructor for this argument list");
                                return false;
                        }
-                       
-                       base_constructor = (ConstructorInfo) 
Invocation.OverloadResolve (
-                               ec, (MethodGroupExpr) base_constructor_group, 
argument_list,
-                               false, loc);
-                       
-                       if (base_constructor == null){
-                               Report.Error (1501, loc,
-                                      "Can not find a constructor for this 
argument list");
+
+                       if (error) {
+                               Report.Error (122, loc, "`{0}' is inaccessible 
due to its protection level",
+                                             TypeManager.CSharpSignature 
(base_constructor));
+                               base_constructor = null;
                                return false;
                        }
                        
                        if (base_constructor == caller_builder){
-                               Report.Error (516, String.Format ("Constructor 
`{0}' can not call itself", TypeManager.CSharpSignature (caller_builder)));
+                               Report.Error (516, loc, "Constructor `{0}' can 
not call itself", TypeManager.CSharpSignature (caller_builder));
                                return false;
                        }
                        

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

Reply via email to