From: Ted Kremenek Date: Fri, 20 Jun 2008 21:39:47 +0000 (+0000) Subject: Added "Decl::getCodyBody()", a virtual method that returns the root AST node (Stmt... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=792481eec23d8c1aa92173be589e2ae9d02514a5;p=clang Added "Decl::getCodyBody()", a virtual method that returns the root AST node (Stmt*) that the Decl wraps (if any). Currently this only returns a non-null value for FunctionDecl and ObjCMethodDecl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52552 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index bf7efe8043..a3713d5f3d 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -438,6 +438,10 @@ public: return getBody(Definition); } + virtual Stmt* getCodeBody() const { + return getBody(); + } + /// isThisDeclarationADefinition - Returns whether this specific /// declaration of the function is also a definition. This does not /// determine whether the function has been defined (e.g., in a diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 55c2e61ff0..69db09c11b 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -195,6 +195,12 @@ public: return IdentifierNamespace(IDNS_Tag | IDNS_Ordinary); } } + + // getCodeBody - 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* getCodeBody() const { return 0; } + // global temp stats (until we have a per-module visitor) static void addDeclKind(Kind k); static bool CollectingStats(bool Enable = false); diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 093a5cf1a2..ed09eacfd9 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -185,9 +185,11 @@ public: ImplementationControl getImplementationControl() const { return ImplementationControl(DeclImplementation); } - Stmt *getBody() { return Body; } - const Stmt *getBody() const { return Body; } + + Stmt *getBody() const { return Body; } void setBody(Stmt *B) { Body = B; } + + virtual Stmt* getCodeBody() const { return getBody(); } // Implement isa/cast/dyncast/etc. static bool classof(const Decl *D) { return D->getKind() == ObjCMethod; }