Re: [PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
This revision was automatically updated to reflect the committed changes. mboehme marked an inline comment as done. Closed by commit rL281200: [CFG] Add iterator_ranges to CFG and CFGBlock. (authored by mboehme). Changed prior to commit: https://reviews.llvm.org/D23842?vs=69129&id=70981#toc Repository: rL LLVM https://reviews.llvm.org/D23842 Files: cfe/trunk/include/clang/Analysis/CFG.h Index: cfe/trunk/include/clang/Analysis/CFG.h === --- cfe/trunk/include/clang/Analysis/CFG.h +++ cfe/trunk/include/clang/Analysis/CFG.h @@ -22,6 +22,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" @@ -522,11 +523,15 @@ typedef AdjacentBlocks::const_iterator const_pred_iterator; typedef AdjacentBlocks::reverse_iterator pred_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; typedef AdjacentBlocks::iterator succ_iterator; typedef AdjacentBlocks::const_iterator const_succ_iterator; typedef AdjacentBlocks::reverse_iterator succ_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator; + typedef llvm::iterator_range succ_range; + typedef llvm::iterator_range succ_const_range; pred_iteratorpred_begin(){ return Preds.begin(); } pred_iteratorpred_end() { return Preds.end(); } @@ -538,6 +543,13 @@ const_pred_reverse_iterator pred_rbegin() const { return Preds.rbegin(); } const_pred_reverse_iterator pred_rend() const { return Preds.rend();} + pred_range preds() { +return pred_range(pred_begin(), pred_end()); + } + pred_const_range preds() const { +return pred_const_range(pred_begin(), pred_end()); + } + succ_iteratorsucc_begin(){ return Succs.begin(); } succ_iteratorsucc_end() { return Succs.end(); } const_succ_iterator succ_begin() const { return Succs.begin(); } @@ -548,6 +560,13 @@ const_succ_reverse_iterator succ_rbegin() const { return Succs.rbegin(); } const_succ_reverse_iterator succ_rend() const { return Succs.rend();} + succ_range succs() { +return succ_range(succ_begin(), succ_end()); + } + succ_const_range succs() const { +return succ_const_range(succ_begin(), succ_end()); + } + unsigned succ_size() const { return Succs.size();} bool succ_empty() const { return Succs.empty(); } @@ -840,6 +859,7 @@ typedef llvm::DenseMap::const_iterator synthetic_stmt_iterator; + typedef llvm::iterator_range synthetic_stmt_range; /// Iterates over synthetic DeclStmts in the CFG. /// @@ -855,6 +875,11 @@ return SyntheticDeclStmts.end(); } + /// \sa synthetic_stmt_begin + synthetic_stmt_range synthetic_stmts() const { +return synthetic_stmt_range(synthetic_stmt_begin(), synthetic_stmt_end()); + } + //======// // Member templates useful for various batch operations over CFGs. //======// Index: cfe/trunk/include/clang/Analysis/CFG.h === --- cfe/trunk/include/clang/Analysis/CFG.h +++ cfe/trunk/include/clang/Analysis/CFG.h @@ -22,6 +22,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" @@ -522,11 +523,15 @@ typedef AdjacentBlocks::const_iterator const_pred_iterator; typedef AdjacentBlocks::reverse_iterator pred_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; typedef AdjacentBlocks::iterator succ_iterator; typedef AdjacentBlocks::const_iterator const_succ_iterator; typedef AdjacentBlocks::reverse_iterator succ_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator; + typedef llvm::iterator_range succ_range; + typedef llvm::it
Re: [PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
alexfh added inline comments. Comment at: include/clang/Analysis/CFG.h:526 @@ -524,1 +525,3 @@ typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; mboehme wrote: > alexfh wrote: > > Most of the time the new functions will be used in a range-based for loop. > > I don't think the type returned by the functions will need to be explicitly > > specified anywhere. I'd remove the typedefs. > I agree the typedefs will probably never be used outside this class, but > typedefs for iterator_ranges seem to be a common pattern in the Clang > codebase. (EnumDecl::enumerator_range and CallExpr::arg_range are two random > examples.) I assume the intent is to make the definition of the functions > that return these ranges less verbose. > > Are you OK with me submitting this patch as-is (with the typedefs)? Makes sense. https://reviews.llvm.org/D23842 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
mboehme marked an inline comment as done. Comment at: include/clang/Analysis/CFG.h:526 @@ -524,1 +525,3 @@ typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; alexfh wrote: > Most of the time the new functions will be used in a range-based for loop. I > don't think the type returned by the functions will need to be explicitly > specified anywhere. I'd remove the typedefs. I agree the typedefs will probably never be used outside this class, but typedefs for iterator_ranges seem to be a common pattern in the Clang codebase. (EnumDecl::enumerator_range and CallExpr::arg_range are two random examples.) I assume the intent is to make the definition of the functions that return these ranges less verbose. Are you OK with me submitting this patch as-is (with the typedefs)? https://reviews.llvm.org/D23842 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
alexfh accepted this revision. alexfh added a comment. This revision is now accepted and ready to land. Actually, there's just one comment. Otherwise it's looking good. https://reviews.llvm.org/D23842 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
alexfh requested changes to this revision. This revision now requires changes to proceed. Comment at: include/clang/Analysis/CFG.h:526 @@ -524,1 +525,3 @@ typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; Most of the time the new functions will be used in a range-based for loop. I don't think the type returned by the functions will need to be explicitly specified anywhere. I'd remove the typedefs. https://reviews.llvm.org/D23842 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
mboehme updated this revision to Diff 69129. mboehme added a comment. Re-add inadvertently deleted blank line https://reviews.llvm.org/D23842 Files: include/clang/Analysis/CFG.h Index: include/clang/Analysis/CFG.h === --- include/clang/Analysis/CFG.h +++ include/clang/Analysis/CFG.h @@ -22,6 +22,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" @@ -522,11 +523,15 @@ typedef AdjacentBlocks::const_iterator const_pred_iterator; typedef AdjacentBlocks::reverse_iterator pred_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; typedef AdjacentBlocks::iterator succ_iterator; typedef AdjacentBlocks::const_iterator const_succ_iterator; typedef AdjacentBlocks::reverse_iterator succ_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator; + typedef llvm::iterator_range succ_range; + typedef llvm::iterator_range succ_const_range; pred_iteratorpred_begin(){ return Preds.begin(); } pred_iteratorpred_end() { return Preds.end(); } @@ -538,6 +543,13 @@ const_pred_reverse_iterator pred_rbegin() const { return Preds.rbegin(); } const_pred_reverse_iterator pred_rend() const { return Preds.rend();} + pred_range preds() { +return pred_range(pred_begin(), pred_end()); + } + pred_const_range preds() const { +return pred_const_range(pred_begin(), pred_end()); + } + succ_iteratorsucc_begin(){ return Succs.begin(); } succ_iteratorsucc_end() { return Succs.end(); } const_succ_iterator succ_begin() const { return Succs.begin(); } @@ -548,6 +560,13 @@ const_succ_reverse_iterator succ_rbegin() const { return Succs.rbegin(); } const_succ_reverse_iterator succ_rend() const { return Succs.rend();} + succ_range succs() { +return succ_range(succ_begin(), succ_end()); + } + succ_const_range succs() const { +return succ_const_range(succ_begin(), succ_end()); + } + unsigned succ_size() const { return Succs.size();} bool succ_empty() const { return Succs.empty(); } @@ -840,6 +859,7 @@ typedef llvm::DenseMap::const_iterator synthetic_stmt_iterator; + typedef llvm::iterator_range synthetic_stmt_range; /// Iterates over synthetic DeclStmts in the CFG. /// @@ -855,6 +875,11 @@ return SyntheticDeclStmts.end(); } + /// \sa synthetic_stmt_begin + synthetic_stmt_range synthetic_stmts() const { +return synthetic_stmt_range(synthetic_stmt_begin(), synthetic_stmt_end()); + } + //======// // Member templates useful for various batch operations over CFGs. //======// Index: include/clang/Analysis/CFG.h === --- include/clang/Analysis/CFG.h +++ include/clang/Analysis/CFG.h @@ -22,6 +22,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" @@ -522,11 +523,15 @@ typedef AdjacentBlocks::const_iterator const_pred_iterator; typedef AdjacentBlocks::reverse_iterator pred_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; typedef AdjacentBlocks::iterator succ_iterator; typedef AdjacentBlocks::const_iterator const_succ_iterator; typedef AdjacentBlocks::reverse_iterator succ_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator; + typedef llvm::iterator_range succ_range; + typedef llvm::iterator_range succ_const_range; pred_iteratorpred_begin(){ return Preds.begin(); } pred_iteratorpred_end() { return Preds.end(); } @@ -538,6 +543,13 @@ const_pred_reverse_iterator pred_rbegin() const {
[PATCH] D23842: [CFG] Add iterator_ranges to CFG and CFGBlock.
mboehme created this revision. mboehme added a reviewer: alexfh. mboehme added a subscriber: cfe-commits. (Needed for D23353.) https://reviews.llvm.org/D23842 Files: include/clang/Analysis/CFG.h Index: include/clang/Analysis/CFG.h === --- include/clang/Analysis/CFG.h +++ include/clang/Analysis/CFG.h @@ -22,6 +22,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" @@ -522,11 +523,15 @@ typedef AdjacentBlocks::const_iterator const_pred_iterator; typedef AdjacentBlocks::reverse_iterator pred_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; typedef AdjacentBlocks::iterator succ_iterator; typedef AdjacentBlocks::const_iterator const_succ_iterator; typedef AdjacentBlocks::reverse_iterator succ_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator; + typedef llvm::iterator_range succ_range; + typedef llvm::iterator_range succ_const_range; pred_iteratorpred_begin(){ return Preds.begin(); } pred_iteratorpred_end() { return Preds.end(); } @@ -538,6 +543,13 @@ const_pred_reverse_iterator pred_rbegin() const { return Preds.rbegin(); } const_pred_reverse_iterator pred_rend() const { return Preds.rend();} + pred_range preds() { +return pred_range(pred_begin(), pred_end()); + } + pred_const_range preds() const { +return pred_const_range(pred_begin(), pred_end()); + } + succ_iteratorsucc_begin(){ return Succs.begin(); } succ_iteratorsucc_end() { return Succs.end(); } const_succ_iterator succ_begin() const { return Succs.begin(); } @@ -548,13 +560,19 @@ const_succ_reverse_iterator succ_rbegin() const { return Succs.rbegin(); } const_succ_reverse_iterator succ_rend() const { return Succs.rend();} + succ_range succs() { +return succ_range(succ_begin(), succ_end()); + } + succ_const_range succs() const { +return succ_const_range(succ_begin(), succ_end()); + } + unsigned succ_size() const { return Succs.size();} bool succ_empty() const { return Succs.empty(); } unsigned pred_size() const { return Preds.size();} bool pred_empty() const { return Preds.empty(); } - class FilterOptions { public: FilterOptions() { @@ -840,6 +858,7 @@ typedef llvm::DenseMap::const_iterator synthetic_stmt_iterator; + typedef llvm::iterator_range synthetic_stmt_range; /// Iterates over synthetic DeclStmts in the CFG. /// @@ -855,6 +874,11 @@ return SyntheticDeclStmts.end(); } + /// \sa synthetic_stmt_begin + synthetic_stmt_range synthetic_stmts() const { +return synthetic_stmt_range(synthetic_stmt_begin(), synthetic_stmt_end()); + } + //======// // Member templates useful for various batch operations over CFGs. //======// Index: include/clang/Analysis/CFG.h === --- include/clang/Analysis/CFG.h +++ include/clang/Analysis/CFG.h @@ -22,6 +22,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/iterator_range.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" @@ -522,11 +523,15 @@ typedef AdjacentBlocks::const_iterator const_pred_iterator; typedef AdjacentBlocks::reverse_iterator pred_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_pred_reverse_iterator; + typedef llvm::iterator_range pred_range; + typedef llvm::iterator_range pred_const_range; typedef AdjacentBlocks::iterator succ_iterator; typedef AdjacentBlocks::const_iterator const_succ_iterator; typedef AdjacentBlocks::reverse_iterator succ_reverse_iterator; typedef AdjacentBlocks::const_reverse_iterator const_succ_reverse_iterator; + typedef llvm::iterator_range succ_range; + typedef llvm::iterator_range succ_const_rang