16#include "llvm/TableGen/Error.h"
17#include "llvm/TableGen/Record.h"
27 auto *
def = cast<llvm::DefInit>(init)->getDef();
28 if (
def->isSubClassOf(
"PredTrait"))
30 if (
def->isSubClassOf(
"GenInternalTrait"))
32 if (
def->isSubClassOf(
"InterfaceTrait"))
34 assert(
def->isSubClassOf(
"NativeTrait"));
41 return def->getValueAsListOfStrings(
"cppIncludes");
49 llvm::StringRef trait =
def->getValueAsString(
"trait");
50 llvm::StringRef cppNamespace =
def->getValueAsString(
"cppNamespace");
51 return cppNamespace.empty() ? trait.str()
52 : (cppNamespace +
"::" + trait).str();
56 return def->isSubClassOf(
"StructuralOpTrait");
60 return def->getValueAsString(
"extraConcreteClassDeclaration");
64 return def->getValueAsString(
"extraConcreteClassDefinition");
72 return def->getValueAsString(
"trait");
80 auto pred =
Pred(
def->getValueInit(
"predicate"));
81 return pred.getCondition();
85 return def->getValueAsString(
"summary");
95 llvm::StringRef trait =
def->getValueAsString(
"trait");
96 llvm::StringRef cppNamespace =
def->getValueAsString(
"cppNamespace");
97 return cppNamespace.empty() ? trait.str()
98 : (cppNamespace +
"::" + trait).str();
102 return def->isSubClassOf(
"DeclareInterfaceMethods");
106 return def->getValueAsListOfStrings(
"alwaysOverriddenMethods");
std::vector< StringRef > getAlwaysDeclaredMethods() const
std::string getFullyQualifiedTraitName() const
Interface getInterface() const
bool shouldDeclareMethods() const
StringRef getFullyQualifiedTraitName() const
bool isStructuralOpTrait() const
std::string getFullyQualifiedTraitName() const
StringRef getExtraConcreteClassDeclaration() const
StringRef getExtraConcreteClassDefinition() const
StringRef getSummary() const
std::string getPredTemplate() const
std::vector< StringRef > getCppIncludes() const
Trait(Kind kind, const llvm::Record *def)
static Trait create(const llvm::Init *init)
Include the generated interface declarations.