11#include "llvm/TableGen/Error.h"
12#include "llvm/TableGen/Record.h"
22 assert(def->isSubClassOf(
"EnumCase") &&
23 "must be subclass of TableGen 'EnumCase' class");
29 return def->getValueAsString(
"symbol");
39 assert(isSubClassOf(
"EnumInfo") &&
40 "must be subclass of TableGen 'EnumInfo' class");
48 return def->isSubClassOf(className);
66 std::optional<Attribute> enumAttrInfo =
asEnumAttr();
68 (!enumAttrInfo || !enumAttrInfo->getConstBuilderTemplate().empty());
72 return def->getValueAsString(
"className");
76 return def->getValueAsString(
"summary");
80 return def->getValueAsString(
"description");
84 return def->getValueAsString(
"cppNamespace");
94 return def->getValueAsString(
"underlyingType");
98 return def->getValueAsString(
"underlyingToSymbolFnName");
102 return def->getValueAsString(
"stringToSymbolFnName");
106 return def->getValueAsString(
"symbolToStringFnName");
110 return def->getValueAsString(
"symbolToStringFnRetType");
114 return def->getValueAsString(
"maxEnumValFnName");
118 const auto *inits =
def->getValueAsListInit(
"enumerants");
120 std::vector<EnumCase> cases;
121 cases.reserve(inits->size());
123 for (
const Init *init : *inits) {
124 cases.emplace_back(cast<DefInit>(init));
132 def->getValueAsBit(
"genSpecializedAttr");
136 return def->getValueAsDef(
"baseAttrClass");
140 return def->getValueAsString(
"specializedAttrClassName");
144 return def->getValueAsBit(
"printBitEnumPrimaryGroups");
148 return def->getValueAsBit(
"printBitEnumQuoted");
152 return def->getValueAsString(
"separator");
157 if (separator ==
"|")
159 if (separator ==
",")
161 if (separator.empty())
163 PrintFatalError(
def->getLoc(),
164 "bit enum separator must be '|', ',', or a space ' '");
170 return "parseOptionalVerticalBar";
172 return "parseOptionalComma";
175 PrintFatalError(
def->getLoc(),
176 "a bit enum with a space separator has no separator "
179 llvm_unreachable(
"unknown bit enum separator kind");
StringRef getSymbol() const
const llvm::Record & getDef() const
EnumCase(const llvm::Record *record)
bool isNewStyleBitEnum() const
StringRef getSymbolToStringFnName() const
bool genSpecializedAttr() const
const llvm::Record * getBaseAttrClass() const
BitEnumSeparatorKind getBitEnumSeparatorKind() const
std::vector< EnumCase > getAllCases() const
EnumInfo(const llvm::Record *record)
bool printBitEnumPrimaryGroups() const
int64_t getBitwidth() const
bool isSubClassOf(StringRef className) const
StringRef getMaxEnumValFnName() const
bool hasParserPrinter() const
const llvm::Record & getDef() const
StringRef getUnderlyingToSymbolFnName() const
StringRef getUnderlyingType() const
bool printBitEnumQuoted() const
StringRef getStringToSymbolFnName() const
StringRef getCppNamespace() const
StringRef getSummary() const
StringRef getSpecializedAttrClassName() const
StringRef getEnumClassName() const
std::string getQualifiedName() const
StringRef getBitEnumSeparatorParser() const
StringRef getDescription() const
StringRef getSymbolToStringFnRetType() const
StringRef getBitEnumSeparator() const
std::optional< Attribute > asEnumAttr() const
Include the generated interface declarations.