diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-02-02 17:56:05 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-02-02 17:56:05 +0000 | 
| commit | 7946ef9fe0a2a612b39dc1bf0eb914ae691f9bc8 (patch) | |
| tree | 8cb66b92f1e4356e560a4d8705f067befc0dfbab | |
| parent | 97ba824ad9b68515df631e3c5a565c87ef1c3671 (diff) | |
| download | bcm5719-llvm-7946ef9fe0a2a612b39dc1bf0eb914ae691f9bc8.tar.gz bcm5719-llvm-7946ef9fe0a2a612b39dc1bf0eb914ae691f9bc8.zip  | |
Slim down the specific_decl_iterator, since NULL denotes the end of the range. Good eyes, Chris
llvm-svn: 63528
| -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.  | 

