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