]> granicus.if.org Git - clang/commitdiff
Slim down the specific_decl_iterator, since NULL denotes the end of the range. Good...
authorDouglas Gregor <dgregor@apple.com>
Mon, 2 Feb 2009 17:56:05 +0000 (17:56 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 2 Feb 2009 17:56:05 +0000 (17:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63528 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h
include/clang/AST/DeclBase.h
include/clang/AST/DeclObjC.h

index 18d1c05467911d63eba429af4b39a3936e5fdca0..23f06f14f569a0ddfb4d53fe65f093f17f35f055 100644 (file)
@@ -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
index 8d203cc2c2c691a8a72eb8b68295ee0dae345406..2c15c870c3b168d7e9dc4a42aaa776b28c0cf1eb 100644 (file)
@@ -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();
     }
 
index fcf6e5864e515710da2d3d4089fc73f0c1437cd9..cda9bddbcc341586772304d354f849be0b1f8cd8 100644 (file)
@@ -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.