diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-12-18 20:30:12 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-19 21:12:03 +0000 |
| commit | c9157d925c489f07ba9c0b2ce47e5149b75969a5 (patch) | |
| tree | 08bc4a3d9cad3f9ebffa558ddf140b9d9257b219 /contrib/llvm-project/llvm/lib/Support/StringExtras.cpp | |
| parent | 2a66844f606a35d68ad8a8061f4bea204274b3bc (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Support/StringExtras.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Support/StringExtras.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/contrib/llvm-project/llvm/lib/Support/StringExtras.cpp b/contrib/llvm-project/llvm/lib/Support/StringExtras.cpp index 5683d7005584..6ae26267337b 100644 --- a/contrib/llvm-project/llvm/lib/Support/StringExtras.cpp +++ b/contrib/llvm-project/llvm/lib/Support/StringExtras.cpp @@ -98,15 +98,16 @@ std::string llvm::convertToSnakeFromCamelCase(StringRef input) { std::string snakeCase; snakeCase.reserve(input.size()); - for (char c : input) { - if (!std::isupper(c)) { - snakeCase.push_back(c); - continue; - } - - if (!snakeCase.empty() && snakeCase.back() != '_') + auto check = [&input](size_t j, function_ref<bool(int)> predicate) { + return j < input.size() && predicate(input[j]); + }; + for (size_t i = 0; i < input.size(); ++i) { + snakeCase.push_back(tolower(input[i])); + // Handles "runs" of capitals, such as in OPName -> op_name. + if (check(i, isupper) && check(i + 1, isupper) && check(i + 2, islower)) + snakeCase.push_back('_'); + if ((check(i, islower) || check(i, isdigit)) && check(i + 1, isupper)) snakeCase.push_back('_'); - snakeCase.push_back(llvm::toLower(c)); } return snakeCase; } |
