| 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