summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-05-10 01:17:36 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-05-10 01:17:36 +0000
commitd22bd31f8270812dce75282df4890f32f798e2ed (patch)
tree16d48270fcbe3870b589984a2cfd8a5913bf8158
parente0d57a1cf3318352fa3fd7253c744f3f4e079c17 (diff)
downloadclang-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.h18
-rw-r--r--include/clang/AST/DeclBase.h10
-rw-r--r--include/clang/AST/DeclCXX.h4
-rw-r--r--include/clang/AST/DeclObjC.h10
-rw-r--r--include/clang/AST/DeclTemplate.h4
-rw-r--r--include/clang/AST/Redeclarable.h13
-rw-r--r--lib/AST/DeclCXX.cpp4
-rw-r--r--lib/AST/DeclObjC.cpp2
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)