]> granicus.if.org Git - clang/commitdiff
Get rid of AttributeList in the AST and use the new Attr class instead
authorAnders Carlsson <andersca@mac.com>
Fri, 15 Feb 2008 07:04:12 +0000 (07:04 +0000)
committerAnders Carlsson <andersca@mac.com>
Fri, 15 Feb 2008 07:04:12 +0000 (07:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47155 91177308-0d34-0410-b5e6-96231b3b80d8

AST/Decl.cpp
Sema/SemaDecl.cpp
include/clang/AST/Attr.h
include/clang/AST/Decl.h

index 55abe6f34d5f60a0b9e7182a1c0c7eb2dbcbdbcb..0ed028ca540101169e00a47cf46ca75c286f2255 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "clang/AST/Decl.h"
 #include "clang/AST/DeclObjC.h"
+#include "clang/AST/Attr.h"
 #include "clang/Basic/IdentifierTable.h"
 using namespace clang;
 
@@ -258,6 +259,11 @@ const char *NamedDecl::getName() const {
   return "";
 }
 
+void ValueDecl::addAttr(Attr *attr)
+{
+  attr->setNext(Attrs);
+  Attrs = attr;
+}
 
 FunctionDecl::~FunctionDecl() {
   delete[] ParamInfo;
index fc60a7a4aa59aafa58500a45c4182f0241a347a8..f21ba70c76079d429e696437ae1c25e0bec61a97 100644 (file)
@@ -14,6 +14,7 @@
 #include "Sema.h"
 #include "clang/AST/ASTConsumer.h"
 #include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
 #include "clang/AST/Builtins.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/Expr.h"
@@ -737,10 +738,8 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
 
     FunctionDecl *NewFD = new FunctionDecl(D.getIdentifierLoc(), II, R, SC,
                                            D.getDeclSpec().isInlineSpecified(),
-                                           LastDeclarator,
-                                           D.getDeclSpec().getAttributes());
-
-    // Transfer ownership of DeclSpec attributes to FunctionDecl
+                                           LastDeclarator);
+    // FIXME: Handle attributes.
     D.getDeclSpec().clearAttributes();
     
     // Merge the decl with the existing one if appropriate. Since C functions
@@ -989,7 +988,9 @@ Sema::ActOnParamDeclarator(struct DeclaratorChunk::ParamInfo &PI, Scope *FnScope
     parmDeclType = Context.getPointerType(parmDeclType);
   
   ParmVarDecl *New = new ParmVarDecl(PI.IdentLoc, II, parmDeclType, 
-                                     VarDecl::None, 0, PI.AttrList);
+                                     VarDecl::None, 0);
+  // FIXME: Handle attributes
+  
   if (PI.InvalidType)
     New->setInvalidDecl();
     
index dc65cc70dc7e03ef536a462e14b916f4cc353976..82ba6b63fbb6cf366b558ad357f551f3df249f79 100644 (file)
@@ -29,7 +29,7 @@ private:
   Kind AttrKind;
   
 protected:
-  Attr(Kind AK) : AttrKind(AK) {}
+  Attr(Kind AK) : Next(0), AttrKind(AK) {}
   virtual ~Attr() {
     delete Next;
   }
index d72a5c80fceb4260f8e646156bd49c4a4bf6b496..0640222ea9fcae12ea19ecaa698751a85b74b6fc 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "clang/AST/Type.h"
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Parse/AttributeList.h"
 #include "llvm/ADT/APSInt.h"
 #include "llvm/Bitcode/SerializationFwd.h"
 
@@ -25,6 +24,7 @@ class Decl;
 }
 
 namespace clang {
+class Attr;
 class Expr;
 class Stmt;
 class StringLiteral;
@@ -253,19 +253,20 @@ protected:
 class ValueDecl : public ScopedDecl {
   QualType DeclType;
 
-  /// Attributes - Linked list of attributes that are attached to this
+  /// Attrs - Linked list of attributes that are attached to this
   /// function.
-  AttributeList *Attributes;
+  Attr *Attrs;
 protected:
   ValueDecl(Kind DK, SourceLocation L, IdentifierInfo *Id, QualType T,
-            ScopedDecl *PrevDecl, AttributeList *A = 0
-    : ScopedDecl(DK, L, Id, PrevDecl), DeclType(T), Attributes(A) {}
+            ScopedDecl *PrevDecl) 
+    : ScopedDecl(DK, L, Id, PrevDecl), DeclType(T) {}
 public:
   QualType getType() const { return DeclType; }
   void setType(QualType newType) { DeclType = newType; }
   QualType getCanonicalType() const { return DeclType.getCanonicalType(); }
   
-  AttributeList *getAttributes() const { return Attributes; }
+  void addAttr(Attr *attr);
+  const Attr *getAttrs() const { return Attrs; }
   
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) {
@@ -329,8 +330,8 @@ public:
   static bool classof(const VarDecl *D) { return true; }
 protected:
   VarDecl(Kind DK, SourceLocation L, IdentifierInfo *Id, QualType T,
-          StorageClass SC, ScopedDecl *PrevDecl, AttributeList *A = 0)
-    : ValueDecl(DK, L, Id, T, PrevDecl, A), Init(0) { SClass = SC; }
+          StorageClass SC, ScopedDecl *PrevDecl)
+    : ValueDecl(DK, L, Id, T, PrevDecl), Init(0) { SClass = SC; }
 private:
   Expr *Init;
   // FIXME: This can be packed into the bitfields in Decl.
@@ -356,8 +357,8 @@ protected:
 class BlockVarDecl : public VarDecl {
 public:
   BlockVarDecl(SourceLocation L, IdentifierInfo *Id, QualType T, StorageClass S,
-               ScopedDecl *PrevDecl, AttributeList *A = 0)
-    : VarDecl(BlockVar, L, Id, T, S, PrevDecl, A) {}
+               ScopedDecl *PrevDecl)
+    : VarDecl(BlockVar, L, Id, T, S, PrevDecl) {}
   
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return D->getKind() == BlockVar; }
@@ -377,8 +378,8 @@ protected:
 class FileVarDecl : public VarDecl {
 public:
   FileVarDecl(SourceLocation L, IdentifierInfo *Id, QualType T, StorageClass S,
-              ScopedDecl *PrevDecl, AttributeList *A = 0)
-    : VarDecl(FileVar, L, Id, T, S, PrevDecl, A) {}
+              ScopedDecl *PrevDecl)
+    : VarDecl(FileVar, L, Id, T, S, PrevDecl) {}
   
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return D->getKind() == FileVar; }
@@ -395,8 +396,8 @@ protected:
 class ParmVarDecl : public VarDecl {
 public:
   ParmVarDecl(SourceLocation L, IdentifierInfo *Id, QualType T, StorageClass S,
-              ScopedDecl *PrevDecl, AttributeList *A = 0)
-    : VarDecl(ParmVar, L, Id, T, S, PrevDecl, A), 
+              ScopedDecl *PrevDecl)
+    : VarDecl(ParmVar, L, Id, T, S, PrevDecl), 
     objcDeclQualifier(OBJC_TQ_None) {}
   
   ObjCDeclQualifier getObjCDeclQualifier() const { return objcDeclQualifier; }
@@ -431,8 +432,8 @@ public:
   };
   FunctionDecl(SourceLocation L, IdentifierInfo *Id, QualType T,
                StorageClass S = None, bool isInline = false, 
-               ScopedDecl *PrevDecl = 0, AttributeList *Attrs = 0)
-    : ValueDecl(Function, L, Id, T, PrevDecl, Attrs), 
+               ScopedDecl *PrevDecl = 0)
+    : ValueDecl(Function, L, Id, T, PrevDecl), 
       ParamInfo(0), Body(0), DeclChain(0), SClass(S), IsInline(isInline) {}
   virtual ~FunctionDecl();