Procházet zdrojové kódy

revert

svn path=/trunk/mcs/; revision=98188
Jb Evain před 18 roky
rodič
revize
b704450bfa

+ 0 - 9
mcs/class/System.Core/System.Linq.Expressions/ChangeLog

@@ -2,15 +2,6 @@
 
 	* Extensions.cs: Disabled redundant OnFieldOrProperty.
 	
-2008-03-13  Jb Evain  <[email protected]>
-
-	* Extensions.cs: a collection of useful extension methods
-	which are useful to S.L.E.
-
-	* Expression.cs, MemberExpression.cs,
-	MemberAssignment.cs, MemberBinding.cs:
-		refactor common pattern into a common method.
-
 2008-03-13  Jb Evain  <[email protected]>
 
 	* NewArrayExpression.cs (EmitNewArrayBounds): implement.

+ 21 - 6
mcs/class/System.Core/System.Linq.Expressions/Expression.cs

@@ -1259,9 +1259,16 @@ namespace System.Linq.Expressions {
 			var inits = initializers.ToReadOnlyCollection ();
 			CheckForNull (inits, "initializers");
 
-			member.OnFieldOrProperty (
-				field => CheckIsAssignableToIEnumerable (field.FieldType),
-				prop => CheckIsAssignableToIEnumerable (prop.PropertyType));
+			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");
+			}
 
 			return new MemberListBinding (member, inits);
 		}
@@ -1445,9 +1452,17 @@ namespace System.Linq.Expressions {
 			if (member == null)
 				throw new ArgumentNullException ("member");
 
-			var type = member.OnFieldOrProperty (
-				field => field.FieldType,
-				prop => prop.PropertyType);
+			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");
+			}
 
 			return new MemberMemberBinding (member, CheckMemberBindings (type, bindings));
 		}

+ 12 - 3
mcs/class/System.Core/System.Linq.Expressions/MemberAssignment.cs

@@ -49,9 +49,18 @@ namespace System.Linq.Expressions {
 
 		internal override void Emit (EmitContext ec, LocalBuilder local)
 		{
-			this.Member.OnFieldOrProperty (
-				field => EmitFieldAssignment (ec, field, local),
-				prop => EmitPropertyAssignment (ec, prop, local));
+			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 ());
+			}
 		}
 
 		void EmitFieldAssignment (EmitContext ec, FieldInfo field, LocalBuilder local)

+ 8 - 3
mcs/class/System.Core/System.Linq.Expressions/MemberBinding.cs

@@ -62,9 +62,14 @@ namespace System.Linq.Expressions {
 		{
 			ec.EmitLoad (local);
 
-			return member.OnFieldOrProperty (
-				field => EmitLoadField (ec, field),
-				prop => EmitLoadProperty (ec, prop));
+			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 ());
+			}
 		}
 
 		LocalBuilder EmitLoadProperty (EmitContext ec, PropertyInfo property)

+ 13 - 3
mcs/class/System.Core/System.Linq.Expressions/MemberExpression.cs

@@ -54,9 +54,19 @@ namespace System.Linq.Expressions {
 
 		internal override void Emit (EmitContext ec)
 		{
-			member.OnFieldOrProperty (
-				field => EmitFieldAccess (ec, field),
-				prop => EmitPropertyAccess (ec, prop));
+			var property = member as PropertyInfo;
+			if (property != null) {
+				EmitPropertyAccess (ec, property);
+				return;
+			}
+
+			var field = member as FieldInfo;
+			if (field != null) {
+				EmitFieldAccess (ec, field);
+				return;
+			}
+
+			throw new NotSupportedException ();
 		}
 
 		void EmitPropertyAccess (EmitContext ec, PropertyInfo property)