remove warning
[mono.git] / mcs / class / corlib / System / Double.cs
index ea21d3658a803782f57b65f6ead1ee06af057647..23198122acc40039ff119af139ebb7f3cfd0b7da 100644 (file)
@@ -42,6 +42,9 @@ using System.Runtime.ConstrainedExecution;
 namespace System {
        
        [Serializable]
+#if NET_2_0
+       [System.Runtime.InteropServices.ComVisible (true)]
+#endif
        public struct Double : IComparable, IFormattable, IConvertible
 #if NET_2_0
                , IComparable <double>, IEquatable <double>
@@ -197,6 +200,7 @@ namespace System {
                private const int State_ExponentSign = 4;
                private const int State_Exponent = 5;
                private const int State_ConsumeWhiteSpace = 6;
+               private const int State_Exit = 7;
                
                public static double Parse (string s, NumberStyles style, IFormatProvider provider)
                {
@@ -209,7 +213,7 @@ namespace System {
                        return result;
                }
                
-               [MonoTODO("check if digits are group in correct numbers between the group separators")]
+               // FIXME: check if digits are group in correct numbers between the group separators
                internal static bool Parse (string s, NumberStyles style, IFormatProvider provider, bool tryParse, out double result, out Exception exc)
                {
                        result = 0;
@@ -270,7 +274,7 @@ namespace System {
                                if (sidx == len) {
                                        if (!tryParse)
                                                exc = Int32.GetFormatException ();
-                                       return true;
+                                       return false;
                                }
                        }
 
@@ -312,6 +316,7 @@ namespace System {
                                        sidx = len;
                                        continue;
                                }
+
                                switch (state){
                                case State_AllowSign:
                                        if ((style & NumberStyles.AllowLeadingSign) != 0){
@@ -383,8 +388,11 @@ namespace System {
                                        }
 
                                        if (c == 'e' || c == 'E'){
-                                               if ((style & NumberStyles.AllowExponent) == 0)
-                                                       throw new FormatException ("Unknown char: " + c);
+                                               if ((style & NumberStyles.AllowExponent) == 0) {
+                                                       if (!tryParse)
+                                                               exc = new FormatException ("Unknown char: " + c);
+                                                       return false;
+                                               }
                                                b [didx++] = (byte) c;
                                                state = State_ExponentSign;
                                                break;
@@ -439,13 +447,18 @@ namespace System {
                                        return false;
 
                                case State_ConsumeWhiteSpace:
-                                       if (allow_trailing_white && Char.IsWhiteSpace (c))
+                                       if (allow_trailing_white && Char.IsWhiteSpace (c)) {
+                                               state = State_ConsumeWhiteSpace;
                                                break;
+                                       }
                                        
                                        if (!tryParse)
                                                exc = new FormatException ("Unknown char");
                                        return false;
                                }
+
+                               if (state == State_Exit)
+                                       break;
                        }
 
                        b [didx] = 0;