Refactor NodeCategory for X-macros (#5029)

Taking an approach similar to NameId in #5018
This commit is contained in:
Jon Ross-Perkins
2025-02-27 01:00:10 +00:00
committed by GitHub
parent c4c3381b18
commit 90b6f5a22c
6 changed files with 141 additions and 85 deletions
-31
View File
@@ -9,37 +9,6 @@
namespace Carbon::Parse {
auto NodeCategory::Print(llvm::raw_ostream& out) const -> void {
llvm::ListSeparator sep("|");
auto value = value_;
do {
// The lowest set bit in the value, or 0 (`None`) if no bits are set.
auto lowest_bit = static_cast<RawEnumType>(value & -value);
switch (lowest_bit) {
#define CARBON_NODE_CATEGORY(Name) \
case NodeCategory::Name: { \
out << sep << #Name; \
break; \
}
CARBON_NODE_CATEGORY(Decl);
CARBON_NODE_CATEGORY(Expr);
CARBON_NODE_CATEGORY(ImplAs);
CARBON_NODE_CATEGORY(MemberExpr);
CARBON_NODE_CATEGORY(MemberName);
CARBON_NODE_CATEGORY(Modifier);
CARBON_NODE_CATEGORY(Pattern);
CARBON_NODE_CATEGORY(Statement);
CARBON_NODE_CATEGORY(IntConst);
CARBON_NODE_CATEGORY(Requirement);
CARBON_NODE_CATEGORY(NonExprIdentifierName);
CARBON_NODE_CATEGORY(PackageName);
CARBON_NODE_CATEGORY(None);
#undef CARBON_NODE_CATEGORY
}
value &= ~lowest_bit;
} while (value);
}
CARBON_DEFINE_ENUM_CLASS_NAMES(NodeKind) = {
#define CARBON_PARSE_NODE_KIND(Name) CARBON_ENUM_CLASS_NAME_STRING(Name)
#include "toolchain/parse/node_kind.def"