================
@@ -46,6 +46,59 @@ class LangOptions;
class MultiKeywordSelector;
class SourceLocation;
+// This is an inline namespace to allow both clang and lldb to use them without
+// namespace prefixes (via `using namespace` in lldb's case).
+inline namespace TokenKeyEnumerators {
----------------
dsandersllvm wrote:
I don't mind splitting it but that PR won't make sense without the context of
this PR
The reason we need the `inline namespace` is because of this code:
```
#define KEYWORD(NAME, FLAGS) \
AddResult = getKeywordStatus(LangOpts, FLAGS); \
...
#include "clang/Basic/TokenKinds.def"
```
I can't reference `FLAGS` as `clang::FLAGS` because some of the `KEYWORD()`
declaration's in TokenKinds.def are the `|` of multiple values such as
`BOOLSUPPORT|KEYC23` and I'd need the namespace to appear on each identifier.
`enum class` is ruled out for the same reason, and `enum class` combined with
`using enum ...` requires C++20 and therefore can't be used.
`inline namespace` allows lldb to import them with `using namespace ...` for
use as bare names without changing how clang uses them
https://github.com/llvm/llvm-project/pull/164284
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits