diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-02-17 07:13:24 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-02-17 07:13:24 +0000 |
commit | 1aa3d81c6e63959ef149489eca42b1520c521af4 (patch) | |
tree | 439fad8931715cca0a233425e76335bb43d604d1 | |
parent | f4a03cc2b022fab0ffac6c65449555c52036dece (diff) |
Devirtualize Decl::getBody() and Decl::hasBody().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125731 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/Decl.h | 4 | ||||
-rw-r--r-- | include/clang/AST/DeclBase.h | 4 | ||||
-rw-r--r-- | include/clang/AST/DeclObjC.h | 2 | ||||
-rw-r--r-- | lib/AST/DeclBase.cpp | 18 |
4 files changed, 23 insertions, 5 deletions
diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 7140e808ef..cba71ae8cd 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -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); } diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 472cb3bb74..3e92c4e651 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -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. diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 2c784f2554..81f5d39bf2 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -300,7 +300,7 @@ public: return ImplementationControl(DeclImplementation); } - virtual Stmt *getBody() const { + Stmt *getBody() const { return (Stmt*) Body; } CompoundStmt *getCompoundBody() { return (CompoundStmt*)Body; } diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index a95ea3f646..110de64d8c 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -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. |