[cfe-commits] r43295 - in /cfe/trunk: AST/StmtIterator.cpp include/clang/AST/Decl.h include/clang/AST/StmtIterator.h

Ted Kremenek kremenek at apple.com
Wed Oct 24 09:52:35 PDT 2007


Author: kremenek
Date: Wed Oct 24 11:52:34 2007
New Revision: 43295

URL: http://llvm.org/viewvc/llvm-project?rev=43295&view=rev
Log:
Modified operator* for StmtIterator to return Stmt*& instead of Stmt*.
This permits in-place replacement of the original AST statements.

Modified:
    cfe/trunk/AST/StmtIterator.cpp
    cfe/trunk/include/clang/AST/Decl.h
    cfe/trunk/include/clang/AST/StmtIterator.h

Modified: cfe/trunk/AST/StmtIterator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/StmtIterator.cpp?rev=43295&r1=43294&r2=43295&view=diff

==============================================================================
--- cfe/trunk/AST/StmtIterator.cpp (original)
+++ cfe/trunk/AST/StmtIterator.cpp Wed Oct 24 11:52:34 2007
@@ -61,6 +61,6 @@
   Ptr.D = lastVD;
 }
 
-Stmt* StmtIteratorBase::GetInitializer() const {
-  return cast<VarDecl>(Ptr.D)->getInit();
+Stmt*& StmtIteratorBase::GetInitializer() const {
+  return reinterpret_cast<Stmt*&>(cast<VarDecl>(Ptr.D)->Init);
 }

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

==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Wed Oct 24 11:52:34 2007
@@ -269,7 +269,7 @@
 private:
   StorageClass SClass;
   Expr *Init;  
-  friend struct StmtIterator;
+  friend class StmtIteratorBase;
 };
 
 /// BlockVarDecl - Represent a local variable declaration.

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

==============================================================================
--- cfe/trunk/include/clang/AST/StmtIterator.h (original)
+++ cfe/trunk/include/clang/AST/StmtIterator.h Wed Oct 24 11:52:34 2007
@@ -28,7 +28,7 @@
   
   void NextDecl();
   void PrevDecl();
-  Stmt* GetInitializer() const;
+  Stmt*& GetInitializer() const;
 
   StmtIteratorBase(Stmt** s) : FirstDecl(NULL) { Ptr.S = s; }
   StmtIteratorBase(ScopedDecl* d);
@@ -36,11 +36,11 @@
 };
   
   
-template <typename DERIVED, typename STMT_PTR>
+template <typename DERIVED, typename REFERENCE>
 class StmtIteratorImpl : public StmtIteratorBase, 
                          public std::iterator<std::bidirectional_iterator_tag,
-                                              STMT_PTR, ptrdiff_t, 
-                                              STMT_PTR, STMT_PTR> {  
+                                              REFERENCE, ptrdiff_t, 
+                                              REFERENCE, REFERENCE> {  
 protected:
   StmtIteratorImpl(const StmtIteratorBase& RHS) : StmtIteratorBase(RHS) {}
 public:
@@ -83,17 +83,17 @@
     return FirstDecl != RHS.FirstDecl || Ptr.S != RHS.Ptr.S;
   }
   
-  STMT_PTR operator*() const { 
-    return (STMT_PTR) (FirstDecl ? GetInitializer() : *Ptr.S);
+  REFERENCE operator*() const { 
+    return (REFERENCE) (FirstDecl ? GetInitializer() : *Ptr.S);
   }
   
-  STMT_PTR operator->() const { return operator*(); }   
+  REFERENCE operator->() const { return operator*(); }   
 };
 
-struct StmtIterator : public StmtIteratorImpl<StmtIterator,Stmt*> {
-  explicit StmtIterator() : StmtIteratorImpl<StmtIterator,Stmt*>() {}
-  StmtIterator(Stmt** S) : StmtIteratorImpl<StmtIterator,Stmt*>(S) {}
-  StmtIterator(ScopedDecl* D) : StmtIteratorImpl<StmtIterator,Stmt*>(D) {}
+struct StmtIterator : public StmtIteratorImpl<StmtIterator,Stmt*&> {
+  explicit StmtIterator() : StmtIteratorImpl<StmtIterator,Stmt*&>() {}
+  StmtIterator(Stmt** S) : StmtIteratorImpl<StmtIterator,Stmt*&>(S) {}
+  StmtIterator(ScopedDecl* D) : StmtIteratorImpl<StmtIterator,Stmt*&>(D) {}
 };
 
 struct ConstStmtIterator : public StmtIteratorImpl<ConstStmtIterator,





More information about the cfe-commits mailing list