diff options
author | Michael Gottesman <mgottesman@apple.com> | 2013-06-24 09:58:05 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2013-06-24 09:58:05 +0000 |
commit | 575694b6a7d49004acc93294bc88d0bc337e4d27 (patch) | |
tree | 2f1d5e5008dce9ff8d9fcadd7bd39717732b747f /lib/Support/APFloat.cpp | |
parent | fdec0c7a7302702d08f1221609221018af8085ec (diff) | |
download | llvm-575694b6a7d49004acc93294bc88d0bc337e4d27.tar.gz llvm-575694b6a7d49004acc93294bc88d0bc337e4d27.tar.bz2 llvm-575694b6a7d49004acc93294bc88d0bc337e4d27.tar.xz |
[APFloat] Added support for parsing float strings which contain {inf,-inf,NaN,-NaN}.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184713 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/APFloat.cpp')
-rw-r--r-- | lib/Support/APFloat.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index ec50064f42..4179231f13 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -2575,11 +2575,40 @@ APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode) return fs; } +bool +APFloat::convertFromStringSpecials(StringRef str) { + if (str.equals("inf") || str.equals("INFINITY")) { + makeInf(false); + return true; + } + + if (str.equals("-inf") || str.equals("-INFINITY")) { + makeInf(true); + return true; + } + + if (str.equals("nan") || str.equals("NaN")) { + makeNaN(false, false); + return true; + } + + if (str.equals("-nan") || str.equals("-NaN")) { + makeNaN(false, true); + return true; + } + + return false; +} + APFloat::opStatus APFloat::convertFromString(StringRef str, roundingMode rounding_mode) { assert(!str.empty() && "Invalid string length"); + // Handle special cases. + if (convertFromStringSpecials(str)) + return opOK; + /* Handle a leading minus sign. */ StringRef::iterator p = str.begin(); size_t slen = str.size(); |