aboutsummaryrefslogtreecommitdiff
path: root/include/clang
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang')
-rw-r--r--include/clang/AST/Decl.h6
-rw-r--r--include/clang/AST/DeclBase.h10
-rw-r--r--include/clang/AST/DeclTemplate.h4
3 files changed, 14 insertions, 6 deletions
diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h
index a5c3ea0680..a35638f315 100644
--- a/include/clang/AST/Decl.h
+++ b/include/clang/AST/Decl.h
@@ -437,7 +437,7 @@ public:
return First->PreviousDeclaration.getPointer();
}
- virtual Decl *getPrimaryDecl() const;
+ virtual VarDecl *getCanonicalDecl();
/// \brief Iterates through all the redeclarations of the same var decl.
class redecl_iterator {
@@ -908,7 +908,7 @@ public:
void setPreviousDeclaration(FunctionDecl * PrevDecl);
- virtual Decl *getPrimaryDecl() const;
+ virtual FunctionDecl *getCanonicalDecl();
/// \brief Iterates through all the redeclarations of the same function decl.
class redecl_iterator {
@@ -1316,6 +1316,8 @@ public:
void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
virtual SourceRange getSourceRange() const;
+
+ virtual TagDecl* getCanonicalDecl();
/// isDefinition - Return true if this decl has its body specified.
bool isDefinition() const {
diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h
index 2d056c479b..5350706ae0 100644
--- a/include/clang/AST/DeclBase.h
+++ b/include/clang/AST/DeclBase.h
@@ -312,12 +312,14 @@ public:
// be defined inside or outside a function etc).
bool isDefinedOutsideFunctionOrMethod() const;
- /// \brief When there are multiple re-declarations (e.g. for functions),
- /// this will return the primary one which all of them point to.
- virtual Decl *getPrimaryDecl() const { return const_cast<Decl*>(this); }
+ /// \brief Retrieves the "canonical" declaration of the given declaration.
+ virtual Decl *getCanonicalDecl() { return this; }
+ const Decl *getCanonicalDecl() const {
+ return const_cast<Decl*>(this)->getCanonicalDecl();
+ }
/// \brief Whether this particular Decl is a primary one.
- bool isPrimaryDecl() const { return getPrimaryDecl() == this; }
+ bool isCanonicalDecl() const { return getCanonicalDecl() == this; }
/// getBody - If this Decl represents a declaration for a body of code,
/// such as a function or method definition, this method returns the
diff --git a/include/clang/AST/DeclTemplate.h b/include/clang/AST/DeclTemplate.h
index 5d0fe158e0..8601620931 100644
--- a/include/clang/AST/DeclTemplate.h
+++ b/include/clang/AST/DeclTemplate.h
@@ -604,6 +604,8 @@ public:
CommonOrPrev = Prev;
}
+ virtual FunctionTemplateDecl *getCanonicalDecl();
+
/// Create a template function node.
static FunctionTemplateDecl *Create(ASTContext &C, DeclContext *DC,
SourceLocation L,
@@ -1027,6 +1029,8 @@ public:
ClassTemplateDecl *getPreviousDeclaration() const {
return PreviousDeclaration;
}
+
+ virtual ClassTemplateDecl *getCanonicalDecl();
/// Create a class template node.
static ClassTemplateDecl *Create(ASTContext &C, DeclContext *DC,