[ADT] Make getAutoSenseRadix in StringRef global (#152503)

Needed in #152308
This commit is contained in:
Ilia Kuklin 2025-08-07 22:48:17 +05:00 committed by GitHub
parent 06f06deb77
commit 2ff44d7d65
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 3 deletions

View File

@ -38,6 +38,8 @@ namespace llvm {
LLVM_ABI bool getAsSignedInteger(StringRef Str, unsigned Radix,
long long &Result);
LLVM_ABI unsigned getAutoSenseRadix(StringRef &Str);
LLVM_ABI bool consumeUnsignedInteger(StringRef &Str, unsigned Radix,
unsigned long long &Result);
LLVM_ABI bool consumeSignedInteger(StringRef &Str, unsigned Radix,

View File

@ -385,7 +385,7 @@ size_t StringRef::count(StringRef Str) const {
return Count;
}
static unsigned GetAutoSenseRadix(StringRef &Str) {
unsigned llvm::getAutoSenseRadix(StringRef &Str) {
if (Str.empty())
return 10;
@ -410,7 +410,7 @@ bool llvm::consumeUnsignedInteger(StringRef &Str, unsigned Radix,
unsigned long long &Result) {
// Autosense radix if not specified.
if (Radix == 0)
Radix = GetAutoSenseRadix(Str);
Radix = getAutoSenseRadix(Str);
// Empty strings (after the radix autosense) are invalid.
if (Str.empty()) return true;
@ -509,7 +509,7 @@ bool StringRef::consumeInteger(unsigned Radix, APInt &Result) {
// Autosense radix if not specified.
if (Radix == 0)
Radix = GetAutoSenseRadix(Str);
Radix = getAutoSenseRadix(Str);
assert(Radix > 1 && Radix <= 36);

View File

@ -619,6 +619,19 @@ TEST(StringRefTest, Hashing) {
hash_value(StringRef("hello world").slice(1, -1)));
}
TEST(StringRefTest, getAutoSenseRadix) {
struct RadixPair {
const char *Str;
unsigned Expected;
} RadixNumbers[] = {{"123", 10}, {"1", 10}, {"0b1", 2}, {"01", 8}, {"0o1", 8},
{"0x1", 16}, {"0", 10}, {"00", 8}, {"", 10}};
for (size_t i = 0; i < std::size(RadixNumbers); ++i) {
StringRef number = RadixNumbers[i].Str;
unsigned radix = getAutoSenseRadix(number);
EXPECT_EQ(radix, RadixNumbers[i].Expected);
}
}
struct UnsignedPair {
const char *Str;
uint64_t Expected;