Changed integer storage from positive/negative to signed/unsigned

This commit is contained in:
Benoit Blanchon
2021-04-14 11:42:53 +02:00
parent a002393716
commit fc4f5fd05f
16 changed files with 251 additions and 171 deletions

View File

@ -69,11 +69,17 @@ inline bool parseNumber(const char* s, VariantData& result) {
}
if (*s == '\0') {
if (is_negative)
result.setNegativeInteger(UInt(mantissa));
else
result.setPositiveInteger(UInt(mantissa));
return true;
if (is_negative) {
const mantissa_t sintMantissaMax = mantissa_t(1)
<< (sizeof(Integer) * 8 - 1);
if (mantissa <= sintMantissaMax) {
result.setInteger(Integer(~mantissa + 1));
return true;
}
} else {
result.setInteger(UInt(mantissa));
return true;
}
}
// avoid mantissa overflow