[cfe-commits] r43105 - in /cfe/trunk: AST/ExprCXX.cpp AST/Stmt.cpp AST/StmtIterator.cpp include/clang/AST/Decl.h include/clang/AST/Stmt.h include/clang/AST/StmtGraphTraits.h include/clang/AST/StmtIterator.h
Chris Lattner
clattner at apple.com
Wed Oct 17 17:33:13 PDT 2007
> Log:
> Implemented 90% functionality of new child_iterator for Stmt objects
> that will (soon) allow iteration over the initializers in
> declarations. This new iterator mechanism is implemented by the
> classes StmtIterator and ConstStmtIterator.
> +++ cfe/trunk/AST/ExprCXX.cpp Wed Oct 17 19:24:38 2007
> @@ -25,7 +25,7 @@
> }
>
> Stmt::child_iterator CXXCastExpr::child_end() {
> - return child_begin()+1;
> + return ++child_begin();
> }
These probably shouldn't call child_begin(), which is a virtual
method call. They should do what child_begin() does inline.
>
> +void StmtIterator::PrevDecl() { assert(false); }
> +
> +Stmt*& StmtIterator::GetInitializer() const {
> + assert (D && isa<VarDecl>(D));
> + assert (cast<VarDecl>(D)->Init);
cast<VarDecl> on the next line does these asserts internally, you can
drop these two asserts.
> + return reinterpret_cast<Stmt*&>(cast<VarDecl>(D)->Init);
> +}
> +
> +class StmtIterator : public bidirectional_iterator<Stmt*,
> ptrdiff_t> {
Instead of largely duplicating StmtIterator into ConstStmtIterator,
does it make sense to make this a template that is instantiated for
both 'Stmt*' and 'const Stmt *'?
> + Stmt** S;
> + ScopedDecl* D;
Should be merged :)
-Chris
More information about the cfe-commits
mailing list