forked from OSchip/llvm-project
Devirtualize Decl::getBody() and Decl::hasBody().
llvm-svn: 125731
This commit is contained in:
parent
a43942a48e
commit
f7b2c93b2f
|
@ -1332,7 +1332,7 @@ public:
|
|||
/// containing the body (if there is one).
|
||||
bool hasBody(const FunctionDecl *&Definition) const;
|
||||
|
||||
virtual bool hasBody() const {
|
||||
bool hasBody() const {
|
||||
const FunctionDecl* Definition;
|
||||
return hasBody(Definition);
|
||||
}
|
||||
|
@ -1346,7 +1346,7 @@ public:
|
|||
/// unnecessary AST de-serialization of the body.
|
||||
Stmt *getBody(const FunctionDecl *&Definition) const;
|
||||
|
||||
virtual Stmt *getBody() const {
|
||||
Stmt *getBody() const {
|
||||
const FunctionDecl* Definition;
|
||||
return getBody(Definition);
|
||||
}
|
||||
|
|
|
@ -545,11 +545,11 @@ public:
|
|||
/// getBody - If this Decl represents a declaration for a body of code,
|
||||
/// such as a function or method definition, this method returns the
|
||||
/// top-level Stmt* of that body. Otherwise this method returns null.
|
||||
virtual Stmt* getBody() const { return 0; }
|
||||
Stmt* getBody() const;
|
||||
|
||||
/// \brief Returns true if this Decl represents a declaration for a body of
|
||||
/// code, such as a function or method definition.
|
||||
virtual bool hasBody() const { return getBody() != 0; }
|
||||
bool hasBody() const;
|
||||
|
||||
/// getBodyRBrace - Gets the right brace of the body, if a body exists.
|
||||
/// This works whether the body is a CompoundStmt or a CXXTryStmt.
|
||||
|
|
|
@ -300,7 +300,7 @@ public:
|
|||
return ImplementationControl(DeclImplementation);
|
||||
}
|
||||
|
||||
virtual Stmt *getBody() const {
|
||||
Stmt *getBody() const {
|
||||
return (Stmt*) Body;
|
||||
}
|
||||
CompoundStmt *getCompoundBody() { return (CompoundStmt*)Body; }
|
||||
|
|
|
@ -429,6 +429,24 @@ DeclContext *Decl::castToDeclContext(const Decl *D) {
|
|||
}
|
||||
}
|
||||
|
||||
Stmt *Decl::getBody() const {
|
||||
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(this))
|
||||
return FD->getBody();
|
||||
if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(this))
|
||||
return MD->getBody();
|
||||
if (const BlockDecl *BD = dyn_cast<BlockDecl>(this))
|
||||
return BD->getBody();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Decl::hasBody() const {
|
||||
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(this))
|
||||
return FD->hasBody();
|
||||
|
||||
return getBody() != 0;
|
||||
}
|
||||
|
||||
SourceLocation Decl::getBodyRBrace() const {
|
||||
// Special handling of FunctionDecl to avoid de-serializing the body from PCH.
|
||||
// FunctionDecl stores EndRangeLoc for this purpose.
|
||||
|
|
Loading…
Reference in New Issue