diff options
-rw-r--r-- | clang/include/clang/AST/Decl.h | 8 | ||||
-rw-r--r-- | clang/include/clang/AST/DeclBase.h | 25 | ||||
-rw-r--r-- | clang/include/clang/AST/DeclObjC.h | 20 |
3 files changed, 23 insertions, 30 deletions
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index 18d1c054679..23f06f14f56 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -927,11 +927,11 @@ public: typedef specific_decl_iterator<EnumConstantDecl> enumerator_iterator; enumerator_iterator enumerator_begin() const { - return enumerator_iterator(this->decls_begin(), this->decls_end()); + return enumerator_iterator(this->decls_begin()); } enumerator_iterator enumerator_end() const { - return enumerator_iterator(this->decls_end(), this->decls_end()); + return enumerator_iterator(this->decls_end()); } /// getIntegerType - Return the integer type this enum decl corresponds to. @@ -1022,10 +1022,10 @@ public: typedef specific_decl_iterator<FieldDecl> field_iterator; field_iterator field_begin() const { - return field_iterator(decls_begin(), decls_end()); + return field_iterator(decls_begin()); } field_iterator field_end() const { - return field_iterator(decls_end(), decls_end()); + return field_iterator(decls_end()); } // field_empty - Whether there are any fields (non-static data diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h index 8d203cc2c2c..2c15c870c3b 100644 --- a/clang/include/clang/AST/DeclBase.h +++ b/clang/include/clang/AST/DeclBase.h @@ -640,13 +640,10 @@ public: template<typename SpecificDecl> class specific_decl_iterator { /// Current - The current, underlying declaration iterator, which - /// will either be the same as End or will point to a declaration of + /// will either be NULL or will point to a declaration of /// type SpecificDecl. DeclContext::decl_iterator Current; - /// End - One past the last declaration within the DeclContext. - DeclContext::decl_iterator End; - /// Acceptable - If non-NULL, points to a member function that /// will determine if a particular declaration of type /// SpecificDecl should be visited by the iteration. @@ -656,7 +653,7 @@ public: /// declaration of type SpecificDecl that also meets the criteria /// required by Acceptable. void SkipToNextDecl() { - while (Current != End && + while (*Current && (!isa<SpecificDecl>(*Current) || (Acceptable && !(cast<SpecificDecl>(*Current)->*Acceptable)()))) ++Current; @@ -670,19 +667,19 @@ public: difference_type; typedef std::forward_iterator_tag iterator_category; - specific_decl_iterator() : Current(), End(), Acceptable(0) { } + specific_decl_iterator() : Current(), Acceptable(0) { } /// specific_decl_iterator - Construct a new iterator over a - /// subset of the declarations in [C, E). If A is non-NULL, it is - /// a pointer to a member function of SpecificDecl that should - /// return true for all of the SpecificDecl instances that will be - /// in the subset of iterators. For example, if you want - /// Objective-C instance methods, SpecificDecl will be - /// ObjCMethodDecl and A will be &ObjCMethodDecl::isInstanceMethod. + /// subset of the declarations the range [C, + /// end-of-declarations). If A is non-NULL, it is a pointer to a + /// member function of SpecificDecl that should return true for + /// all of the SpecificDecl instances that will be in the subset + /// of iterators. For example, if you want Objective-C instance + /// methods, SpecificDecl will be ObjCMethodDecl and A will be + /// &ObjCMethodDecl::isInstanceMethod. specific_decl_iterator(DeclContext::decl_iterator C, - DeclContext::decl_iterator E, bool (SpecificDecl::*A)() const = 0) - : Current(C), End(E), Acceptable(A) { + : Current(C), Acceptable(A) { SkipToNextDecl(); } diff --git a/clang/include/clang/AST/DeclObjC.h b/clang/include/clang/AST/DeclObjC.h index fcf6e5864e5..cda9bddbcc3 100644 --- a/clang/include/clang/AST/DeclObjC.h +++ b/clang/include/clang/AST/DeclObjC.h @@ -264,39 +264,35 @@ public: // Iterator access to properties. typedef specific_decl_iterator<ObjCPropertyDecl> prop_iterator; prop_iterator prop_begin() const { - return prop_iterator(decls_begin(), decls_end()); + return prop_iterator(decls_begin()); } prop_iterator prop_end() const { - return prop_iterator(decls_end(), decls_end()); + return prop_iterator(decls_end()); } // Iterator access to instance/class methods. typedef specific_decl_iterator<ObjCMethodDecl> method_iterator; method_iterator meth_begin() const { - return method_iterator(decls_begin(), decls_end()); + return method_iterator(decls_begin()); } method_iterator meth_end() const { - return method_iterator(decls_end(), decls_end()); + return method_iterator(decls_end()); } typedef method_iterator instmeth_iterator; instmeth_iterator instmeth_begin() const { - return instmeth_iterator(decls_begin(), decls_end(), - &ObjCMethodDecl::isInstanceMethod); + return instmeth_iterator(decls_begin(), &ObjCMethodDecl::isInstanceMethod); } instmeth_iterator instmeth_end() const { - return instmeth_iterator(decls_end(), decls_end(), - &ObjCMethodDecl::isInstanceMethod); + return instmeth_iterator(decls_end(), &ObjCMethodDecl::isInstanceMethod); } typedef method_iterator classmeth_iterator; classmeth_iterator classmeth_begin() const { - return classmeth_iterator(decls_begin(), decls_end(), - &ObjCMethodDecl::isClassMethod); + return classmeth_iterator(decls_begin(), &ObjCMethodDecl::isClassMethod); } classmeth_iterator classmeth_end() const { - return classmeth_iterator(decls_end(), decls_end(), - &ObjCMethodDecl::isClassMethod); + return classmeth_iterator(decls_end(), &ObjCMethodDecl::isClassMethod); } // Get the local instance/class method declared in this interface. |