New tests, update.
[mono.git] / mcs / class / System.Core / System.Linq.Expressions / MemberBinding.cs
index 9eae49ac24c0878fd30d865b9dc9fe8141c002c7..5187fa551f194f320bab8d3d68855c8be880ce68 100644 (file)
@@ -45,7 +45,7 @@ namespace System.Linq.Expressions {
                        get { return member; }
                }
 
-               internal MemberBinding (MemberBindingType binding_type, MemberInfo member)
+               protected MemberBinding (MemberBindingType binding_type, MemberInfo member)
                {
                        this.binding_type = binding_type;
                        this.member = member;
@@ -60,16 +60,11 @@ namespace System.Linq.Expressions {
 
                internal LocalBuilder EmitLoadMember (EmitContext ec, LocalBuilder local)
                {
-                       ec.EmitLoad (local);
+                       ec.EmitLoadSubject (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)