diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-05-10 01:17:36 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-05-10 01:17:36 +0000 |
commit | d22bd31f8270812dce75282df4890f32f798e2ed (patch) | |
tree | 16d48270fcbe3870b589984a2cfd8a5913bf8158 | |
parent | e0d57a1cf3318352fa3fd7253c744f3f4e079c17 (diff) | |
download | clang-d22bd31f8270812dce75282df4890f32f798e2ed.tar.gz clang-d22bd31f8270812dce75282df4890f32f798e2ed.tar.bz2 clang-d22bd31f8270812dce75282df4890f32f798e2ed.tar.xz |
Stop all the Decl classes poking at Redeclarable's data member directly, and make getNextRedeclaration follow the pattern of its friends getPreviousDecl and getMostRecentDecl.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208467 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/Decl.h | 18 | ||||
-rw-r--r-- | include/clang/AST/DeclBase.h | 10 | ||||
-rw-r--r-- | include/clang/AST/DeclCXX.h | 4 | ||||
-rw-r--r-- | include/clang/AST/DeclObjC.h | 10 | ||||
-rw-r--r-- | include/clang/AST/DeclTemplate.h | 4 | ||||
-rw-r--r-- | include/clang/AST/Redeclarable.h | 13 | ||||
-rw-r--r-- | lib/AST/DeclCXX.cpp | 4 | ||||
-rw-r--r-- | lib/AST/DeclObjC.cpp | 2 |
8 files changed, 37 insertions, 28 deletions
diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 5ecd234343..d18653ef9a 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -359,7 +359,7 @@ class NamespaceDecl : public NamedDecl, public DeclContext, NamespaceDecl *PrevDecl); typedef Redeclarable<NamespaceDecl> redeclarable_base; - NamespaceDecl *getNextRedeclaration() override; + NamespaceDecl *getNextRedeclarationImpl() override; NamespaceDecl *getPreviousDeclImpl() override; NamespaceDecl *getMostRecentDeclImpl() override; @@ -773,7 +773,9 @@ protected: TypeSourceInfo *TInfo, StorageClass SC); typedef Redeclarable<VarDecl> redeclarable_base; - VarDecl *getNextRedeclaration() override { return RedeclLink.getNext(); } + VarDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); + } VarDecl *getPreviousDeclImpl() override { return getPreviousDecl(); } @@ -1553,7 +1555,9 @@ protected: DNLoc(NameInfo.getInfo()) {} typedef Redeclarable<FunctionDecl> redeclarable_base; - FunctionDecl *getNextRedeclaration() override { return RedeclLink.getNext(); } + FunctionDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); + } FunctionDecl *getPreviousDeclImpl() override { return getPreviousDecl(); } @@ -2406,8 +2410,8 @@ protected: : TypeDecl(DK, DC, IdLoc, Id, StartLoc), MaybeModedTInfo(TInfo) {} typedef Redeclarable<TypedefNameDecl> redeclarable_base; - TypedefNameDecl *getNextRedeclaration() override { - return RedeclLink.getNext(); + TypedefNameDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); } TypedefNameDecl *getPreviousDeclImpl() override { return getPreviousDecl(); @@ -2590,7 +2594,9 @@ protected: } typedef Redeclarable<TagDecl> redeclarable_base; - TagDecl *getNextRedeclaration() override { return RedeclLink.getNext(); } + TagDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); + } TagDecl *getPreviousDeclImpl() override { return getPreviousDecl(); } diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 8c8332ba18..eb11d8bbec 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -713,16 +713,16 @@ protected: /// /// Decl subclasses that can be redeclared should override this method so that /// Decl::redecl_iterator can iterate over them. - virtual Decl *getNextRedeclaration() { return this; } + virtual Decl *getNextRedeclarationImpl() { return this; } /// \brief Implementation of getPreviousDecl(), to be overridden by any /// subclass that has a redeclaration chain. virtual Decl *getPreviousDeclImpl() { return nullptr; } - + /// \brief Implementation of getMostRecentDecl(), to be overridden by any - /// subclass that has a redeclaration chain. + /// subclass that has a redeclaration chain. virtual Decl *getMostRecentDeclImpl() { return this; } - + public: /// \brief Iterates through all the redeclarations of the same decl. class redecl_iterator { @@ -746,7 +746,7 @@ public: redecl_iterator& operator++() { assert(Current && "Advancing while iterator has reached end"); // Get either previous decl or latest decl. - Decl *Next = Current->getNextRedeclaration(); + Decl *Next = Current->getNextRedeclarationImpl(); assert(Next && "Should return next redeclaration or itself, never null!"); Current = (Next != Starter) ? Next : nullptr; return *this; diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 0f0849d371..57c3b6fcb4 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -2721,8 +2721,8 @@ class UsingShadowDecl : public NamedDecl, public Redeclarable<UsingShadowDecl> { } typedef Redeclarable<UsingShadowDecl> redeclarable_base; - UsingShadowDecl *getNextRedeclaration() override { - return RedeclLink.getNext(); + UsingShadowDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); } UsingShadowDecl *getPreviousDeclImpl() override { return getPreviousDecl(); diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 50f99e7639..f613f185f9 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -247,7 +247,7 @@ private: /// \brief A definition will return its interface declaration. /// An interface declaration will return its definition. /// Otherwise it will return itself. - ObjCMethodDecl *getNextRedeclaration() override; + ObjCMethodDecl *getNextRedeclarationImpl() override; public: static ObjCMethodDecl * @@ -756,8 +756,8 @@ class ObjCInterfaceDecl : public ObjCContainerDecl void allocateDefinitionData(); typedef Redeclarable<ObjCInterfaceDecl> redeclarable_base; - ObjCInterfaceDecl *getNextRedeclaration() override { - return RedeclLink.getNext(); + ObjCInterfaceDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); } ObjCInterfaceDecl *getPreviousDeclImpl() override { return getPreviousDecl(); @@ -1531,8 +1531,8 @@ class ObjCProtocolDecl : public ObjCContainerDecl, void allocateDefinitionData(); typedef Redeclarable<ObjCProtocolDecl> redeclarable_base; - ObjCProtocolDecl *getNextRedeclaration() override { - return RedeclLink.getNext(); + ObjCProtocolDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); } ObjCProtocolDecl *getPreviousDeclImpl() override { return getPreviousDecl(); diff --git a/include/clang/AST/DeclTemplate.h b/include/clang/AST/DeclTemplate.h index b0c9d5296b..e9a0175854 100644 --- a/include/clang/AST/DeclTemplate.h +++ b/include/clang/AST/DeclTemplate.h @@ -532,8 +532,8 @@ class RedeclarableTemplateDecl : public TemplateDecl, public Redeclarable<RedeclarableTemplateDecl> { typedef Redeclarable<RedeclarableTemplateDecl> redeclarable_base; - RedeclarableTemplateDecl *getNextRedeclaration() override { - return RedeclLink.getNext(); + RedeclarableTemplateDecl *getNextRedeclarationImpl() override { + return getNextRedeclaration(); } RedeclarableTemplateDecl *getPreviousDeclImpl() override { return getPreviousDecl(); diff --git a/include/clang/AST/Redeclarable.h b/include/clang/AST/Redeclarable.h index 1006566e6d..9fbc88e958 100644 --- a/include/clang/AST/Redeclarable.h +++ b/include/clang/AST/Redeclarable.h @@ -23,7 +23,6 @@ namespace clang { /// \brief Provides common interface for the Decls that can be redeclared. template<typename decl_type> class Redeclarable { - protected: class DeclLink { llvm::PointerIntPair<decl_type *, 1, bool> NextAndIsPrevious; @@ -58,6 +57,10 @@ protected: /// If there is only one declaration, it is <pointer to self, true> DeclLink RedeclLink; + decl_type *getNextRedeclaration() const { + return RedeclLink.getNext(); + } + public: Redeclarable() : RedeclLink(LatestDeclLink(static_cast<decl_type*>(this))) { } @@ -65,7 +68,7 @@ public: /// is the first declaration. decl_type *getPreviousDecl() { if (RedeclLink.NextIsPrevious()) - return RedeclLink.getNext(); + return getNextRedeclaration(); return nullptr; } const decl_type *getPreviousDecl() const { @@ -96,12 +99,12 @@ public: /// \brief Returns the most recent (re)declaration of this declaration. decl_type *getMostRecentDecl() { - return getFirstDecl()->RedeclLink.getNext(); + return getFirstDecl()->getNextRedeclaration(); } /// \brief Returns the most recent (re)declaration of this declaration. const decl_type *getMostRecentDecl() const { - return getFirstDecl()->RedeclLink.getNext(); + return getFirstDecl()->getNextRedeclaration(); } /// \brief Set the previous declaration. If PrevDecl is NULL, set this as the @@ -142,7 +145,7 @@ public: } // Get either previous decl or latest decl. - decl_type *Next = Current->RedeclLink.getNext(); + decl_type *Next = Current->getNextRedeclaration(); Current = (Next != Starter) ? Next : nullptr; return *this; } diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index d0ec4b9fe5..20d240b9e6 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -1946,8 +1946,8 @@ NamespaceDecl *NamespaceDecl::CreateDeserialized(ASTContext &C, unsigned ID) { 0, 0); } -NamespaceDecl *NamespaceDecl::getNextRedeclaration() { - return RedeclLink.getNext(); +NamespaceDecl *NamespaceDecl::getNextRedeclarationImpl() { + return getNextRedeclaration(); } NamespaceDecl *NamespaceDecl::getPreviousDeclImpl() { return getPreviousDecl(); diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index aedb097bee..4bea9f948b 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -721,7 +721,7 @@ void ObjCMethodDecl::setMethodParams(ASTContext &C, /// \brief A definition will return its interface declaration. /// An interface declaration will return its definition. /// Otherwise it will return itself. -ObjCMethodDecl *ObjCMethodDecl::getNextRedeclaration() { +ObjCMethodDecl *ObjCMethodDecl::getNextRedeclarationImpl() { ASTContext &Ctx = getASTContext(); ObjCMethodDecl *Redecl = 0; if (HasRedeclaration) |