From 65aa3b9fda7b2114f708014e3d42176abc0e39ab Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Mon, 6 Oct 2008 20:54:44 +0000 Subject: [PATCH] Add DeclStmt::hasSolitaryDecl() and DeclStmt::getSolitaryDecl() git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57204 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Stmt.h | 17 +++++++++++++++++ lib/AST/Stmt.cpp | 6 +++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 20b01cec55..210a142123 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -140,6 +140,7 @@ public: /// the first statement can be an expression or a declaration. /// class DeclStmt : public Stmt { +protected: ScopedDecl *TheDecl; SourceLocation StartLoc, EndLoc; public: @@ -148,8 +149,24 @@ public: virtual void Destroy(ASTContext& Ctx); + // hasSolitaryDecl - This method returns true if this DeclStmt refers + // to a single Decl. + bool hasSolitaryDecl() const; + const ScopedDecl *getDecl() const { return TheDecl; } ScopedDecl *getDecl() { return TheDecl; } + + const ScopedDecl* getSolitaryDecl() const { + assert (hasSolitaryDecl() && + "Caller assumes this DeclStmt points to one Decl*"); + return TheDecl; + } + + ScopedDecl* getSolitaryDecl() { + assert (hasSolitaryDecl() && + "Caller assumes this DeclStmt points to one Decl*"); + return TheDecl; + } SourceLocation getStartLoc() const { return StartLoc; } SourceLocation getEndLoc() const { return EndLoc; } diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 689fe852d8..fbb369f387 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -188,7 +188,7 @@ ObjCAtCatchStmt::ObjCAtCatchStmt(SourceLocation atCatchLoc, //===----------------------------------------------------------------------===// // DeclStmt -Stmt::child_iterator DeclStmt::child_begin() { return getDecl(); } +Stmt::child_iterator DeclStmt::child_begin() { return TheDecl; } Stmt::child_iterator DeclStmt::child_end() { return child_iterator(); } DeclStmt::decl_iterator& DeclStmt::decl_iterator::operator++() { @@ -196,6 +196,10 @@ DeclStmt::decl_iterator& DeclStmt::decl_iterator::operator++() { return *this; } +bool DeclStmt::hasSolitaryDecl() const { + return TheDecl->getNextDeclarator() == 0; +} + // NullStmt Stmt::child_iterator NullStmt::child_begin() { return child_iterator(); } Stmt::child_iterator NullStmt::child_end() { return child_iterator(); } -- 2.40.0