diff --git a/include/clang/AST/EvaluatedExprVisitor.h b/include/clang/AST/EvaluatedExprVisitor.h index be606e0fda093bad9e88eb77495df14584f6243b..5616d8822e53ac64792ce987d5013cff29f78e8e 100644 --- a/include/clang/AST/EvaluatedExprVisitor.h +++ b/include/clang/AST/EvaluatedExprVisitor.h @@ -71,8 +71,7 @@ public: /// \brief The basis case walks all of the children of the statement or /// expression, assuming they are all potentially evaluated. void VisitStmt(Stmt *S) { - for(Stmt::child_iterator C = S->child_begin(), CEnd = S->child_end(); - C != CEnd; ++C) + for (Stmt::child_range C = S->children(); C; ++C) this->Visit(*C); } }; diff --git a/include/clang/AST/RecursiveASTVisitor.h b/include/clang/AST/RecursiveASTVisitor.h index 700dd8eb6ba522786b2af9c9b690228a00f93791..8ddd5875ce4cd58324f086bb2defd67b733e9333 100644 --- a/include/clang/AST/RecursiveASTVisitor.h +++ b/include/clang/AST/RecursiveASTVisitor.h @@ -1561,12 +1561,11 @@ DEF_TRAVERSE_DECL(ParmVarDecl, { // ----------------- Stmt traversal ----------------- // // For stmts, we automate (in the DEF_TRAVERSE_STMT macro) iterating -// over the children defined in child_begin/child_end (every stmt -// defines these, though sometimes the range is empty). Each -// individual Traverse* method only needs to worry about children -// other than those. To see what child_begin()/end() does for a given -// class, see, e.g., -// http://clang.llvm.org/doxygen/Stmt_8cpp_source.html +// over the children defined in children() (every stmt defines these, +// though sometimes the range is empty). Each individual Traverse* +// method only needs to worry about children other than those. To see +// what children() does for a given class, see, e.g., +// http://clang.llvm.org/doxygen/Stmt_8cpp_source.html // This macro makes available a variable S, the passed-in stmt. #define DEF_TRAVERSE_STMT(STMT, CODE) \ @@ -1574,9 +1573,8 @@ template<typename Derived> \ bool RecursiveASTVisitor<Derived>::Traverse##STMT (STMT *S) { \ TRY_TO(WalkUpFrom##STMT(S)); \ { CODE; } \ - for (Stmt::child_iterator C = S->child_begin(), CEnd = S->child_end(); \ - C != CEnd; ++C) { \ - TRY_TO(TraverseStmt(*C)); \ + for (Stmt::child_range range = S->children(); range; ++range) { \ + TRY_TO(TraverseStmt(*range)); \ } \ return true; \ } @@ -1592,12 +1590,12 @@ DEF_TRAVERSE_STMT(AsmStmt, { for (unsigned I = 0, E = S->getNumClobbers(); I < E; ++I) { TRY_TO(TraverseStmt(S->getClobber(I))); } - // child_begin()/end() iterates over inputExpr and outputExpr. + // children() iterates over inputExpr and outputExpr. }) DEF_TRAVERSE_STMT(CXXCatchStmt, { TRY_TO(TraverseDecl(S->getExceptionDecl())); - // child_begin()/end() iterates over the handler block. + // children() iterates over the handler block. }) DEF_TRAVERSE_STMT(DeclStmt, { @@ -1605,11 +1603,11 @@ DEF_TRAVERSE_STMT(DeclStmt, { I != E; ++I) { TRY_TO(TraverseDecl(*I)); } - // Suppress the default iteration over child_begin/end by + // Suppress the default iteration over children() by // returning. Here's why: A DeclStmt looks like 'type var [= // initializer]'. The decls above already traverse over the // initializers, so we don't have to do it again (which - // child_begin/end would do). + // children() would do). return true; }) @@ -1712,9 +1710,8 @@ bool RecursiveASTVisitor<Derived>::TraverseInitListExpr(InitListExpr *S) { S = Syn; TRY_TO(WalkUpFromInitListExpr(S)); // All we need are the default actions. FIXME: use a helper function. - for (Stmt::child_iterator C = S->child_begin(), CEnd = S->child_end(); - C != CEnd; ++C) { - TRY_TO(TraverseStmt(*C)); + for (Stmt::child_range range = S->children(); range; ++range) { + TRY_TO(TraverseStmt(*range)); } return true; } diff --git a/include/clang/AST/StmtIterator.h b/include/clang/AST/StmtIterator.h index 0d4657bdccef3749aaae894f9aef41c6754fedde..851c001adc543459b16bc9eed51fc61055875e7c 100644 --- a/include/clang/AST/StmtIterator.h +++ b/include/clang/AST/StmtIterator.h @@ -146,14 +146,85 @@ struct ConstStmtIterator : public StmtIteratorImpl<ConstStmtIterator, StmtIteratorImpl<ConstStmtIterator,const Stmt*>(RHS) {} }; -typedef std::pair<StmtIterator,StmtIterator> StmtRange; -typedef std::pair<ConstStmtIterator,ConstStmtIterator> ConstStmtRange; +/// A range of statement iterators. +/// +/// This class provides some extra functionality beyond std::pair +/// in order to allow the following idiom: +/// for (StmtRange range = stmt->children(); range; ++range) +struct StmtRange : std::pair<StmtIterator,StmtIterator> { + StmtRange() {} + StmtRange(const StmtIterator &begin, const StmtIterator &end) + : std::pair<StmtIterator,StmtIterator>(begin, end) {} + + bool empty() const { return first == second; } + operator bool() const { return !empty(); } + + Stmt *operator->() const { return first.operator->(); } + Stmt *&operator*() const { return first.operator*(); } + + StmtRange &operator++() { + assert(!empty() && "incrementing on empty range"); + ++first; + return *this; + } -inline StmtIterator begin(StmtRange range) { return range.first; } -inline StmtIterator end(StmtRange range) { return range.second; } + StmtRange operator++(int) { + assert(!empty() && "incrementing on empty range"); + StmtRange copy = *this; + ++first; + return copy; + } -inline ConstStmtIterator begin(ConstStmtRange range) { return range.first; } -inline ConstStmtIterator end(ConstStmtRange range) { return range.second; } + friend const StmtIterator &begin(const StmtRange &range) { + return range.first; + } + friend const StmtIterator &end(const StmtRange &range) { + return range.second; + } +}; + +/// A range of const statement iterators. +/// +/// This class provides some extra functionality beyond std::pair +/// in order to allow the following idiom: +/// for (ConstStmtRange range = stmt->children(); range; ++range) +struct ConstStmtRange : std::pair<ConstStmtIterator,ConstStmtIterator> { + ConstStmtRange() {} + ConstStmtRange(const ConstStmtIterator &begin, + const ConstStmtIterator &end) + : std::pair<ConstStmtIterator,ConstStmtIterator>(begin, end) {} + ConstStmtRange(const StmtRange &range) + : std::pair<ConstStmtIterator,ConstStmtIterator>(range.first, range.second) + {} + ConstStmtRange(const StmtIterator &begin, const StmtIterator &end) + : std::pair<ConstStmtIterator,ConstStmtIterator>(begin, end) {} + + bool empty() const { return first == second; } + operator bool() const { return !empty(); } + + const Stmt *operator->() const { return first.operator->(); } + const Stmt *operator*() const { return first.operator*(); } + + ConstStmtRange &operator++() { + assert(!empty() && "incrementing on empty range"); + ++first; + return *this; + } + + ConstStmtRange operator++(int) { + assert(!empty() && "incrementing on empty range"); + ConstStmtRange copy = *this; + ++first; + return copy; + } + + friend const ConstStmtIterator &begin(const ConstStmtRange &range) { + return range.first; + } + friend const ConstStmtIterator &end(const ConstStmtRange &range) { + return range.second; + } +}; } // end namespace clang diff --git a/include/clang/Analysis/Visitors/CFGStmtVisitor.h b/include/clang/Analysis/Visitors/CFGStmtVisitor.h index 6421f185ff7f8c4c7f2cf96171905814306c028a..2d59119f253d169a32a162df4687f2d10606d51d 100644 --- a/include/clang/Analysis/Visitors/CFGStmtVisitor.h +++ b/include/clang/Analysis/Visitors/CFGStmtVisitor.h @@ -155,7 +155,7 @@ public: } } - for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I != E;++I) + for (Stmt::child_range I = S->children(); I; ++I) if (*I) static_cast<ImplClass*>(this)->Visit(*I); } }; diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h index 005e0e586396520248e5a2bb74df145d8d92624b..12547e0969a1219aef40f084d1abd46c9544053a 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h @@ -28,8 +28,7 @@ template <class T> bool containsStmt(const Stmt *S) { if (isa<T>(S)) return true; - for (Stmt::const_child_iterator I = S->child_begin(); I != S->child_end(); - ++I) + for (Stmt::const_child_range I = S->children(); I; ++I) if (const Stmt *child = *I) if (containsStmt<T>(child)) return true; diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 6280d633aa3d564daa865e1b8107342fe9a6c4bc..884a184b5267e3558f5eadf42469a31b8126b1e0 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1594,9 +1594,7 @@ static Expr::CanThrowResult MergeCanThrow(Expr::CanThrowResult CT1, static Expr::CanThrowResult CanSubExprsThrow(ASTContext &C, const Expr *CE) { Expr *E = const_cast<Expr*>(CE); Expr::CanThrowResult R = Expr::CT_Cannot; - Expr::child_iterator I, IE; - for (llvm::tie(I, IE) = E->children(); - I != IE && R != Expr::CT_Can; ++I) { + for (Expr::child_range I = E->children(); I && R != Expr::CT_Can; ++I) { R = MergeCanThrow(R, cast<Expr>(*I)->CanThrow(C)); } return R; @@ -2593,7 +2591,7 @@ DesignatedInitExpr::DesignatedInitExpr(ASTContext &C, QualType Ty, this->Designators = new (C) Designator[NumDesignators]; // Record the initializer itself. - child_iterator Child = child_begin(); + child_range Child = children(); *Child++ = Init; // Copy the designators and their subexpressions, computing diff --git a/lib/AST/ParentMap.cpp b/lib/AST/ParentMap.cpp index 87f8f36e6e220ebe5205fb3e3f1b8f55e49d5aff..eca351aec8dd849a1ba0c1a7f812a840195418da 100644 --- a/lib/AST/ParentMap.cpp +++ b/lib/AST/ParentMap.cpp @@ -21,7 +21,7 @@ using namespace clang; typedef llvm::DenseMap<Stmt*, Stmt*> MapTy; static void BuildParentMap(MapTy& M, Stmt* S) { - for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I!=E; ++I) + for (Stmt::child_range I = S->children(); I; ++I) if (*I) { M[*I] = S; BuildParentMap(M, *I); diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp index 5def7d9a0b8c20c7c61992ca8228d35533aba957..e5e759d9effc3c9c0b9dcc94b927737681eb8d1a 100644 --- a/lib/AST/StmtDumper.cpp +++ b/lib/AST/StmtDumper.cpp @@ -59,9 +59,9 @@ namespace { Visit(S); // Print out children. - Stmt::child_iterator CI = S->child_begin(), CE = S->child_end(); - if (CI != CE) { - while (CI != CE) { + Stmt::child_range CI = S->children(); + if (CI) { + while (CI) { OS << '\n'; DumpSubTree(*CI++); } diff --git a/lib/AST/StmtProfile.cpp b/lib/AST/StmtProfile.cpp index 707cac4edfe915fcdb4d98705f2c2b90b945f622..b96ffe8a48e81fda1f95fa2cc2428b1d33d6069e 100644 --- a/lib/AST/StmtProfile.cpp +++ b/lib/AST/StmtProfile.cpp @@ -68,8 +68,7 @@ namespace { void StmtProfiler::VisitStmt(Stmt *S) { ID.AddInteger(S->getStmtClass()); - for (Stmt::child_iterator C = S->child_begin(), CEnd = S->child_end(); - C != CEnd; ++C) + for (Stmt::child_range C = S->children(); C; ++C) Visit(*C); } diff --git a/lib/Analysis/AnalysisContext.cpp b/lib/Analysis/AnalysisContext.cpp index d9ac1de3d158018bf769f5a6afa0eacc373d57d1..5233d3b8f9f89e02ae94cc2cc684b997d6307ba0 100644 --- a/lib/Analysis/AnalysisContext.cpp +++ b/lib/Analysis/AnalysisContext.cpp @@ -273,7 +273,7 @@ public: } void VisitStmt(Stmt *S) { - for (Stmt::child_iterator I = S->child_begin(), E = S->child_end();I!=E;++I) + for (Stmt::child_range I = S->children(); I; ++I) if (Stmt *child = *I) Visit(child); } diff --git a/lib/Analysis/CFG.cpp b/lib/Analysis/CFG.cpp index 2cf2751879b23c66b2992bef64ff42963128d397..bc3699ba68ab8eb90a38975db666168f74c1e370 100644 --- a/lib/Analysis/CFG.cpp +++ b/lib/Analysis/CFG.cpp @@ -921,8 +921,7 @@ CFGBlock *CFGBuilder::VisitStmt(Stmt *S, AddStmtChoice asc) { /// VisitChildren - Visit the children of a Stmt. CFGBlock *CFGBuilder::VisitChildren(Stmt* Terminator) { CFGBlock *B = Block; - for (Stmt::child_iterator I = Terminator->child_begin(), - E = Terminator->child_end(); I != E; ++I) { + for (Stmt::child_range I = Terminator->children(); I; ++I) { if (*I) B = Visit(*I); } return B; @@ -2503,8 +2502,7 @@ CFGBlock *CFGBuilder::VisitChildrenForTemporaryDtors(Stmt *E) { // them in helper vector. typedef llvm::SmallVector<Stmt *, 4> ChildrenVect; ChildrenVect ChildrenRev; - for (Stmt::child_iterator I = E->child_begin(), L = E->child_end(); - I != L; ++I) { + for (Stmt::child_range I = E->children(); I; ++I) { if (*I) ChildrenRev.push_back(*I); } @@ -2697,7 +2695,7 @@ static void FindSubExprAssignments(Stmt *S, if (!S) return; - for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I!=E; ++I) { + for (Stmt::child_range I = S->children(); I; ++I) { Stmt *child = *I; if (!child) continue; @@ -3020,7 +3018,7 @@ static void print_elem(llvm::raw_ostream &OS, StmtPrinterHelper* Helper, if (StmtExpr* SE = dyn_cast<StmtExpr>(S)) { CompoundStmt* Sub = SE->getSubStmt(); - if (Sub->child_begin() != Sub->child_end()) { + if (Sub->children()) { OS << "({ ... ; "; Helper->handledStmt(*SE->getSubStmt()->body_rbegin(),OS); OS << " })\n"; diff --git a/lib/Analysis/PseudoConstantAnalysis.cpp b/lib/Analysis/PseudoConstantAnalysis.cpp index 25b04fc2e8a32452d0f1ce22730a1aa45cbcf469..ff96eb4a0a73b36c93f26a95dd56f079d02fc73e 100644 --- a/lib/Analysis/PseudoConstantAnalysis.cpp +++ b/lib/Analysis/PseudoConstantAnalysis.cpp @@ -233,8 +233,7 @@ void PseudoConstantAnalysis::RunAnalysis() { } // switch (head->getStmtClass()) // Add all substatements to the worklist - for (Stmt::const_child_iterator I = Head->child_begin(), - E = Head->child_end(); I != E; ++I) + for (Stmt::const_child_range I = Head->children(); I; ++I) if (*I) WorkList.push_back(*I); } // while (!WorkList.empty()) diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp index 73bce8b3b7b02e22db8be5a861f44f42820b173d..570743268ed7b81c7a2ccf1ef07365dd04dbb355 100644 --- a/lib/Analysis/UninitializedValues.cpp +++ b/lib/Analysis/UninitializedValues.cpp @@ -230,7 +230,7 @@ bool TransferFuncs::VisitStmt(Stmt* S) { // We don't stop at the first subexpression that is Uninitialized because // evaluating some subexpressions may result in propogating "Uninitialized" // or "Initialized" to variables referenced in the other subexpressions. - for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I!=E; ++I) + for (Stmt::child_range I = S->children(); I; ++I) if (*I && Visit(*I) == Uninitialized) x = Uninitialized; return x; diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index 5a4f2b70e33698c1845f97b2f7bb7b71b2136d00..38ca0214da3041973cd912323619e887c92177b6 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -396,8 +396,7 @@ bool CodeGenFunction::ContainsLabel(const Stmt *S, bool IgnoreCaseStmts) { IgnoreCaseStmts = true; // Scan subexpressions for verboten labels. - for (Stmt::const_child_iterator I = S->child_begin(), E = S->child_end(); - I != E; ++I) + for (Stmt::const_child_range I = S->children(); I; ++I) if (ContainsLabel(*I, IgnoreCaseStmts)) return true; diff --git a/lib/Frontend/StmtXML.cpp b/lib/Frontend/StmtXML.cpp index c2ffe4f2a74c9d24cedbeb586ad6f374250c0b89..c113cc18dc1c9d9e60f393d67a63a8509b217a7b 100644 --- a/lib/Frontend/StmtXML.cpp +++ b/lib/Frontend/StmtXML.cpp @@ -61,8 +61,7 @@ namespace { Doc.PrintDecl(*DI); } } else { - for (Stmt::child_iterator i = S->child_begin(), e = S->child_end(); - i != e; ++i) + for (Stmt::child_range i = S->children(); i; ++i) DumpSubTree(*i); } Doc.toParent(); diff --git a/lib/Index/ASTVisitor.h b/lib/Index/ASTVisitor.h index 943c72025312540d37a7971b45a0baa2c17826b8..0b8425b2f337e915a87d9f6aedd1c8fb15953297 100644 --- a/lib/Index/ASTVisitor.h +++ b/lib/Index/ASTVisitor.h @@ -108,8 +108,7 @@ public: } void VisitStmt(Stmt *Node) { - for (Stmt::child_iterator - I = Node->child_begin(), E = Node->child_end(); I != E; ++I) + for (Stmt::child_range I = Node->children(); I; ++I) if (*I) Visit(*I); } diff --git a/lib/Index/CallGraph.cpp b/lib/Index/CallGraph.cpp index dedcc0e8081665674fad6504df80a221ac8129eb..bf3f5a8a8d248547df10dc6be6343d7c7471c2d9 100644 --- a/lib/Index/CallGraph.cpp +++ b/lib/Index/CallGraph.cpp @@ -40,7 +40,7 @@ public: void VisitCallExpr(CallExpr *CE); void VisitChildren(Stmt *S) { - for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I != E;++I) + for (Stmt::child_range I = S->children(); I; ++I) if (*I) static_cast<CGBuilder*>(this)->Visit(*I); } diff --git a/lib/Rewrite/RewriteObjC.cpp b/lib/Rewrite/RewriteObjC.cpp index cf11dc64c69cb67aa748087be76d9aa4125c52b3..543439aac1d0dd8db193ce1e8d52e9a7adc727ff 100644 --- a/lib/Rewrite/RewriteObjC.cpp +++ b/lib/Rewrite/RewriteObjC.cpp @@ -1491,8 +1491,7 @@ Stmt *RewriteObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV, } Stmt *RewriteObjC::RewriteObjCNestedIvarRefExpr(Stmt *S, bool &replaced) { - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) { + for (Stmt::child_range CI = S->children(); CI; ++CI) { if (*CI) { Stmt *newStmt = RewriteObjCNestedIvarRefExpr(*CI, replaced); if (newStmt) @@ -1837,8 +1836,7 @@ Stmt *RewriteObjC::RewriteObjCSynchronizedStmt(ObjCAtSynchronizedStmt *S) { void RewriteObjC::WarnAboutReturnGotoStmts(Stmt *S) { // Perform a bottom up traversal of all children. - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) WarnAboutReturnGotoStmts(*CI); @@ -1852,8 +1850,7 @@ void RewriteObjC::WarnAboutReturnGotoStmts(Stmt *S) void RewriteObjC::HasReturnStmts(Stmt *S, bool &hasReturns) { // Perform a bottom up traversal of all children. - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) HasReturnStmts(*CI, hasReturns); @@ -1864,8 +1861,7 @@ void RewriteObjC::HasReturnStmts(Stmt *S, bool &hasReturns) void RewriteObjC::RewriteTryReturnStmts(Stmt *S) { // Perform a bottom up traversal of all children. - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) { RewriteTryReturnStmts(*CI); } @@ -1888,8 +1884,7 @@ void RewriteObjC::RewriteTryReturnStmts(Stmt *S) { void RewriteObjC::RewriteSyncReturnStmts(Stmt *S, std::string syncExitBuf) { // Perform a bottom up traversal of all children. - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) { RewriteSyncReturnStmts(*CI, syncExitBuf); } @@ -4545,8 +4540,7 @@ void RewriteObjC::InsertBlockLiteralsWithinMethod(ObjCMethodDecl *MD) { } void RewriteObjC::GetBlockDeclRefExprs(Stmt *S) { - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) { if (BlockExpr *CBE = dyn_cast<BlockExpr>(*CI)) GetBlockDeclRefExprs(CBE->getBody()); @@ -4574,8 +4568,7 @@ void RewriteObjC::GetBlockDeclRefExprs(Stmt *S) { void RewriteObjC::GetInnerBlockDeclRefExprs(Stmt *S, llvm::SmallVector<BlockDeclRefExpr *, 8> &InnerBlockDeclRefs, llvm::SmallPtrSet<const DeclContext *, 8> &InnerContexts) { - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) { if (BlockExpr *CBE = dyn_cast<BlockExpr>(*CI)) { InnerContexts.insert(cast<DeclContext>(CBE->getBlockDecl())); @@ -5463,8 +5456,7 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp, // we get this right. void RewriteObjC::CollectPropertySetters(Stmt *S) { // Perform a bottom up traversal of all children. - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) CollectPropertySetters(*CI); @@ -5488,8 +5480,7 @@ Stmt *RewriteObjC::RewriteFunctionBodyOrGlobalInitializer(Stmt *S) { SourceRange OrigStmtRange = S->getSourceRange(); // Perform a bottom up rewrite of all children. - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); - CI != E; ++CI) + for (Stmt::child_range CI = S->children(); CI; ++CI) if (*CI) { Stmt *newStmt; Stmt *S = (*CI); diff --git a/lib/Sema/JumpDiagnostics.cpp b/lib/Sema/JumpDiagnostics.cpp index bbe7bd5b28e6772c71f33dd2732571d85db0cc47..bd6b48a30ff2748d2a2debb7a83f00f84dbefc7a 100644 --- a/lib/Sema/JumpDiagnostics.cpp +++ b/lib/Sema/JumpDiagnostics.cpp @@ -221,8 +221,7 @@ void JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned ParentScope) { break; } - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); CI != E; - ++CI) { + for (Stmt::child_range CI = S->children(); CI; ++CI) { if (SkipFirstSubStmt) { SkipFirstSubStmt = false; continue; diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 24dcfb62a1f157566c0395221b49bd49bdf8d82d..03ce7f3708a7bac7e5ce7871ecab401c319b54ae 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -2954,8 +2954,7 @@ void AnalyzeImplicitConversions(Sema &S, Expr *OrigE, SourceLocation CC) { // Now just recurse over the expression's children. CC = E->getExprLoc(); - for (Stmt::child_iterator I = E->child_begin(), IE = E->child_end(); - I != IE; ++I) + for (Stmt::child_range I = E->children(); I; ++I) AnalyzeImplicitConversions(S, cast<Expr>(*I), CC); } diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 90ec795005ed7942b1ea3ad2fc4a9e089727956e..cc3a02fb2aa4536e723097123bd59989996f2901 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -63,8 +63,7 @@ namespace { /// VisitExpr - Visit all of the children of this expression. bool CheckDefaultArgumentVisitor::VisitExpr(Expr *Node) { bool IsInvalid = false; - for (Stmt::child_iterator I = Node->child_begin(), - E = Node->child_end(); I != E; ++I) + for (Stmt::child_range I = Node->children(); I; ++I) IsInvalid |= Visit(*I); return IsInvalid; } @@ -1365,8 +1364,7 @@ static bool InitExprContainsUninitializedFields(const Stmt *S, if (UOE->getOpcode() == UO_AddrOf) return false; } - for (Stmt::const_child_iterator it = S->child_begin(), e = S->child_end(); - it != e; ++it) { + for (Stmt::const_child_range it = S->children(); it; ++it) { if (!*it) { // An expression such as 'member(arg ?: "")' may trigger this. continue; @@ -7199,8 +7197,7 @@ void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) { } static void SearchForReturnInStmt(Sema &Self, Stmt *S) { - for (Stmt::child_iterator CI = S->child_begin(), E = S->child_end(); CI != E; - ++CI) { + for (Stmt::child_range CI = S->children(); CI; ++CI) { Stmt *SubStmt = *CI; if (!SubStmt) continue; diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 32e0039b0d3e4a8fc51c68b5007754a7501ad448..88091006a81c8172d5432da81b7b209d2a2d0bfe 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -1686,8 +1686,7 @@ void EnqueueVisitor::AddTypeLoc(TypeSourceInfo *TI) { } void EnqueueVisitor::EnqueueChildren(Stmt *S) { unsigned size = WL.size(); - for (Stmt::child_iterator Child = S->child_begin(), ChildEnd = S->child_end(); - Child != ChildEnd; ++Child) { + for (Stmt::child_range Child = S->children(); Child; ++Child) { AddStmt(*Child); } if (size == WL.size())