-//===----------------------------------------------------------------------===//
-/// \class
-/// \brief A set of classes that contain the kind and (optional) value of the
-/// attribute object. There are three main categories: enum attribute entries,
-/// represented by Attribute::AttrKind; alignment attribute entries; and string
-/// attribute enties, which are for target-dependent attributes.
-class AttributeEntry {
- unsigned char KindID;
-protected:
- enum AttrEntryKind {
- EnumAttrEntry,
- AlignAttrEntry,
- StringAttrEntry
- };
-public:
- AttributeEntry(AttrEntryKind Kind)
- : KindID(Kind) {}
- virtual ~AttributeEntry() {}
-
- unsigned getKindID() const { return KindID; }
-
- static inline bool classof(const AttributeEntry *) { return true; }
-};
-
-class EnumAttributeEntry : public AttributeEntry {
- Attribute::AttrKind Kind;
-public:
- EnumAttributeEntry(Attribute::AttrKind Kind)
- : AttributeEntry(EnumAttrEntry), Kind(Kind) {}
-
- Attribute::AttrKind getEnumKind() const { return Kind; }
-
- static inline bool classof(const AttributeEntry *AE) {
- return AE->getKindID() == EnumAttrEntry;
- }
- static inline bool classof(const EnumAttributeEntry *) { return true; }
-};
-
-class AlignAttributeEntry : public AttributeEntry {
- Attribute::AttrKind Kind;
- unsigned Align;
-public:
- AlignAttributeEntry(Attribute::AttrKind Kind, unsigned Align)
- : AttributeEntry(AlignAttrEntry), Kind(Kind), Align(Align) {}
-
- Attribute::AttrKind getEnumKind() const { return Kind; }
- unsigned getAlignment() const { return Align; }
-
- static inline bool classof(const AttributeEntry *AE) {
- return AE->getKindID() == AlignAttrEntry;
- }
- static inline bool classof(const AlignAttributeEntry *) { return true; }
-};
-
-class StringAttributeEntry : public AttributeEntry {
- std::string Kind;
- std::string Val;
-public:
- StringAttributeEntry(StringRef Kind, StringRef Val = StringRef())
- : AttributeEntry(StringAttrEntry), Kind(Kind), Val(Val) {}
-
- StringRef getStringKind() const { return Kind; }
- StringRef getStringValue() const { return Val; }
-
- static inline bool classof(const AttributeEntry *AE) {
- return AE->getKindID() == StringAttrEntry;
- }
- static inline bool classof(const StringAttributeEntry *) { return true; }
-};
-