[mono/mono] [2 commits] d6f05668: Cleanup redundant code

"Marek Safar ([email protected])" <[email protected]>
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <000001419d1e3eaf-7fd6c700-2b5f-447e-8eb4-f3eacb47db62-000000@email.amazonses.com>
   Branch: refs/heads/master
     Home: https://github.com/mono/mono
  Compare: https://github.com/mono/mono/compare/5d96c0de6379...e0b711beaf43

   Commit: d6f05668d4b4b44b8b0f29b816a55c190166a9c9
   Author: Marek Safar <[email protected]> (marek-safar)
     Date: 2013-10-09 11:52:10 GMT
      URL: https://github.com/mono/mono/commit/d6f05668d4b4b44b8b0f29b816a55c190166a9c9

Cleanup redundant code

Changed paths:
  M mcs/class/corlib/System/Convert.cs

Modified: mcs/class/corlib/System/Convert.cs
===================================================================
@@ -1,12 +1,13 @@
 //
 // System.Convert.cs
 //
-// Author:
+// Authors:
 //   Derek Holden ([email protected])
 //   Duncan Mak ([email protected])
+//   Marek Safar ([email protected])
 //
 // (C) Ximian, Inc.  http://www.ximian.com
-//
+// Copyright (C) 2013 Xamarin Inc (http://www.xamarin.com)
 //
 // System.Convert class. This was written word for word off the 
 // Library specification for System.Convert in the ECMA TC39 TG2 
@@ -2561,67 +2562,66 @@ internal static object ToType (object value, Type conversionType, IFormatProvide
 			if (value.GetType () == conversionType)
 				return value;
 			
-			if (value is IConvertible) {
-				IConvertible convertValue = (IConvertible) value;
+			IConvertible convertValue = value as IConvertible;
+			if (convertValue != null) {
 
 				if (conversionType == conversionTable[0]) // 0 Empty
 					throw new ArgumentNullException ();
 				
-				else if (conversionType == conversionTable[1]) // 1 TypeCode.Object
-					return (object) value;
+				if (conversionType == conversionTable[1]) // 1 TypeCode.Object
+					return value;
 					
-				else if (conversionType == conversionTable[2]) // 2 TypeCode.DBNull
+				if (conversionType == conversionTable[2]) // 2 TypeCode.DBNull
 					throw new InvalidCastException (
 						"Cannot cast to DBNull, it's not IConvertible");
 		  
-				else if (conversionType == conversionTable[3]) // 3 TypeCode.Boolean
-					return (object) convertValue.ToBoolean (provider);
+				if (conversionType == conversionTable[3]) // 3 TypeCode.Boolean
+					return convertValue.ToBoolean (provider);
 					
-				else if (conversionType == conversionTable[4]) // 4 TypeCode.Char
-					return (object) convertValue.ToChar (provider);
+				if (conversionType == conversionTable[4]) // 4 TypeCode.Char
+					return convertValue.ToChar (provider);
 		  
-				else if (conversionType == conversionTable[5]) // 5 TypeCode.SByte
-					return (object) convertValue.ToSByte (provider);
+				if (conversionType == conversionTable[5]) // 5 TypeCode.SByte
+					return convertValue.ToSByte (provider);
 
-				else if (conversionType == conversionTable[6]) // 6 TypeCode.Byte
-					return (object) convertValue.ToByte (provider);
+				if (conversionType == conversionTable[6]) // 6 TypeCode.Byte
+					return convertValue.ToByte (provider);
 				
-				else if (conversionType == conversionTable[7]) // 7 TypeCode.Int16
-					return (object) convertValue.ToInt16 (provider);
+				if (conversionType == conversionTable[7]) // 7 TypeCode.Int16
+					return convertValue.ToInt16 (provider);
 					
-				else if (conversionType == conversionTable[8]) // 8 TypeCode.UInt16
-					return (object) convertValue.ToUInt16 (provider);
+				if (conversionType == conversionTable[8]) // 8 TypeCode.UInt16
+					return convertValue.ToUInt16 (provider);
 		  
-				else if (conversionType == conversionTable[9]) // 9 TypeCode.Int32
-					return (object) convertValue.ToInt32 (provider);
+				if (conversionType == conversionTable[9]) // 9 TypeCode.Int32
+					return convertValue.ToInt32 (provider);
 			
-				else if (conversionType == conversionTable[10]) // 10 TypeCode.UInt32
-					return (object) convertValue.ToUInt32 (provider);
+				if (conversionType == conversionTable[10]) // 10 TypeCode.UInt32
+					return convertValue.ToUInt32 (provider);
 		  
-				else if (conversionType == conversionTable[11]) // 11 TypeCode.Int64
-					return (object) convertValue.ToInt64 (provider);
+				if (conversionType == conversionTable[11]) // 11 TypeCode.Int64
+					return convertValue.ToInt64 (provider);
 		  
-				else if (conversionType == conversionTable[12]) // 12 TypeCode.UInt64
-					return (object) convertValue.ToUInt64 (provider);
+				if (conversionType == conversionTable[12]) // 12 TypeCode.UInt64
+					return convertValue.ToUInt64 (provider);
 		  
-				else if (conversionType == conversionTable[13]) // 13 TypeCode.Single
-					return (object) convertValue.ToSingle (provider);
+				if (conversionType == conversionTable[13]) // 13 TypeCode.Single
+					return convertValue.ToSingle (provider);
 		  
-				else if (conversionType == conversionTable[14]) // 14 TypeCode.Double
-					return (object) convertValue.ToDouble (provider);
+				if (conversionType == conversionTable[14]) // 14 TypeCode.Double
+					return convertValue.ToDouble (provider);
 
-				else if (conversionType == conversionTable[15]) // 15 TypeCode.Decimal
-					return (object) convertValue.ToDecimal (provider);
+				if (conversionType == conversionTable[15]) // 15 TypeCode.Decimal
+					return convertValue.ToDecimal (provider);
 
-				else if (conversionType == conversionTable[16]) // 16 TypeCode.DateTime
-					return (object) convertValue.ToDateTime (provider);
+				if (conversionType == conversionTable[16]) // 16 TypeCode.DateTime
+					return convertValue.ToDateTime (provider);
 				
-				else if (conversionType == conversionTable[18]) // 18 TypeCode.String
-					return (object) convertValue.ToString (provider);
-				else {
-					if (try_target_to_type)
-						return convertValue.ToType (conversionType, provider);
-				}
+				if (conversionType == conversionTable[18]) // 18 TypeCode.String
+					return convertValue.ToString (provider);
+
+				if (try_target_to_type)
+					return convertValue.ToType (conversionType, provider);
 			} 
 			// Not in the conversion table
 			throw new InvalidCastException ((Locale.GetText (

   Commit: e0b711beaf43eb503a3b66bad81e79a64479dbd9
   Author: Marek Safar <[email protected]> (marek-safar)
     Date: 2013-10-09 12:04:47 GMT
      URL: https://github.com/mono/mono/commit/e0b711beaf43eb503a3b66bad81e79a64479dbd9

Enum IConvertible can convert to same enum or System.Enum. Fixes #15289

Changed paths:
  M mcs/class/corlib/System/Convert.cs
  M mcs/class/corlib/System/Enum.cs
  M mcs/class/corlib/Test/System/EnumTest.cs

Modified: mcs/class/corlib/System/Convert.cs
===================================================================
@@ -2529,6 +2529,7 @@ private static string ConvertToBase16 (byte[] value)
 			typeof (DateTime), // 16 TypeCode.DateTime
 			null,		    // 17 null.
 			typeof (String),   // 18 TypeCode.String
+			typeof (Enum)
 		};
 
 		// Function to convert an object to another type and return
@@ -2620,6 +2621,9 @@ internal static object ToType (object value, Type conversionType, IFormatProvide
 				if (conversionType == conversionTable[18]) // 18 TypeCode.String
 					return convertValue.ToString (provider);
 
+				if (conversionType == conversionTable[19] && value is Enum) // System.Enum
+					return value;
+
 				if (try_target_to_type)
 					return convertValue.ToType (conversionType, provider);
 			} 

Modified: mcs/class/corlib/System/Enum.cs
===================================================================
@@ -278,9 +278,8 @@ object IConvertible.ToType (Type targetType, IFormatProvider provider)
 		{
 			if (targetType == null)
 				throw new ArgumentNullException ("targetType");
-			if (targetType == typeof (string))
-				return ToString (provider);
-			return Convert.ToType (Value, targetType, provider, false);
+
+			return Convert.ToType (this, targetType, provider, false);
 		}
 
 		ushort IConvertible.ToUInt16 (IFormatProvider provider)

Modified: mcs/class/corlib/Test/System/EnumTest.cs
===================================================================
@@ -849,9 +849,12 @@ public void ToObject_Value_Invalid ()
 		}
 
 		[Test]
-		public void ConvertToStringType ()
+		public void IConvertible_Valid ()
 		{
-			Assert.AreEqual ("This", ((IConvertible) TestingEnum.This).ToType (typeof (string), null));
+			IConvertible ic = TestingEnum.This;
+			Assert.AreEqual ("This", ic.ToType (typeof (string), null), "#1");
+			Assert.AreEqual (TestingEnum.This, ic.ToType (typeof (TestingEnum), null), "#2");
+			Assert.AreEqual (TestingEnum.This, ic.ToType (typeof (Enum), null), "#3");
 		}
 
 		[Test]


_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.