Author: marek
Date: 2008-01-22 05:11:24 -0500 (Tue, 22 Jan 2008)
New Revision: 93495

Modified:
   trunk/mcs/mcs/ChangeLog
   trunk/mcs/mcs/ecore.cs
   trunk/mcs/mcs/expression.cs
Log:
008-01-22  Marek Safar  <[EMAIL PROTECTED]>

        A fix for bug #355161
        * ecore.cs, expression.cs: Wider range of extension method supported
        expressions.
 


Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2008-01-22 09:55:04 UTC (rev 93494)
+++ trunk/mcs/mcs/ChangeLog     2008-01-22 10:11:24 UTC (rev 93495)
@@ -1,3 +1,9 @@
+2008-01-22  Marek Safar  <[EMAIL PROTECTED]>
+
+       A fix for bug #355161
+       * ecore.cs, expression.cs: Wider range of extension method supported
+       expressions.
+ 
 2008-01-22  Gert Driesen  <[EMAIL PROTECTED]>
 
        * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct

Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs      2008-01-22 09:55:04 UTC (rev 93494)
+++ trunk/mcs/mcs/ecore.cs      2008-01-22 10:11:24 UTC (rev 93495)
@@ -3101,9 +3101,6 @@
 
                public override MethodGroupExpr OverloadResolve (EmitContext 
ec, ref ArrayList arguments, bool may_fail, Location loc)
                {
-                       if ((ExtensionExpression.eclass & (ExprClass.Value | 
ExprClass.Variable)) == 0)
-                               return base.OverloadResolve (ec, ref arguments, 
may_fail, loc);
-
                        if (arguments == null)
                                arguments = new ArrayList (1);
 

Modified: trunk/mcs/mcs/expression.cs
===================================================================
--- trunk/mcs/mcs/expression.cs 2008-01-22 09:55:04 UTC (rev 93494)
+++ trunk/mcs/mcs/expression.cs 2008-01-22 10:11:24 UTC (rev 93495)
@@ -6650,15 +6650,24 @@
                        }
 #endif
                        if (member_lookup == null) {
-                               ExtensionMethodGroupExpr ex_method_lookup = 
ec.TypeContainer.LookupExtensionMethod (expr_type, Identifier);
-                               if (ex_method_lookup != null) {
-                                       ex_method_lookup.ExtensionExpression = 
expr_resolved;
+                               ExprClass expr_eclass = expr_resolved.eclass;
 
-                                       if (args != null) {
-                                               
ex_method_lookup.SetTypeArguments (args);
+                               //
+                               // Extension methods are not allowed on all 
expression types
+                               //
+                               if (expr_eclass == ExprClass.Value || 
expr_eclass == ExprClass.Variable ||
+                                       expr_eclass == ExprClass.IndexerAccess 
|| expr_eclass == ExprClass.PropertyAccess ||
+                                       expr_eclass == ExprClass.EventAccess) {
+                                       ExtensionMethodGroupExpr 
ex_method_lookup = ec.TypeContainer.LookupExtensionMethod (expr_type, 
Identifier);
+                                       if (ex_method_lookup != null) {
+                                               
ex_method_lookup.ExtensionExpression = expr_resolved;
+
+                                               if (args != null) {
+                                                       
ex_method_lookup.SetTypeArguments (args);
+                                               }
+
+                                               return 
ex_method_lookup.DoResolve (ec);
                                        }
-
-                                       return ex_method_lookup.DoResolve (ec);
                                }
 
                                expr = expr_resolved;

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

Reply via email to