]> granicus.if.org Git - clang/commitdiff
"The attached patch moves AttributeList::addAttributeList outside the
authorDouglas Gregor <dgregor@apple.com>
Tue, 1 Sep 2009 17:10:19 +0000 (17:10 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 1 Sep 2009 17:10:19 +0000 (17:10 +0000)
class so as to accomodate one or both parameters being NULL, " from Sean Hunt!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80683 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Parse/AttributeList.h
include/clang/Parse/DeclSpec.h

index e699d170cffa2ef20c88a8a3db9c41a70153dc83..6f987eefd06b410b299478b56effe19176208577 100644 (file)
@@ -113,16 +113,6 @@ public:
   
   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 @@ public:
   }
 };
 
+/// 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 9d8a6f07988ac65e6a02d631c36df90c152eb6f8..3bedec4e4dbd8c0c23a7437f192b7c7fcd3c38e0 100644 (file)
@@ -321,12 +321,7 @@ public:
   /// 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,12 +1062,7 @@ public:
   ///
   /// Also extends the range of the declarator.
   void AddAttributes(AttributeList *alist, SourceLocation LastLoc) { 
-    if (!alist)
-      return; // we parsed __attribute__(()) or had a syntax error
-
-    if (AttrList) 
-      alist->addAttributeList(AttrList); 
-    AttrList = alist;
+    AttrList = addAttributeLists(AttrList, alist);
 
     if (!LastLoc.isInvalid())
       SetRangeEnd(LastLoc);