[cfe-commits] r95190 - in /cfe/trunk: include/clang/AST/StmtCXX.h lib/AST/Stmt.cpp lib/Sema/SemaStmt.cpp

Sam Weinig sam.weinig at gmail.com
Tue Feb 2 18:09:59 PST 2010


Author: weinig
Date: Tue Feb  2 20:09:59 2010
New Revision: 95190

URL: http://llvm.org/viewvc/llvm-project?rev=95190&view=rev
Log:
Remove the SmallVector from CXXTryStmt.

Modified:
    cfe/trunk/include/clang/AST/StmtCXX.h
    cfe/trunk/lib/AST/Stmt.cpp
    cfe/trunk/lib/Sema/SemaStmt.cpp

Modified: cfe/trunk/include/clang/AST/StmtCXX.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/StmtCXX.h?rev=95190&r1=95189&r2=95190&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/StmtCXX.h (original)
+++ cfe/trunk/include/clang/AST/StmtCXX.h Tue Feb  2 20:09:59 2010
@@ -59,12 +59,16 @@
 ///
 class CXXTryStmt : public Stmt {
   SourceLocation TryLoc;
+
   // First place is the guarded CompoundStatement. Subsequent are the handlers.
-  // More than three handlers should be rare.
-  llvm::SmallVector<Stmt*, 4> Stmts;
+  Stmt **Stmts;
+  unsigned NumHandlers;
+
+protected:
+  virtual void DoDestroy(ASTContext &Ctx);
 
 public:
-  CXXTryStmt(SourceLocation tryLoc, Stmt *tryBlock,
+  CXXTryStmt(ASTContext &C, SourceLocation tryLoc, Stmt *tryBlock,
              Stmt **handlers, unsigned numHandlers);
 
   virtual SourceRange getSourceRange() const {
@@ -72,14 +76,14 @@
   }
 
   SourceLocation getTryLoc() const { return TryLoc; }
-  SourceLocation getEndLoc() const { return Stmts.back()->getLocEnd(); }
+  SourceLocation getEndLoc() const { return Stmts[NumHandlers]->getLocEnd(); }
 
   CompoundStmt *getTryBlock() { return llvm::cast<CompoundStmt>(Stmts[0]); }
   const CompoundStmt *getTryBlock() const {
     return llvm::cast<CompoundStmt>(Stmts[0]);
   }
 
-  unsigned getNumHandlers() const { return Stmts.size() - 1; }
+  unsigned getNumHandlers() const { return NumHandlers; }
   CXXCatchStmt *getHandler(unsigned i) {
     return llvm::cast<CXXCatchStmt>(Stmts[i + 1]);
   }

Modified: cfe/trunk/lib/AST/Stmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Stmt.cpp?rev=95190&r1=95189&r2=95190&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Stmt.cpp (original)
+++ cfe/trunk/lib/AST/Stmt.cpp Tue Feb  2 20:09:59 2010
@@ -339,6 +339,12 @@
   }
 }
 
+QualType CXXCatchStmt::getCaughtType() const {
+  if (ExceptionDecl)
+    return ExceptionDecl->getType();
+  return QualType();
+}
+
 //===----------------------------------------------------------------------===//
 // Constructors
 //===----------------------------------------------------------------------===//
@@ -401,6 +407,14 @@
   RParenLoc = rparenloc;
 }
 
+CXXTryStmt::CXXTryStmt(ASTContext &C, SourceLocation tryLoc, Stmt *tryBlock,
+                       Stmt **handlers, unsigned numHandlers)
+  : Stmt(CXXTryStmtClass), TryLoc(tryLoc), NumHandlers(numHandlers) {
+  Stmts = new (C) Stmt*[NumHandlers + 1];
+  Stmts[0] = tryBlock;
+  std::copy(handlers, handlers + NumHandlers, Stmts + 1);
+}
+
 //===----------------------------------------------------------------------===//
 // AST Destruction.
 //===----------------------------------------------------------------------===//
@@ -479,6 +493,14 @@
   C.Deallocate((void *)this);
 }
 
+void CXXTryStmt::DoDestroy(ASTContext& C) {
+  DestroyChildren(C);
+  C.Deallocate(Stmts);
+
+  this->~CXXTryStmt();
+  C.Deallocate((void *)this);
+}
+
 //===----------------------------------------------------------------------===//
 //  Child Iterators for iterating over subexpressions/substatements
 //===----------------------------------------------------------------------===//
@@ -641,19 +663,6 @@
   return &HandlerBlock + 1;
 }
 
-QualType CXXCatchStmt::getCaughtType() const {
-  if (ExceptionDecl)
-    return ExceptionDecl->getType();
-  return QualType();
-}
-
 // CXXTryStmt
 Stmt::child_iterator CXXTryStmt::child_begin() { return &Stmts[0]; }
-Stmt::child_iterator CXXTryStmt::child_end() { return &Stmts[0]+Stmts.size(); }
-
-CXXTryStmt::CXXTryStmt(SourceLocation tryLoc, Stmt *tryBlock,
-                       Stmt **handlers, unsigned numHandlers)
-  : Stmt(CXXTryStmtClass), TryLoc(tryLoc) {
-  Stmts.push_back(tryBlock);
-  Stmts.insert(Stmts.end(), handlers, handlers + numHandlers);
-}
+Stmt::child_iterator CXXTryStmt::child_end() { return &Stmts[0]+NumHandlers+1; }

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=95190&r1=95189&r2=95190&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Tue Feb  2 20:09:59 2010
@@ -1551,7 +1551,7 @@
 
   CurFunctionNeedsScopeChecking = true;
   RawHandlers.release();
-  return Owned(new (Context) CXXTryStmt(TryLoc,
+  return Owned(new (Context) CXXTryStmt(Context, TryLoc,
                                         static_cast<Stmt*>(TryBlock.release()),
                                         Handlers, NumHandlers));
 }





More information about the cfe-commits mailing list