diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-18 08:50:13 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2009-07-18 08:50:13 +0000 |
commit | f23e839e9ddea324c743d26da43fb767f90ca223 (patch) | |
tree | a9f7bf15e394d35178abcd3e6b86f301739ef894 /lib | |
parent | 21b01c7e481b9c243f98155f8ab0cf4302d25f2a (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.cpp | 46 |
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 |