[cfe-commits] r55068 - in /cfe/trunk: include/clang/AST/DeclObjC.h lib/AST/DeclObjC.cpp lib/Sema/SemaDeclObjC.cpp

Daniel Dunbar daniel at zuster.org
Wed Aug 20 11:02:42 PDT 2008


Author: ddunbar
Date: Wed Aug 20 13:02:42 2008
New Revision: 55068

URL: http://llvm.org/viewvc/llvm-project?rev=55068&view=rev
Log:
Fix attributes on Obj-C interfaces & methods.
 - Drop MethodAttrs parameter to ObjCMethodDecl
 - Call ProcessDeclAttributeList for interface & method decls.

Modified:
    cfe/trunk/include/clang/AST/DeclObjC.h
    cfe/trunk/lib/AST/DeclObjC.cpp
    cfe/trunk/lib/Sema/SemaDeclObjC.cpp

Modified: cfe/trunk/include/clang/AST/DeclObjC.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=55068&r1=55067&r2=55068&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/DeclObjC.h (original)
+++ cfe/trunk/include/clang/AST/DeclObjC.h Wed Aug 20 13:02:42 2008
@@ -126,8 +126,6 @@
   unsigned NumMethodParams;
   
   /// List of attributes for this method declaration.
-  AttributeList *MethodAttrs;
-  
   SourceLocation EndLoc; // the location of the ';' or '{'.
   
   // The following are only used for method definitions, null otherwise.
@@ -140,7 +138,7 @@
   ObjCMethodDecl(SourceLocation beginLoc, SourceLocation endLoc,
                  Selector SelInfo, QualType T,
                  Decl *contextDecl,
-                 AttributeList *M = 0, bool isInstance = true,
+                 bool isInstance = true,
                  bool isVariadic = false,
                  bool isSynthesized = false,
                  ImplementationControl impControl = None)
@@ -151,7 +149,7 @@
     DeclImplementation(impControl), objcDeclQualifier(OBJC_TQ_None),
     MethodContext(static_cast<NamedDecl*>(contextDecl)),
     SelName(SelInfo), MethodDeclType(T), 
-    ParamInfo(0), NumMethodParams(0), MethodAttrs(M), 
+    ParamInfo(0), NumMethodParams(0), 
     EndLoc(endLoc), Body(0), SelfDecl(0), CmdDecl(0) {}
 
   virtual ~ObjCMethodDecl();
@@ -165,7 +163,7 @@
                                 SourceLocation beginLoc, 
                                 SourceLocation endLoc, Selector SelInfo,
                                 QualType T, Decl *contextDecl,
-                                AttributeList *M = 0, bool isInstance = true,
+                                bool isInstance = true,
                                 bool isVariadic = false,
                                 bool isSynthesized = false,
                                 ImplementationControl impControl = None);
@@ -214,7 +212,6 @@
   ImplicitParamDecl * getCmdDecl() const { return CmdDecl; }
   void setCmdDecl(ImplicitParamDecl *decl) { CmdDecl = decl; }
   
-  AttributeList *getMethodAttrs() const {return MethodAttrs;}
   bool isInstance() const { return IsInstance; }
   bool isVariadic() const { return IsVariadic; }
   

Modified: cfe/trunk/lib/AST/DeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclObjC.cpp?rev=55068&r1=55067&r2=55068&view=diff

==============================================================================
--- cfe/trunk/lib/AST/DeclObjC.cpp (original)
+++ cfe/trunk/lib/AST/DeclObjC.cpp Wed Aug 20 13:02:42 2008
@@ -25,20 +25,19 @@
                                        SourceLocation endLoc,
                                        Selector SelInfo, QualType T,
                                        Decl *contextDecl,
-                                       AttributeList *M, bool isInstance,
+                                       bool isInstance,
                                        bool isVariadic,
                                        bool isSynthesized,
                                        ImplementationControl impControl) {
   void *Mem = C.getAllocator().Allocate<ObjCMethodDecl>();
   return new (Mem) ObjCMethodDecl(beginLoc, endLoc,
                                   SelInfo, T, contextDecl,
-                                  M, isInstance, 
+                                  isInstance, 
                                   isVariadic, isSynthesized, impControl);
 }
 
 ObjCMethodDecl::~ObjCMethodDecl() {  
   delete [] ParamInfo;
-  //delete [] MethodAttrs;  // FIXME: Also destroy the stored Expr*.
 }
 
 void ObjCMethodDecl::Destroy(ASTContext& C) {
@@ -401,7 +400,7 @@
     ObjCMethodDecl::Create(Context, property->getLocation(), 
                            property->getLocation(), 
                            property->getGetterName(), resultDeclType,
-                           this, 0,
+                           this,
                            true, false, true, ObjCMethodDecl::Required);
     property->setGetterMethodDecl(ObjCMethod);
     insMethods.push_back(ObjCMethod);

Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=55068&r1=55067&r2=55068&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Wed Aug 20 13:02:42 2008
@@ -98,8 +98,10 @@
       IDecl->setForwardDecl(false);
     }
   } else {
-    IDecl = ObjCInterfaceDecl::Create(Context, AtInterfaceLoc,
+    IDecl = ObjCInterfaceDecl::Create(Context, AtInterfaceLoc, 
                                       ClassName, ClassLoc);
+    if (AttrList)
+      ProcessDeclAttributeList(IDecl, AttrList);
   
     ObjCInterfaceDecls[ClassName] = IDecl;
     // Remember that this needs to be removed when the scope is popped.
@@ -491,6 +493,9 @@
   if (!IDecl) {
     // Legacy case of @implementation with no corresponding @interface.
     // Build, chain & install the interface decl into the identifier.
+
+    // FIXME: Do we support attributes on the @implementation? If so
+    // we should copy them over.
     IDecl = ObjCInterfaceDecl::Create(Context, AtClassImplLoc, ClassName, 
                                       ClassLoc, false, true);
     ObjCInterfaceDecls[ClassName] = IDecl;
@@ -960,12 +965,14 @@
   
   ObjCMethodDecl* ObjCMethod = 
     ObjCMethodDecl::Create(Context, MethodLoc, EndLoc, Sel, resultDeclType,
-                           ClassDecl, AttrList, 
+                           ClassDecl, 
                            MethodType == tok::minus, isVariadic,
                            false,
                            MethodDeclKind == tok::objc_optional ? 
                            ObjCMethodDecl::Optional : 
                            ObjCMethodDecl::Required);
+  if (AttrList)
+    ProcessDeclAttributeList(ObjCMethod, AttrList);
   
   llvm::SmallVector<ParmVarDecl*, 16> Params;
   





More information about the cfe-commits mailing list