Author: marek
Date: 2008-02-08 08:36:44 -0500 (Fri, 08 Feb 2008)
New Revision: 95240

Modified:
   trunk/mcs/mcs/ChangeLog
   trunk/mcs/mcs/ecore.cs
   trunk/mcs/mcs/expression.cs
Log:
2008-02-08  Marek Safar  <[EMAIL PROTECTED]>

        A fix for bugs #325134, #359749
        * expression.cs, ecore.cs: Try to resolve an extension method even if 
the
        first bind points to non-method member expression.
        


Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2008-02-08 13:34:51 UTC (rev 95239)
+++ trunk/mcs/mcs/ChangeLog     2008-02-08 13:36:44 UTC (rev 95240)
@@ -1,5 +1,11 @@
 2008-02-08  Marek Safar  <[EMAIL PROTECTED]>
 
+       A fix for bugs #325134, #359749
+       * expression.cs, ecore.cs: Try to resolve an extension method even if 
the
+       first binds point to non-method member expression.
+       
+2008-02-08  Marek Safar  <[EMAIL PROTECTED]>
+
        * cs-parser.jay: Null coalescing operator is not part of ISO-1.
 
 2008-02-08  Marek Safar  <[EMAIL PROTECTED]>

Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs      2008-02-08 13:34:51 UTC (rev 95239)
+++ trunk/mcs/mcs/ecore.cs      2008-02-08 13:36:44 UTC (rev 95240)
@@ -2448,7 +2448,7 @@
                                                if (!me.IsStatic &&
                                                    (!intermediate || 
!IdenticalNameAndTypeName (ec, me, loc))) {
                                                        Error_ObjectRefRequired 
(ec, loc, me.GetSignatureForError ());
-                                                       return 
EmptyExpression.Null;
+                                                       return null;
                                                }
 
                                                //

Modified: trunk/mcs/mcs/expression.cs
===================================================================
--- trunk/mcs/mcs/expression.cs 2008-02-08 13:34:51 UTC (rev 95239)
+++ trunk/mcs/mcs/expression.cs 2008-02-08 13:36:44 UTC (rev 95240)
@@ -4325,9 +4325,21 @@
                                        return (new DelegateInvocation (
                                                expr_resolved, Arguments, 
loc)).Resolve (ec);
                                }
+
+                               MemberExpr me = expr_resolved as MemberExpr;
+                               if (me == null) {
+                                       expr_resolved.Error_UnexpectedKind 
(ResolveFlags.MethodGroup, loc);
+                                       return null;
+                               }
                                
-                               expr_resolved.Error_UnexpectedKind 
(ResolveFlags.MethodGroup, loc);
-                               return null;
+                               mg = ec.TypeContainer.LookupExtensionMethod 
(me.Type, me.Name);
+                               if (mg == null) {
+                                       Report.Error (1955, loc, "The member 
`{0}' cannot be used as method or delegate",
+                                               
expr_resolved.GetSignatureForError ());
+                                       return null;
+                               }
+
+                               
((ExtensionMethodGroupExpr)mg).ExtensionExpression = me.InstanceExpression;
                        }
 
                        //

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

Reply via email to