aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2009-07-18 08:50:13 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2009-07-18 08:50:13 +0000
commitf23e839e9ddea324c743d26da43fb767f90ca223 (patch)
treea9f7bf15e394d35178abcd3e6b86f301739ef894 /lib
parent21b01c7e481b9c243f98155f8ab0cf4302d25f2a (diff)
Introduce the Redeclarable template class, which serves as a base type defining the common interface for Decls that can be redeclared.
Make FunctionDecl and VarDecl use it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76297 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/AST/Decl.cpp46
1 files changed, 4 insertions, 42 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 23782d6223..e59d632f90 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -362,29 +362,8 @@ const Expr *VarDecl::getDefinition(const VarDecl *&Def) const {
return 0;
}
-void VarDecl::setPreviousDeclaration(VarDecl *PrevDecl) {
- if (PrevDecl) {
- // Point to previous.
- PreviousDeclaration.setPointer(PrevDecl);
- PreviousDeclaration.setInt(0);
-
- // First one will point to this one as latest.
- // getCanonicalDecl returns the first one.
- VarDecl *First = PrevDecl->getCanonicalDecl();
- assert(First->PreviousDeclaration.getInt() == 1 && "Expected first");
- First->PreviousDeclaration.setPointer(this);
- } else {
- // This is first.
- PreviousDeclaration.setPointer(this);
- PreviousDeclaration.setInt(1);
- }
-}
-
VarDecl *VarDecl::getCanonicalDecl() {
- VarDecl *Var = this;
- while (Var->getPreviousDeclaration())
- Var = Var->getPreviousDeclaration();
- return Var;
+ return getFirstDeclaration();
}
//===----------------------------------------------------------------------===//
@@ -586,22 +565,8 @@ bool FunctionDecl::isExternGNUInline(ASTContext &Context) const {
void
FunctionDecl::setPreviousDeclaration(FunctionDecl *PrevDecl) {
- if (PrevDecl) {
- // Point to previous.
- PreviousDeclaration.setPointer(PrevDecl);
- PreviousDeclaration.setInt(0);
-
- // First one will point to this one as latest.
- // getCanonicalDecl returns the first one.
- FunctionDecl *First = PrevDecl->getCanonicalDecl();
- assert(First->PreviousDeclaration.getInt() == 1 && "Expected first");
- First->PreviousDeclaration.setPointer(this);
- } else {
- // This is first.
- PreviousDeclaration.setPointer(this);
- PreviousDeclaration.setInt(1);
- }
-
+ Redeclarable<FunctionDecl>::setPreviousDeclaration(PrevDecl);
+
if (FunctionTemplateDecl *FunTmpl = getDescribedFunctionTemplate()) {
FunctionTemplateDecl *PrevFunTmpl
= PrevDecl? PrevDecl->getDescribedFunctionTemplate() : 0;
@@ -611,10 +576,7 @@ FunctionDecl::setPreviousDeclaration(FunctionDecl *PrevDecl) {
}
FunctionDecl *FunctionDecl::getCanonicalDecl() {
- FunctionDecl *FD = this;
- while (FD->getPreviousDeclaration())
- FD = FD->getPreviousDeclaration();
- return FD;
+ return getFirstDeclaration();
}
/// getOverloadedOperator - Which C++ overloaded operator this