[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