[llvm-commits] [PATCH 03/20] [AVX] Remove non-const Iterators

David Greene dag at cray.com
Tue Jul 19 13:11:38 PDT 2011


Remove all non-const iterators from Init classes.  This is another
step toward constifying Inits and ultimately turning them into
FoldingSetNodes.
---
 utils/TableGen/ClangAttrEmitter.cpp |    4 +++-
 utils/TableGen/Record.cpp           |   10 ++++++++--
 utils/TableGen/Record.h             |   13 ++-----------
 3 files changed, 13 insertions(+), 14 deletions(-)

diff --git oldutils/TableGen/ClangAttrEmitter.cpp newutils/TableGen/ClangAttrEmitter.cpp
index 26bd878..4116ce6 100644
--- oldutils/TableGen/ClangAttrEmitter.cpp
+++ newutils/TableGen/ClangAttrEmitter.cpp
@@ -27,7 +27,9 @@ getValueAsListOfStrings(Record &R, StringRef FieldName) {
   std::vector<StringRef> Strings;
   Strings.reserve(List->getSize());
 
-  for (ListInit::iterator i = List->begin(), e = List->end(); i != e; ++i) {
+  for (ListInit::const_iterator i = List->begin(), e = List->end();
+       i != e;
+       ++i) {
     assert(*i && "Got a null element in a ListInit");
     if (StringInit *S = dynamic_cast<StringInit *>(*i))
       Strings.push_back(S->getValue());
diff --git oldutils/TableGen/Record.cpp newutils/TableGen/Record.cpp
index 1a7f7e1..f9ee89c 100644
--- oldutils/TableGen/Record.cpp
+++ newutils/TableGen/Record.cpp
@@ -629,7 +629,13 @@ Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
         assert(0 && "Empty list in cdr");
         return 0;
       }
-      ListInit *Result = new ListInit(LHSl->begin()+1, LHSl->end(),
+      ListInit::const_iterator begin = LHSl->begin()+1;
+      ListInit::const_iterator end   = LHSl->end();
+      // We can't pass these iterators directly to ArrayRef because
+      // they are not convertible to Init **.  Fortunately,
+      // RandomAccessIterator::operator * is guaranteed to return an
+      // lvalue.
+      ListInit *Result = new ListInit(ArrayRef<Init *>(&*begin, end - begin),
                                       LHSl->getType());
       return Result;
     }
@@ -876,7 +882,7 @@ static Init *ForeachHelper(Init *LHS, Init *MHS, Init *RHS, RecTy *Type,
       std::vector<Init *> NewOperands;
       std::vector<Init *> NewList(MHSl->begin(), MHSl->end());
 
-      for (ListInit::iterator li = NewList.begin(),
+      for (std::vector<Init *>::iterator li = NewList.begin(),
              liend = NewList.end();
            li != liend;
            ++li) {
diff --git oldutils/TableGen/Record.h newutils/TableGen/Record.h
index f300484..6ec18fb 100644
--- oldutils/TableGen/Record.h
+++ newutils/TableGen/Record.h
@@ -749,15 +749,14 @@ public:
 class ListInit : public TypedInit {
   std::vector<Init*> Values;
 public:
-  typedef std::vector<Init*>::iterator       iterator;
   typedef std::vector<Init*>::const_iterator const_iterator;
 
   explicit ListInit(std::vector<Init*> &Vs, RecTy *EltTy)
     : TypedInit(ListRecTy::get(EltTy)) {
     Values.swap(Vs);
   }
-  explicit ListInit(iterator Start, iterator End, RecTy *EltTy)
-      : TypedInit(ListRecTy::get(EltTy)), Values(Start, End) {}
+  explicit ListInit(ArrayRef<Init *> Range, RecTy *EltTy)
+      : TypedInit(ListRecTy::get(EltTy)), Values(Range.begin(), Range.end()) {}
 
   unsigned getSize() const { return Values.size(); }
   Init *getElement(unsigned i) const {
@@ -782,9 +781,7 @@ public:
 
   virtual std::string getAsString() const;
 
-  inline iterator       begin()       { return Values.begin(); }
   inline const_iterator begin() const { return Values.begin(); }
-  inline iterator       end  ()       { return Values.end();   }
   inline const_iterator end  () const { return Values.end();   }
 
   inline size_t         size () const { return Values.size();  }
@@ -1175,22 +1172,16 @@ public:
 
   virtual std::string getAsString() const;
 
-  typedef std::vector<Init*>::iterator             arg_iterator;
   typedef std::vector<Init*>::const_iterator       const_arg_iterator;
-  typedef std::vector<std::string>::iterator       name_iterator;
   typedef std::vector<std::string>::const_iterator const_name_iterator;
 
-  inline arg_iterator        arg_begin()       { return Args.begin(); }
   inline const_arg_iterator  arg_begin() const { return Args.begin(); }
-  inline arg_iterator        arg_end  ()       { return Args.end();   }
   inline const_arg_iterator  arg_end  () const { return Args.end();   }
 
   inline size_t              arg_size () const { return Args.size();  }
   inline bool                arg_empty() const { return Args.empty(); }
 
-  inline name_iterator       name_begin()       { return ArgNames.begin(); }
   inline const_name_iterator name_begin() const { return ArgNames.begin(); }
-  inline name_iterator       name_end  ()       { return ArgNames.end();   }
   inline const_name_iterator name_end  () const { return ArgNames.end();   }
 
   inline size_t              name_size () const { return ArgNames.size();  }
-- 
1.7.6




More information about the llvm-commits mailing list