Author: jbevain
Date: 2008-01-25 10:22:44 -0500 (Fri, 25 Jan 2008)
New Revision: 93907
Modified:
trunk/mcs/class/System.Core/System.Linq.Expressions/ChangeLog
trunk/mcs/class/System.Core/System.Linq.Expressions/Expression.cs
trunk/mcs/class/System.Core/System.Linq.Expressions/ExpressionPrinter.cs
Log:
2008-01-25 Jb Evain <[EMAIL PROTECTED]>
* Expression.cs, ExpressionPrinter.cs: implement Bind.
Modified: trunk/mcs/class/System.Core/System.Linq.Expressions/ChangeLog
===================================================================
--- trunk/mcs/class/System.Core/System.Linq.Expressions/ChangeLog
2008-01-25 15:22:23 UTC (rev 93906)
+++ trunk/mcs/class/System.Core/System.Linq.Expressions/ChangeLog
2008-01-25 15:22:44 UTC (rev 93907)
@@ -1,5 +1,9 @@
2008-01-25 Jb Evain <[EMAIL PROTECTED]>
+ * Expression.cs, ExpressionPrinter.cs: implement Bind.
+
+2008-01-25 Jb Evain <[EMAIL PROTECTED]>
+
* MemberMemberBinding.cs, MemberListBinding.cs,
MemberAssignment.cs, MemberBinding.cs:
add constructors.
Modified: trunk/mcs/class/System.Core/System.Linq.Expressions/Expression.cs
===================================================================
--- trunk/mcs/class/System.Core/System.Linq.Expressions/Expression.cs
2008-01-25 15:22:23 UTC (rev 93906)
+++ trunk/mcs/class/System.Core/System.Linq.Expressions/Expression.cs
2008-01-25 15:22:44 UTC (rev 93907)
@@ -857,16 +857,51 @@
return new UnaryExpression (ExpressionType.ArrayLength,
array, typeof (int));
}
- [MonoTODO]
public static MemberAssignment Bind (MemberInfo member,
Expression expression)
{
- throw new NotImplementedException ();
+ if (member == null)
+ throw new ArgumentNullException ("member");
+ if (expression == null)
+ throw new ArgumentNullException ("expression");
+
+ Type type = null;
+
+ var prop = member as PropertyInfo;
+ if (prop != null && prop.GetSetMethod (true) != null)
+ type = prop.PropertyType;
+
+ var field = member as FieldInfo;
+ if (field != null)
+ type = field.FieldType;
+
+ if (type == null)
+ throw new ArgumentException ("member");
+
+ if (!type.IsAssignableFrom (expression.Type))
+ throw new ArgumentException ("member");
+
+ return new MemberAssignment (member, expression);
}
- [MonoTODO]
public static MemberAssignment Bind (MethodInfo
propertyAccessor, Expression expression)
{
- throw new NotImplementedException ();
+ if (propertyAccessor == null)
+ throw new ArgumentNullException
("propertyAccessor");
+ if (expression == null)
+ throw new ArgumentNullException ("expression");
+
+ var prop = GetAssociatedProperty (propertyAccessor);
+ if (prop == null)
+ throw new ArgumentException
("propertyAccessor");
+
+ var setter = prop.GetSetMethod (true);
+ if (setter == null)
+ throw new ArgumentException ("setter");
+
+ if (!prop.PropertyType.IsAssignableFrom
(expression.Type))
+ throw new ArgumentException ("member");
+
+ return new MemberAssignment (prop, expression);
}
public static MethodCallExpression Call (Expression instance,
MethodInfo method)
@@ -1426,6 +1461,8 @@
foreach (var prop in method.DeclaringType.GetProperties
(All)) {
if (prop.GetGetMethod (true) == method)
return prop;
+ if (prop.GetSetMethod (true) == method)
+ return prop;
}
return null;
Modified:
trunk/mcs/class/System.Core/System.Linq.Expressions/ExpressionPrinter.cs
===================================================================
--- trunk/mcs/class/System.Core/System.Linq.Expressions/ExpressionPrinter.cs
2008-01-25 15:22:23 UTC (rev 93906)
+++ trunk/mcs/class/System.Core/System.Linq.Expressions/ExpressionPrinter.cs
2008-01-25 15:22:44 UTC (rev 93907)
@@ -270,7 +270,8 @@
protected override void VisitMemberAssignment (MemberAssignment
assignment)
{
- throw new NotImplementedException ();
+ Print ("{0} = ", assignment.Member.Name);
+ Visit (assignment.Expression);
}
protected override void VisitMemberMemberBinding
(MemberMemberBinding binding)
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches