r203351 - Reapplying r203299 in a slightly different manner. Now range APIs are implemented in terms of iterator APIs.

Aaron Ballman aaron at aaronballman.com
Sat Mar 8 10:30:41 PST 2014


Author: aaronballman
Date: Sat Mar  8 12:30:40 2014
New Revision: 203351

URL: http://llvm.org/viewvc/llvm-project?rev=203351&view=rev
Log:
Reapplying r203299 in a slightly different manner. Now range APIs are implemented in terms of iterator APIs.

Modified:
    cfe/trunk/include/clang/AST/Decl.h
    cfe/trunk/include/clang/AST/DeclBase.h
    cfe/trunk/include/clang/AST/DeclObjC.h
    cfe/trunk/include/clang/AST/Redeclarable.h
    cfe/trunk/lib/AST/DeclBase.cpp

Modified: cfe/trunk/include/clang/AST/Decl.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=203351&r1=203350&r2=203351&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Sat Mar  8 12:30:40 2014
@@ -1850,9 +1850,7 @@ public:
   param_iterator param_end() {
     return param_iterator(ParamInfo + param_size());
   }
-  param_range params() {
-    return param_range(ParamInfo, ParamInfo + param_size());
-  }
+  param_range params() { return param_range(param_begin(), param_end()); }
 
   param_const_iterator param_begin() const {
     return param_const_iterator(ParamInfo);
@@ -1861,7 +1859,7 @@ public:
     return param_const_iterator(ParamInfo + param_size());
   }
   param_const_range params() const {
-    return param_const_range(ParamInfo, ParamInfo + param_size());
+    return param_const_range(param_begin(), param_end());
   }
 
   /// getNumParams - Return the number of parameters this function must have
@@ -2339,11 +2337,11 @@ public:
   typedef NamedDecl * const *chain_iterator;
   typedef llvm::iterator_range<chain_iterator> chain_range;
 
-  chain_range chain() const {
-    return chain_range(Chaining, Chaining + ChainingSize);
+  chain_range chain() const { return chain_range(chain_begin(), chain_end()); }
+  chain_iterator chain_begin() const { return chain_iterator(Chaining); }
+  chain_iterator chain_end() const {
+    return chain_iterator(Chaining + ChainingSize);
   }
-  chain_iterator chain_begin() const { return chain().begin(); }
-  chain_iterator chain_end() const  { return chain().end(); }
 
   unsigned getChainingSize() const { return ChainingSize; }
 
@@ -3312,17 +3310,21 @@ public:
   }
 
   bool param_empty() const { return NumParams == 0; }
-  param_range params() {
-    return param_range(ParamInfo, ParamInfo + param_size());
+  param_range params() { return param_range(param_begin(), param_end()); }
+  param_iterator param_begin() { return param_iterator(ParamInfo); }
+  param_iterator param_end() {
+    return param_iterator(ParamInfo + param_size());
   }
-  param_iterator param_begin() { return params().begin(); }
-  param_iterator param_end() { return params().end(); }
 
   param_const_range params() const {
-    return param_const_range(ParamInfo, ParamInfo + param_size());
+    return param_const_range(param_begin(), param_end());
+  }
+  param_const_iterator param_begin() const {
+    return param_const_iterator(ParamInfo);
+  }
+  param_const_iterator param_end() const {
+    return param_const_iterator(ParamInfo + param_size());
   }
-  param_const_iterator param_begin() const { return params().begin(); }
-  param_const_iterator param_end() const { return params().end(); }
 
   unsigned getNumParams() const { return NumParams; }
   const ParmVarDecl *getParamDecl(unsigned i) const {
@@ -3439,9 +3441,7 @@ public:
   param_iterator param_end() const { return getParams() + NumParams; }
 
   /// \brief Retrieve an iterator range for the parameter declarations.
-  param_range params() const {
-    return param_range(getParams(), getParams() + NumParams);
-  }
+  param_range params() const { return param_range(param_begin(), param_end()); }
 
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }

Modified: cfe/trunk/include/clang/AST/DeclBase.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=203351&r1=203350&r2=203351&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclBase.h (original)
+++ cfe/trunk/include/clang/AST/DeclBase.h Sat Mar  8 12:30:40 2014
@@ -776,8 +776,7 @@ public:
   /// \brief Returns an iterator range for all the redeclarations of the same
   /// decl. It will iterate at least once (when this decl is the only one).
   redecl_range redecls() const {
-    return redecl_range(redecl_iterator(const_cast<Decl *>(this)),
-                        redecl_iterator());
+    return redecl_range(redecls_begin(), redecls_end());
   }
 
   redecl_iterator redecls_begin() const {
@@ -1312,7 +1311,7 @@ public:
 
   /// decls_begin/decls_end - Iterate over the declarations stored in
   /// this context.
-  decl_range decls() const;
+  decl_range decls() const { return decl_range(decls_begin(), decls_end()); }
   decl_iterator decls_begin() const;
   decl_iterator decls_end() const { return decl_iterator(); }
   bool decls_empty() const;
@@ -1320,8 +1319,10 @@ public:
   /// noload_decls_begin/end - Iterate over the declarations stored in this
   /// context that are currently loaded; don't attempt to retrieve anything
   /// from an external source.
-  decl_range noload_decls() const;
-  decl_iterator noload_decls_begin() const;
+  decl_range noload_decls() const {
+    return decl_range(noload_decls_begin(), noload_decls_end());
+  }
+  decl_iterator noload_decls_begin() const { return decl_iterator(FirstDecl); }
   decl_iterator noload_decls_end() const { return decl_iterator(); }
 
   /// specific_decl_iterator - Iterates over a subrange of

Modified: cfe/trunk/include/clang/AST/DeclObjC.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=203351&r1=203350&r2=203351&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclObjC.h (original)
+++ cfe/trunk/include/clang/AST/DeclObjC.h Sat Mar  8 12:30:40 2014
@@ -345,11 +345,9 @@ public:
   typedef llvm::iterator_range<param_iterator> param_range;
   typedef llvm::iterator_range<param_const_iterator> param_const_range;
 
-  param_range params() {
-    return param_range(getParams(), getParams() + NumParams);
-  }
+  param_range params() { return param_range(param_begin(), param_end()); }
   param_const_range params() const {
-    return param_const_range(getParams(), getParams() + NumParams);
+    return param_const_range(param_begin(), param_end());
   }
 
   param_const_iterator param_begin() const {
@@ -1277,9 +1275,9 @@ public:
                                bool RHSIsQualifiedID = false);
 
   typedef redeclarable_base::redecl_range redecl_range;
-  typedef redeclarable_base::redecl_iterator redecl_iterator;
-  using redeclarable_base::redecls_begin;
-  using redeclarable_base::redecls_end;
+  typedef redeclarable_base::redecl_iterator redecl_iterator;
+  using redeclarable_base::redecls_begin;
+  using redeclarable_base::redecls_end;
   using redeclarable_base::redecls;
   using redeclarable_base::getPreviousDecl;
   using redeclarable_base::getMostRecentDecl;
@@ -1586,9 +1584,9 @@ public:
   }
    
   typedef redeclarable_base::redecl_range redecl_range;
-  typedef redeclarable_base::redecl_iterator redecl_iterator;
-  using redeclarable_base::redecls_begin;
-  using redeclarable_base::redecls_end;
+  typedef redeclarable_base::redecl_iterator redecl_iterator;
+  using redeclarable_base::redecls_begin;
+  using redeclarable_base::redecls_end;
   using redeclarable_base::redecls;
   using redeclarable_base::getPreviousDecl;
   using redeclarable_base::getMostRecentDecl;

Modified: cfe/trunk/include/clang/AST/Redeclarable.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Redeclarable.h?rev=203351&r1=203350&r2=203351&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Redeclarable.h (original)
+++ cfe/trunk/include/clang/AST/Redeclarable.h Sat Mar  8 12:30:40 2014
@@ -171,11 +171,8 @@ public:
                         redecl_iterator());
   }
 
-  redecl_iterator redecls_begin() const {
-    return redecl_iterator(
-        const_cast<decl_type *>(static_cast<const decl_type *>(this)));
-  }
-  redecl_iterator redecls_end() const { return redecl_iterator(); }
+  redecl_iterator redecls_begin() const { return redecls().begin(); }
+  redecl_iterator redecls_end() const { return redecls().end(); }
 
   friend class ASTDeclReader;
   friend class ASTDeclWriter;

Modified: cfe/trunk/lib/AST/DeclBase.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBase.cpp?rev=203351&r1=203350&r2=203351&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclBase.cpp (original)
+++ cfe/trunk/lib/AST/DeclBase.cpp Sat Mar  8 12:30:40 2014
@@ -1076,20 +1076,6 @@ ExternalASTSource::SetExternalVisibleDec
   return List.getLookupResult();
 }
 
-DeclContext::decl_range DeclContext::noload_decls() const {
-  return decl_range(decl_iterator(FirstDecl), decl_iterator());
-}
-
-DeclContext::decl_iterator DeclContext::noload_decls_begin() const {
-  return decl_iterator(FirstDecl);
-}
-
-DeclContext::decl_range DeclContext::decls() const {
-  if (hasExternalLexicalStorage())
-    LoadLexicalDeclsFromExternalStorage();
-  return decl_range(decl_iterator(FirstDecl), decl_iterator());
-}
-
 DeclContext::decl_iterator DeclContext::decls_begin() const {
   if (hasExternalLexicalStorage())
     LoadLexicalDeclsFromExternalStorage();





More information about the cfe-commits mailing list