Attr.h revision 96329d4e07a9bcddb5a927892b70408c8fd8c474
1d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson//===--- Attr.h - Classes for representing expressions ----------*- C++ -*-===// 2d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// 3d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// The LLVM Compiler Infrastructure 4d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// 5d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// This file is distributed under the University of Illinois Open Source 6d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// License. See LICENSE.TXT for details. 7d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// 8d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson//===----------------------------------------------------------------------===// 9d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// 10d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// This file defines the Attr interface and subclasses. 11d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson// 12d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson//===----------------------------------------------------------------------===// 13d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 1481226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson#ifndef LLVM_CLANG_AST_ATTR_H 1581226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson#define LLVM_CLANG_AST_ATTR_H 16d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 17baa66fc389ca0a9f11e0c864304bcfd89de39439Anders Carlsson#include <cassert> 18c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman#include <string> 19adf21bdb3d17acfdb74657fcbc5035a404c6c8f4Anders Carlsson 20d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonnamespace clang { 21d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 22d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson/// Attr - This represents one attribute. 23d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonclass Attr { 24d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonpublic: 25d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson enum Kind { 26d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes Alias, 27d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson Aligned, 28c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman Packed, 29aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek Annotate, 307e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner NoReturn, 31ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner Deprecated, 32ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner Weak, 33ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner DLLImport, 34ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner DLLExport, 35ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner NoThrow, 36ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner Format, 37440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman Visibility, 38440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman FastCall, 3927ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes StdCall, 4096329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek TransparentUnion, 4196329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek IBOutletKind // Clang-specific. Use "Kind" suffix to not conflict with 4296329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek // the IBOutlet macro. 43d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson }; 44d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 45d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonprivate: 4681226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson Attr *Next; 47d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson Kind AttrKind; 48d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 49d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonprotected: 50f78915fa196b3d284ad756f65eecadaefef71eefAnders Carlsson Attr(Kind AK) : Next(0), AttrKind(AK) {} 51b0dd26825e58a5f2982fd6d4ffa4c4ae6e24ff17Anders Carlssonpublic: 52d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson virtual ~Attr() { 5381226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson delete Next; 54d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson } 55b0dd26825e58a5f2982fd6d4ffa4c4ae6e24ff17Anders Carlsson 56d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson Kind getKind() const { return AttrKind; } 57d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 5881226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson Attr *getNext() { return Next; } 5981226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson const Attr *getNext() const { return Next; } 6081226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson void setNext(Attr *next) { Next = next; } 61d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 62d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson void addAttr(Attr *attr) { 63d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson assert((attr != 0) && "addAttr(): attr is null"); 6481226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson 6581226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson // FIXME: This doesn't preserve the order in any way. 6681226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson attr->Next = Next; 6781226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson Next = attr; 68d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson } 69d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 70d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson // Implement isa/cast/dyncast/etc. 71d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson static bool classof(const Attr *) { return true; } 72d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson}; 73d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 74d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonclass PackedAttr : public Attr { 75d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlssonpublic: 76d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson PackedAttr() : Attr(Packed) {} 77d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 78d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson // Implement isa/cast/dyncast/etc. 79d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson static bool classof(const Attr *A) { 80d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson return A->getKind() == Packed; 81d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson } 82d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson static bool classof(const PackedAttr *A) { return true; } 83d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson}; 84042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson 85042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlssonclass AlignedAttr : public Attr { 86042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson unsigned Alignment; 87042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlssonpublic: 88042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson AlignedAttr(unsigned alignment) : Attr(Aligned), Alignment(alignment) {} 89042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson 90042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson unsigned getAlignment() const { return Alignment; } 91042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson 92042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson // Implement isa/cast/dyncast/etc. 93042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson static bool classof(const Attr *A) { 94042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson return A->getKind() == Aligned; 95042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson } 96042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson static bool classof(const AlignedAttr *A) { return true; } 97042c4e7e9f0b54104f4f2e098c028aa8247b6bedAnders Carlsson}; 9881226601148d7e7c187b96c6ef86e83df204f59fAnders Carlsson 99c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begemanclass AnnotateAttr : public Attr { 100c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman std::string Annotation; 101c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begemanpublic: 102c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman AnnotateAttr(const std::string &ann) : Attr(Annotate), Annotation(ann) {} 103c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman 104c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman const std::string& getAnnotation() const { return Annotation; } 105c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman 106c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman // Implement isa/cast/dyncast/etc. 107c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman static bool classof(const Attr *A) { 108c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman return A->getKind() == Annotate; 109c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman } 110c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman static bool classof(const AnnotateAttr *A) { return true; } 111c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman}; 112d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes 113d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopesclass AliasAttr : public Attr { 114d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes std::string Aliasee; 115d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopespublic: 116d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes AliasAttr(const std::string &aliasee) : Attr(Alias), Aliasee(aliasee) {} 117d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes 118d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes const std::string& getAliasee() const { return Aliasee; } 119d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes 120d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes // Implement isa/cast/dyncast/etc. 121d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes 122d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes static bool classof(const Attr *A) { return A->getKind() == Alias; } 123d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes static bool classof(const AliasAttr *A) { return true; } 124d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes}; 12596329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek 12696329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenekclass IBOutletAttr : public Attr { 12796329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenekpublic: 12896329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek IBOutletAttr() : Attr(IBOutletKind) {} 12996329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek 13096329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek // Implement isa/cast/dyncast/etc. 13196329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek static bool classof(const Attr *A) { 13296329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek return A->getKind() == IBOutletKind; 13396329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek } 13496329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek static bool classof(const IBOutletAttr *A) { return true; } 13596329d4e07a9bcddb5a927892b70408c8fd8c474Ted Kremenek}; 136d4cbda6292b321c2e7dce7f039d92918fee99b3aNuno Lopes 137aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenekclass NoReturnAttr : public Attr { 138aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenekpublic: 139aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek NoReturnAttr() : Attr(NoReturn) {} 140aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek 141aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek // Implement isa/cast/dyncast/etc. 142aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek 143aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek static bool classof(const Attr *A) { return A->getKind() == NoReturn; } 144aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek static bool classof(const NoReturnAttr *A) { return true; } 145aecb38368546aa2cdb58d53bbcb3e8ad46365fc6Ted Kremenek}; 146c398f0b5efb2f8ba39cd5b0170cf697f714afbcbNate Begeman 1477e669b25144c7cfae0e51d4098016d6982504dbdChris Lattnerclass DeprecatedAttr : public Attr { 1487e669b25144c7cfae0e51d4098016d6982504dbdChris Lattnerpublic: 1497e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner DeprecatedAttr() : Attr(Deprecated) {} 1507e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner 1517e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner // Implement isa/cast/dyncast/etc. 1527e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner 1537e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner static bool classof(const Attr *A) { return A->getKind() == Deprecated; } 1547e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner static bool classof(const DeprecatedAttr *A) { return true; } 1557e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner}; 1567e669b25144c7cfae0e51d4098016d6982504dbdChris Lattner 157ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerclass WeakAttr : public Attr { 158ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerpublic: 159ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner WeakAttr() : Attr(Weak) {} 160ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 161ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // Implement isa/cast/dyncast/etc. 162ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 163ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const Attr *A) { return A->getKind() == Weak; } 164ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const WeakAttr *A) { return true; } 165ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner}; 166ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 167ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerclass NoThrowAttr : public Attr { 168ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerpublic: 169ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner NoThrowAttr() : Attr(NoThrow) {} 170ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 171ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // Implement isa/cast/dyncast/etc. 172ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 173ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const Attr *A) { return A->getKind() == NoThrow; } 174ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const NoThrowAttr *A) { return true; } 175ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner}; 176ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 177ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerclass FormatAttr : public Attr { 178ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner std::string Type; 179ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner int formatIdx, firstArg; 180ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerpublic: 181ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner FormatAttr(const std::string &type, int idx, int first) : Attr(Format), 182ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner Type(type), formatIdx(idx), firstArg(first) {} 183ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 184ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner const std::string& getType() const { return Type; } 185ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner int getFormatIdx() const { return formatIdx; } 186ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner int getFirstArg() const { return firstArg; } 187ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 188ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // Implement isa/cast/dyncast/etc. 189ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 190ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const Attr *A) { return A->getKind() == Format; } 191ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const FormatAttr *A) { return true; } 192ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner}; 193ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 194ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerclass VisibilityAttr : public Attr { 195ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerpublic: 1964f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman /// @brief An enumeration for the kinds of visibility of symbols. 1974f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman enum VisibilityTypes { 1984f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman DefaultVisibility = 0, 1994f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman HiddenVisibility, 2004f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman ProtectedVisibility 2014f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman }; 2024f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohmanprivate: 2034f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman VisibilityTypes VisibilityType; 2044f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohmanpublic: 2054f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman VisibilityAttr(VisibilityTypes v) : Attr(Visibility), 206ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner VisibilityType(v) {} 207ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 2084f8d123e3e2c260de3377208106ddba87cee28b4Dan Gohman VisibilityTypes getVisibility() const { return VisibilityType; } 209ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 210ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // Implement isa/cast/dyncast/etc. 211ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 212ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const Attr *A) { return A->getKind() == Visibility; } 213ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const VisibilityAttr *A) { return true; } 214ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner}; 215ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 216ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerclass DLLImportAttr : public Attr { 217ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerpublic: 218ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner DLLImportAttr() : Attr(DLLImport) {} 219ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 220ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // Implement isa/cast/dyncast/etc. 221ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 222ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const Attr *A) { return A->getKind() == DLLImport; } 223ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const DLLImportAttr *A) { return true; } 224ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner}; 225ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 226ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerclass DLLExportAttr : public Attr { 227ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattnerpublic: 228ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner DLLExportAttr() : Attr(DLLExport) {} 229ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 230ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner // Implement isa/cast/dyncast/etc. 231ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 232ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const Attr *A) { return A->getKind() == DLLExport; } 233ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner static bool classof(const DLLExportAttr *A) { return true; } 234ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner}; 235ddee4231e9bdfbac1e1f5385ff1a17fd0e0b0e39Chris Lattner 236440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begemanclass FastCallAttr : public Attr { 237440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begemanpublic: 238440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman FastCallAttr() : Attr(FastCall) {} 239440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman 240440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman // Implement isa/cast/dyncast/etc. 241440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman 242440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman static bool classof(const Attr *A) { return A->getKind() == FastCall; } 243440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman static bool classof(const FastCallAttr *A) { return true; } 244440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman}; 245440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman 246440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begemanclass StdCallAttr : public Attr { 247440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begemanpublic: 248440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman StdCallAttr() : Attr(StdCall) {} 249440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman 250440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman // Implement isa/cast/dyncast/etc. 251440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman 252440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman static bool classof(const Attr *A) { return A->getKind() == StdCall; } 253440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman static bool classof(const StdCallAttr *A) { return true; } 254440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman}; 255440b456709526c4277e71d2e0ff49e5d88dc7b17Nate Begeman 25627ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopesclass TransparentUnionAttr : public Attr { 25727ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopespublic: 25827ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes TransparentUnionAttr() : Attr(TransparentUnion) {} 25927ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes 26027ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes // Implement isa/cast/dyncast/etc. 26127ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes 26227ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes static bool classof(const Attr *A) { return A->getKind() == TransparentUnion; } 26327ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes static bool classof(const TransparentUnionAttr *A) { return true; } 26427ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes}; 26527ae6c6531ac13e4b316e7e0e7b7c846b61a8d15Nuno Lopes 266d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson} // end namespace clang 267d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson 268d429cd459aef723fa0e7a44ac957d4c2256e241cAnders Carlsson#endif 269