MCPcopy Create free account
hub / github.com/ablab/spades / readExponent

Function readExponent

ext/src/llvm/APFloat.cpp:239–280  ·  view source on GitHub ↗

Return the value of a decimal exponent of the form [+-]ddddddd. If the exponent overflows, returns a large exponent with the appropriate sign. */

Source from the content-addressed store, hash-verified

237 If the exponent overflows, returns a large exponent with the
238 appropriate sign. */
239static Expected<int> readExponent(StringRef::iterator begin,
240 StringRef::iterator end) {
241 bool isNegative;
242 unsigned int absExponent;
243 const unsigned int overlargeExponent = 24000; /* FIXME. */
244 StringRef::iterator p = begin;
245
246 // Treat no exponent as 0 to match binutils
247 if (p == end || ((*p == '-' || *p == '+') && (p + 1) == end)) {
248 return 0;
249 }
250
251 isNegative = (*p == '-');
252 if (*p == '-' || *p == '+') {
253 p++;
254 if (p == end)
255 return createError("Exponent has no digits");
256 }
257
258 absExponent = decDigitValue(*p++);
259 if (absExponent >= 10U)
260 return createError("Invalid character in exponent");
261
262 for (; p != end; ++p) {
263 unsigned int value;
264
265 value = decDigitValue(*p);
266 if (value >= 10U)
267 return createError("Invalid character in exponent");
268
269 absExponent = absExponent * 10U + value;
270 if (absExponent >= overlargeExponent) {
271 absExponent = overlargeExponent;
272 break;
273 }
274 }
275
276 if (isNegative)
277 return -(int) absExponent;
278 else
279 return (int) absExponent;
280}
281
282/* This is ugly and needs cleaning up, but I don't immediately see
283 how whilst remaining safe. */

Callers 1

interpretDecimalFunction · 0.85

Calls 2

createErrorFunction · 0.85
decDigitValueFunction · 0.85

Tested by

no test coverage detected