The attached patch moves AttributeList::addAttributeList outside the
class so as to accomodate one or both parameters being NULL; this
facilitates coding on my C++0x attributes patch significantly.

Sean Hunt
Index: include/clang/Parse/AttributeList.h
===================================================================
--- include/clang/Parse/AttributeList.h	(revision 80277)
+++ include/clang/Parse/AttributeList.h	(working copy)
@@ -113,16 +113,6 @@
   
   AttributeList *getNext() const { return Next; }
   void setNext(AttributeList *N) { Next = N; }
-  
-  void addAttributeList(AttributeList *alist) {
-    assert((alist != 0) && "addAttributeList(): alist is null");
-    AttributeList *next = this, *prev;
-    do {
-      prev = next;
-      next = next->getNext();
-    } while (next);
-    prev->setNext(alist);
-  }
 
   /// getNumArgs - Return the number of actual arguments to this attribute.
   unsigned getNumArgs() const { return NumArgs; }
@@ -172,6 +162,24 @@
   }
 };
 
+/// addAttributeLists - Add two AttributeLists together
+/// The right-hand list is appended to the left-hand list, if any
+/// A pointer to the joined list is returned.
+/// Note: the lists are not left unmodified.
+inline AttributeList* addAttributeLists (AttributeList *Left,
+                                         AttributeList *Right) {
+  if (!Left)
+    return Right;
+
+  AttributeList *next = Left, *prev;
+  do {
+    prev = next;
+    next = next->getNext();
+  } while (next);
+  prev->setNext(Right);
+  return Left;
+}
+
 }  // end namespace clang
 
 #endif
Index: include/clang/Parse/DeclSpec.h
===================================================================
--- include/clang/Parse/DeclSpec.h	(revision 80277)
+++ include/clang/Parse/DeclSpec.h	(working copy)
@@ -321,12 +321,7 @@
   /// int __attribute__((may_alias)) __attribute__((aligned(16))) var;
   /// 
   void AddAttributes(AttributeList *alist) {
-    if (!alist)
-      return; // we parsed __attribute__(()) or had a syntax error
-      
-    if (AttrList) 
-      alist->addAttributeList(AttrList); 
-    AttrList = alist;
+    AttrList = addAttributeLists(AttrList, alist);
   }
   void SetAttributes(AttributeList *AL) { AttrList = AL; }
   const AttributeList *getAttributes() const { return AttrList; }
@@ -1067,13 +1062,8 @@
   ///
   /// Also extends the range of the declarator.
   void AddAttributes(AttributeList *alist, SourceLocation LastLoc) { 
-    if (!alist)
-      return; // we parsed __attribute__(()) or had a syntax error
+    AttrList = addAttributeLists(AttrList, alist);
 
-    if (AttrList) 
-      alist->addAttributeList(AttrList); 
-    AttrList = alist;
-
     if (!LastLoc.isInvalid())
       SetRangeEnd(LastLoc);
   }
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to