From: Duncan P. N. Exon Smith Date: Fri, 12 Aug 2016 03:35:47 +0000 (+0000) Subject: Core: Remove custom next-prev traits from SimpleReference, NFC X-Git-Tag: llvmorg-4.0.0-rc1~12637 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1a2cb97f7b6b0a3ad14c7f076b10a1a19834fac7;p=platform%2Fupstream%2Fllvm.git Core: Remove custom next-prev traits from SimpleReference, NFC There's nothing special about the _next/_prev pointers in SimpleReference, so just use ilist_node to do the work. llvm-svn: 278468 --- diff --git a/lld/include/lld/Core/Simple.h b/lld/include/lld/Core/Simple.h index f75b403..eaad642 100644 --- a/lld/include/lld/Core/Simple.h +++ b/lld/include/lld/Core/Simple.h @@ -25,6 +25,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/ilist.h" +#include "llvm/ADT/ilist_node.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ErrorHandling.h" @@ -111,19 +112,17 @@ private: AtomVector _absolute; }; -class SimpleReference : public Reference { +class SimpleReference : public Reference, + public llvm::ilist_node { public: SimpleReference(Reference::KindNamespace ns, Reference::KindArch arch, Reference::KindValue value, uint64_t off, const Atom *t, Reference::Addend a) - : Reference(ns, arch, value), _target(t), _offsetInAtom(off), _addend(a), - _next(nullptr), _prev(nullptr) { + : Reference(ns, arch, value), _target(t), _offsetInAtom(off), _addend(a) { } SimpleReference() : Reference(Reference::KindNamespace::all, Reference::KindArch::all, 0), - _target(nullptr), _offsetInAtom(0), _addend(0), _next(nullptr), - _prev(nullptr) { - } + _target(nullptr), _offsetInAtom(0), _addend(0) {} uint64_t offsetInAtom() const override { return _offsetInAtom; } @@ -135,17 +134,11 @@ public: Addend addend() const override { return _addend; } void setAddend(Addend a) override { _addend = a; } void setTarget(const Atom *newAtom) override { _target = newAtom; } - SimpleReference *getNext() const { return _next; } - SimpleReference *getPrev() const { return _prev; } - void setNext(SimpleReference *n) { _next = n; } - void setPrev(SimpleReference *p) { _prev = p; } private: const Atom *_target; uint64_t _offsetInAtom; Addend _addend; - SimpleReference *_next; - SimpleReference *_prev; }; } // end namespace lld @@ -232,23 +225,26 @@ public: } DefinedAtom::reference_iterator begin() const override { - const void *it = reinterpret_cast(&*_references.begin()); + const void *it = + reinterpret_cast(_references.begin().getNodePtr()); return reference_iterator(*this, it); } DefinedAtom::reference_iterator end() const override { - const void *it = reinterpret_cast(&*_references.end()); + const void *it = + reinterpret_cast(_references.end().getNodePtr()); return reference_iterator(*this, it); } const Reference *derefIterator(const void *it) const override { - return reinterpret_cast(it); + return &*RefList::const_iterator( + *reinterpret_cast *>(it)); } void incrementIterator(const void *&it) const override { - const SimpleReference* node = reinterpret_cast(it); - const SimpleReference* next = node->getNext(); - it = reinterpret_cast(next); + RefList::const_iterator ref( + *reinterpret_cast *>(it)); + it = reinterpret_cast(std::next(ref).getNodePtr()); } void addReference(Reference::KindNamespace ns,