mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-26 22:26:16 +00:00
Fix a bug in the "fromString" method where radix 2,8 and 16 values were
not being generated correctly because the shl operator does not mutate its object but returns a new value. Also, make the distinction between radix 16 and the others more clear. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37111 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2b91631e44
commit
6551dcdd8a
@ -1861,21 +1861,26 @@ void APInt::fromString(uint32_t numbits, const char *str, uint32_t slen,
|
||||
// Get a digit
|
||||
uint32_t digit = 0;
|
||||
char cdigit = str[i];
|
||||
if (isdigit(cdigit))
|
||||
digit = cdigit - '0';
|
||||
else if (isxdigit(cdigit))
|
||||
if (cdigit >= 'a')
|
||||
if (radix == 16) {
|
||||
if (!isxdigit(cdigit))
|
||||
assert(0 && "Invalid hex digit in string");
|
||||
if (isdigit(cdigit))
|
||||
digit = cdigit - '0';
|
||||
else if (cdigit >= 'a')
|
||||
digit = cdigit - 'a' + 10;
|
||||
else if (cdigit >= 'A')
|
||||
digit = cdigit - 'A' + 10;
|
||||
else
|
||||
assert(0 && "huh?");
|
||||
else
|
||||
assert(0 && "huh? we shouldn't get here");
|
||||
} else if (isdigit(cdigit)) {
|
||||
digit = cdigit - '0';
|
||||
} else {
|
||||
assert(0 && "Invalid character in digit string");
|
||||
}
|
||||
|
||||
// Shift or multiple the value by the radix
|
||||
// Shift or multiply the value by the radix
|
||||
if (shift)
|
||||
this->shl(shift);
|
||||
*this <<= shift;
|
||||
else
|
||||
*this *= apradix;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user