aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Support/TextEncoding.cpp
diff options
context:
space:
mode:
authorJakub Kuderski <jakub@nod-labs.com>2025-10-13 08:14:58 -0400
committerGitHub <noreply@github.com>2025-10-13 08:14:58 -0400
commit8642762ac356f0b8432b78d7a32c1f5213e494b3 (patch)
treeca37fa7ccebc412d5758f19e7997a17320ceee36 /llvm/lib/Support/TextEncoding.cpp
parent1ab59745eeafd288d7139eb95d8f35ded2f0b583 (diff)
downloadllvm-8642762ac356f0b8432b78d7a32c1f5213e494b3.zip
llvm-8642762ac356f0b8432b78d7a32c1f5213e494b3.tar.gz
llvm-8642762ac356f0b8432b78d7a32c1f5213e494b3.tar.bz2
[ADT] Allow arbitrary number of cases in StringSwitch (#163117)
Prior to this patch, `.Cases` and `.CasesLower` were **not** variadic functions and accepted a fixed number of arguments: up to 10 for the former and up to 5 for the latter. This is close to unfixable with variadic templates because of the following constraints: * There would be a variadic number of cases and the single value would be at the very end. For a parameter pack approach to work, we would want the value to be the head and the cases strings to follow, but rotating a parameter pack is quite awkward and requires heavy template metaprogramming. * Even if we did rotate the parameter pack, the existing function signature forces conversion of cases to `StringLiteral` and the value to `T`. This is hard to achieve with variadic templates because we can't specify that all cases must be of type `StringLiteral`, and doing the conversion later won't work because of the attribute enable_if in `StringLiteral`'s constructor that doesn't work on non-literal character arrays. * Refactoring all the existing code to put the value first is very intrusive and bugprone when the value parameter is also a string literal. Instead, generalize `.Cases` and `.CasesLower` and make the code manageable by taking an initializer list. The added benefit is that this clearly delineates where case strings end and where the value begins, which can be hard to tell when the value parameter is also a string literal. I plan to eventually deprecate the manually-enumerated overloads of `.Cases.` and `.CasesLower`.
Diffstat (limited to 'llvm/lib/Support/TextEncoding.cpp')
0 files changed, 0 insertions, 0 deletions