internal static unsafe double ParseDouble(string value, NumberStyles options, NumberFormatInfo numfmt)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
byte *stackBuffer = stackalloc byte[Number.NumberBuffer.NumberBufferBytes];
Number.NumberBuffer number = new Number.NumberBuffer(stackBuffer);
double num = 0.0;
if (!Number.TryStringToNumber(value, options, ref number, numfmt, false))
{
string str = value.Trim();
if (str.Equals(numfmt.PositiveInfinitySymbol))
{
return(double.PositiveInfinity);
}
if (str.Equals(numfmt.NegativeInfinitySymbol))
{
return(double.NegativeInfinity);
}
if (str.Equals(numfmt.NaNSymbol))
{
return(double.NaN);
}
throw new FormatException(Environment.GetResourceString("Format_InvalidString"));
}
if (!Number.NumberBufferToDouble(number.PackForNative(), ref num))
{
throw new OverflowException(Environment.GetResourceString("Overflow_Double"));
}
return(num);
}