unrevert now that gmcs is fixed
authorJb Evain <jbevain@gmail.com>
Thu, 20 Mar 2008 08:44:46 +0000 (08:44 -0000)
committerJb Evain <jbevain@gmail.com>
Thu, 20 Mar 2008 08:44:46 +0000 (08:44 -0000)
svn path=/trunk/mcs/; revision=98659

mcs/class/System.Core/System.Linq.Expressions/Expression.cs
mcs/class/System.Core/System.Linq.Expressions/MemberAssignment.cs
mcs/class/System.Core/System.Linq.Expressions/MemberBinding.cs

index 2106e5c8d9aa5a6ba23132057337f7f2363b2cf6..da6a22b2084c6cfcf241d1903fe18b51dcc02097 100644 (file)
@@ -1270,16 +1270,9 @@ namespace System.Linq.Expressions {
                        var inits = initializers.ToReadOnlyCollection ();
                        CheckForNull (inits, "initializers");
 
-                       switch (member.MemberType) {
-                       case MemberTypes.Field:
-                               CheckIsAssignableToIEnumerable ((member as FieldInfo).FieldType);
-                               break;
-                       case MemberTypes.Property:
-                               CheckIsAssignableToIEnumerable ((member as PropertyInfo).PropertyType);
-                               break;
-                       default:
-                               throw new ArgumentException ("member");
-                       }
+                       member.OnFieldOrProperty (
+                               field => CheckIsAssignableToIEnumerable (field.FieldType),
+                               prop => CheckIsAssignableToIEnumerable (prop.PropertyType));
 
                        return new MemberListBinding (member, inits);
                }
@@ -1461,17 +1454,9 @@ namespace System.Linq.Expressions {
                        if (member == null)
                                throw new ArgumentNullException ("member");
 
-                       Type type = null;
-                       switch (member.MemberType) {
-                       case MemberTypes.Field:
-                               type = (member as FieldInfo).FieldType;
-                               break;
-                       case MemberTypes.Property:
-                               type = (member as PropertyInfo).PropertyType;
-                               break;
-                       default:
-                               throw new ArgumentException ("Member is neither a field or a property");
-                       }
+                       var type = member.OnFieldOrProperty (
+                               field => field.FieldType,
+                               prop => prop.PropertyType);
 
                        return new MemberMemberBinding (member, CheckMemberBindings (type, bindings));
                }
index 80047fd5e2b188fb0b261292a90663e2672e37c1..03d65207668e46903405ca7de01d32a3fbfcef43 100644 (file)
@@ -51,16 +51,9 @@ namespace System.Linq.Expressions {
                {
                        var member = this.Member;
 
-                       switch (member.MemberType) {
-                       case MemberTypes.Field:
-                               EmitFieldAssignment (ec, (FieldInfo) member, local);
-                               return;
-                       case MemberTypes.Property:
-                               EmitPropertyAssignment (ec, (PropertyInfo) member, local);
-                               return;
-                       default:
-                               throw new NotSupportedException (member.MemberType.ToString ());
-                       }
+                       this.Member.OnFieldOrProperty (
+                               field => EmitFieldAssignment (ec, field, local),
+                               prop => EmitPropertyAssignment (ec, prop, local));
                }
 
                void EmitFieldAssignment (EmitContext ec, FieldInfo field, LocalBuilder local)
index 9eae49ac24c0878fd30d865b9dc9fe8141c002c7..83f52168ae38455290f0185e86d91276539e5a45 100644 (file)
@@ -62,14 +62,9 @@ namespace System.Linq.Expressions {
                {
                        ec.EmitLoad (local);
 
-                       switch (member.MemberType) {
-                       case MemberTypes.Property:
-                               return EmitLoadProperty (ec, (PropertyInfo) member);
-                       case MemberTypes.Field:
-                               return EmitLoadField (ec, (FieldInfo) member);
-                       default:
-                               throw new NotSupportedException (member.MemberType.ToString ());
-                       }
+                       return member.OnFieldOrProperty<LocalBuilder> (
+                               field => EmitLoadField (ec, field),
+                               prop => EmitLoadProperty (ec, prop));
                }
 
                LocalBuilder EmitLoadProperty (EmitContext ec, PropertyInfo property)