[clang] c6603cc - [clang][NFC] generate TokenKey from tablegen (#210857)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 28 01:52:50 PDT 2026
Author: Matthias Wippich
Date: 2026-07-28T18:52:44+10:00
New Revision: c6603cce864078da43741e36fb9586a6c72782fe
URL: https://github.com/llvm/llvm-project/commit/c6603cce864078da43741e36fb9586a6c72782fe
DIFF: https://github.com/llvm/llvm-project/commit/c6603cce864078da43741e36fb9586a6c72782fe.diff
LOG: [clang][NFC] generate TokenKey from tablegen (#210857)
Currently the enumerator constants of `TokenKey` are duplicated between
TokenKinds.h and Traits.td. This patch generates the `TokenKey` enum
from tablegen.
This is a followup patch for
https://github.com/llvm/llvm-project/pull/201491#discussion_r3567423553
Added:
Modified:
clang/include/clang/Basic/TokenKinds.h
clang/utils/TableGen/ClangTraitsEmitter.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Basic/TokenKinds.h b/clang/include/clang/Basic/TokenKinds.h
index 89b2d43076511..1f1813e7a5cd2 100644
--- a/clang/include/clang/Basic/TokenKinds.h
+++ b/clang/include/clang/Basic/TokenKinds.h
@@ -23,40 +23,8 @@ namespace clang {
/// Constants for TokenKinds.def
enum TokenKey : unsigned {
- KEYC99 = 0x1,
- KEYCXX = 0x2,
- KEYCXX11 = 0x4,
- KEYGNU = 0x8,
- KEYMS = 0x10,
- BOOLSUPPORT = 0x20,
- KEYALTIVEC = 0x40,
- KEYNOCXX = 0x80,
- KEYBORLAND = 0x100,
- KEYOPENCLC = 0x200,
- KEYC23 = 0x400,
- KEYNOMS18 = 0x800,
- KEYNOOPENCL = 0x1000,
- WCHARSUPPORT = 0x2000,
- HALFSUPPORT = 0x4000,
- CHAR8SUPPORT = 0x8000,
- KEYOBJC = 0x10000,
- KEYZVECTOR = 0x20000,
- KEYCOROUTINES = 0x40000,
- KEYMODULES = 0x80000,
- KEYCXX20 = 0x100000,
- KEYOPENCLCXX = 0x200000,
- KEYMSCOMPAT = 0x400000,
- KEYSYCL = 0x800000,
- KEYCUDA = 0x1000000,
- KEYZOS = 0x2000000,
- KEYHLSL = 0x4000000,
- KEYFIXEDPOINT = 0x8000000,
- KEYDEFERTS = 0x10000000,
- KEYNOHLSL = 0x20000000,
- KEYMAX = KEYNOHLSL, // The maximum key
- KEYALLCXX = KEYCXX | KEYCXX11 | KEYCXX20,
- KEYALL = (KEYMAX | (KEYMAX - 1)) & ~KEYNOMS18 & ~KEYNOOPENCL &
- ~KEYNOHLSL // KEYNOMS18, KEYNOOPENCL, KEYNOHLSL excluded.
+#define EMIT_TOKENKEY
+#include "clang/Basic/Traits.inc"
};
namespace tok {
diff --git a/clang/utils/TableGen/ClangTraitsEmitter.cpp b/clang/utils/TableGen/ClangTraitsEmitter.cpp
index 6ca0aa313f754..b94f82f8475d9 100644
--- a/clang/utils/TableGen/ClangTraitsEmitter.cpp
+++ b/clang/utils/TableGen/ClangTraitsEmitter.cpp
@@ -54,6 +54,12 @@ StringRef recordKindToMacro(const Record *R) {
return Macro;
}
+void emitTokenKey(const RecordKeeper &Records, raw_ostream &OS) {
+ for (const Record *R : getAllDerivedDefsInDeclOrder(Records, "TokenKey")) {
+ OS << " " << R->getName() << " = " << R->getValueAsInt("Value") << ",\n";
+ }
+}
+
void emitMacro(const Record *R, raw_ostream &OS) {
OS << recordKindToMacro(R) << "(";
if (R->isSubClassOf("TransformTypeTrait")) {
@@ -210,7 +216,10 @@ void emitStdNameCases(const RecordKeeper &Records, raw_ostream &OS) {
void clang::EmitClangTraits(const RecordKeeper &Records, raw_ostream &OS) {
emitSourceFileHeader("Type and expression traits", OS, Records);
- OS << "#if defined(EMIT_ENUMS)\n";
+ OS << "#if defined(EMIT_TOKENKEY)\n";
+ emitTokenKey(Records, OS);
+
+ OS << "#elif defined(EMIT_ENUMS)\n";
emitEnums(Records, OS);
OS << "#elif defined(EMIT_ARRAYS)\n";
@@ -227,6 +236,7 @@ void clang::EmitClangTraits(const RecordKeeper &Records, raw_ostream &OS) {
#undef EMIT_ARRAYS
#undef EMIT_ENUMS
#undef EMIT_STD_NAME_CASES
+#undef EMIT_TOKENKEY
)";
}
More information about the cfe-commits
mailing list