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

Reply via email to