mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Use a ::get method to create the attribute from Attributes::AttrVals instead of a constructor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165923 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2c6893b568
commit
ad4643f54b
@ -89,17 +89,26 @@ public:
|
||||
};
|
||||
private:
|
||||
AttributesImpl *Attrs;
|
||||
|
||||
explicit Attributes(AttributesImpl *A);
|
||||
Attributes(AttributesImpl *A);
|
||||
public:
|
||||
Attributes() : Attrs(0) {}
|
||||
explicit Attributes(LLVMContext &C, ArrayRef<AttrVal> Vals);
|
||||
Attributes(const Attributes &A);
|
||||
Attributes &operator=(const Attributes &A) {
|
||||
Attrs = A.Attrs;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/// get - Return a uniquified Attributes object. This takes the uniquified
|
||||
/// value from the Builder and wraps it in the Attributes class.
|
||||
class Builder;
|
||||
static Attributes get(LLVMContext &Context, ArrayRef<AttrVal> Vals);
|
||||
static Attributes get(LLVMContext &Context, Builder &B);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
/// Attributes::Builder - This class is used in conjunction with the
|
||||
/// Attributes::get method to create an Attributes object. The object itself
|
||||
/// is uniquified. The Builder's value, however, is not. So this can be used
|
||||
/// as a quick way to test for equality, presence of attributes, etc.
|
||||
class Builder {
|
||||
friend class Attributes;
|
||||
uint64_t Bits;
|
||||
@ -122,6 +131,9 @@ public:
|
||||
Builder &addAttribute(Attributes::AttrVal Val);
|
||||
Builder &removeAttribute(Attributes::AttrVal Val);
|
||||
|
||||
Builder &addAttributes(const Attributes &A);
|
||||
Builder &removeAttributes(const Attributes &A);
|
||||
|
||||
/// addRawValue - Add the raw value to the internal representation. This
|
||||
/// should be used ONLY for decoding bitcode!
|
||||
Builder &addRawValue(uint64_t Val);
|
||||
@ -134,9 +146,6 @@ public:
|
||||
/// a power of 2) into the form used internally in Attributes.
|
||||
Builder &addStackAlignmentAttr(unsigned Align);
|
||||
|
||||
Builder &addAttributes(const Attributes &A);
|
||||
Builder &removeAttributes(const Attributes &A);
|
||||
|
||||
/// @brief Remove attributes that are used on functions only.
|
||||
void removeFunctionOnlyAttrs() {
|
||||
removeAttribute(Attributes::NoReturn)
|
||||
@ -167,10 +176,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/// get - Return a uniquified Attributes object. This takes the uniquified
|
||||
/// value from the Builder and wraps it in the Attributes class.
|
||||
static Attributes get(LLVMContext &Context, Builder &B);
|
||||
|
||||
/// @brief Return true if the attribute is present.
|
||||
bool hasAttribute(AttrVal Val) const;
|
||||
|
||||
@ -224,10 +229,10 @@ public:
|
||||
hasAttribute(Attributes::AddressSafety);
|
||||
}
|
||||
|
||||
bool operator == (const Attributes &A) const {
|
||||
bool operator==(const Attributes &A) const {
|
||||
return Attrs == A.Attrs;
|
||||
}
|
||||
bool operator != (const Attributes &A) const {
|
||||
bool operator!=(const Attributes &A) const {
|
||||
return Attrs != A.Attrs;
|
||||
}
|
||||
|
||||
|
@ -28,18 +28,18 @@ using namespace llvm;
|
||||
// Attributes Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Attributes::Attributes(LLVMContext &C, ArrayRef<AttrVal> Vals) {
|
||||
Attributes::Attributes(AttributesImpl *A) : Attrs(A) {}
|
||||
|
||||
Attributes::Attributes(const Attributes &A) : Attrs(A.Attrs) {}
|
||||
|
||||
Attributes Attributes::get(LLVMContext &Context, ArrayRef<AttrVal> Vals) {
|
||||
Attributes::Builder B;
|
||||
for (ArrayRef<AttrVal>::iterator I = Vals.begin(), E = Vals.end();
|
||||
I != E; ++I)
|
||||
B.addAttribute(*I);
|
||||
Attrs = Attributes::get(C, B).Attrs;
|
||||
return Attributes::get(Context, B);
|
||||
}
|
||||
|
||||
Attributes::Attributes(AttributesImpl *A) : Attrs(A) {}
|
||||
|
||||
Attributes::Attributes(const Attributes &A) : Attrs(A.Attrs) {}
|
||||
|
||||
Attributes Attributes::get(LLVMContext &Context, Attributes::Builder &B) {
|
||||
// If there are no attributes, return an empty Attributes class.
|
||||
if (B.Bits == 0)
|
||||
@ -186,8 +186,7 @@ std::string Attributes::getAsString() const {
|
||||
// Attributes::Builder Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Attributes::Builder &Attributes::Builder::
|
||||
addAttribute(Attributes::AttrVal Val) {
|
||||
Attributes::Builder &Attributes::Builder::addAttribute(Attributes::AttrVal Val){
|
||||
Bits |= AttributesImpl::getAttrMask(Val);
|
||||
return *this;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user