]> granicus.if.org Git - clang/commitdiff
make property addition work list all other "add" methods. Do
authorChris Lattner <sabre@nondot.org>
Sun, 16 Mar 2008 21:23:50 +0000 (21:23 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 16 Mar 2008 21:23:50 +0000 (21:23 +0000)
the allocation in the class, not in sema.

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

Driver/RewriteTest.cpp
include/clang/AST/DeclObjC.h
lib/AST/DeclObjC.cpp
lib/Sema/SemaDeclObjC.cpp

index 2b88c0c8f3552d49f8685fae39512034057a25ca..927053e1629226dc220a5fe68c3ed350417c3eed 100644 (file)
@@ -146,7 +146,7 @@ namespace {
     void RewriteProtocolDecl(ObjCProtocolDecl *Dcl);
     void RewriteForwardProtocolDecl(ObjCForwardProtocolDecl *Dcl);
     void RewriteMethodDeclaration(ObjCMethodDecl *Method);
-    void RewriteProperties(int nProperties, ObjCPropertyDecl **Properties);
+    void RewriteProperties(unsigned nProperties, ObjCPropertyDecl **Properties);
     void RewriteFunctionDecl(FunctionDecl *FD);
     void RewriteObjCQualifiedInterfaceTypes(Decl *Dcl);
     bool needToScanForQualifiers(QualType T);
@@ -549,9 +549,9 @@ void RewriteTest::RewriteMethodDeclaration(ObjCMethodDecl *Method) {
   }
 }
 
-void RewriteTest::RewriteProperties(int nProperties, ObjCPropertyDecl **Properties) 
+void RewriteTest::RewriteProperties(unsigned nProperties, ObjCPropertyDecl **Properties) 
 {
-  for (int i = 0; i < nProperties; i++) {
+  for (unsigned i = 0; i < nProperties; i++) {
     ObjCPropertyDecl *Property = Properties[i];
     SourceLocation Loc = Property->getLocation();
     
index 03fa99abbb62e2ec04a41956dba3b094c4d03f36..0e49101e3cbeaf4387a19839f1f9f7d4a17b7108 100644 (file)
@@ -217,7 +217,7 @@ class ObjCInterfaceDecl : public TypeDecl {
     
   /// class properties
   ObjCPropertyDecl **PropertyDecl;  // Null if no property
-  int NumPropertyDecl;  // -1 if no property
+  unsigned NumPropertyDecl;  // 0 if none.
   
   bool ForwardDecl:1; // declared with @class.
   bool InternalInterface:1; // true - no @interface for @implementation
@@ -285,6 +285,9 @@ public:
                   ObjCMethodDecl **clsMethods, unsigned numClsMembers,
                   SourceLocation AtEnd);
   
+  void addProperties(ObjCPropertyDecl **Properties, unsigned NumProperties);
+  
+  
   bool isForwardDecl() const { return ForwardDecl; }
   void setForwardDecl(bool val) { ForwardDecl = val; }
   
@@ -335,13 +338,9 @@ public:
   SourceLocation getAtEndLoc() const { return AtEndLoc; }
   
   int getNumPropertyDecl() const { return NumPropertyDecl; }
-  void setNumPropertyDecl(int num) { NumPropertyDecl = num; }
   
-  ObjCPropertyDecl **const getPropertyDecl() const { return PropertyDecl; }
+  ObjCPropertyDecl * const * getPropertyDecl() const { return PropertyDecl; }
   ObjCPropertyDecl **getPropertyDecl() { return PropertyDecl; }
-  void setPropertyDecls(ObjCPropertyDecl **properties) { 
-    PropertyDecl = properties; 
-  }
 
   /// ImplicitInterfaceDecl - check that this is an implicitely declared
   /// ObjCInterfaceDecl node. This is for legacy objective-c @implementation
index dcb53e8c426e973483970f7fe8a3042d17b17395..afc3aa195981135b4a9a01be99f5945b62630b68 100644 (file)
@@ -170,6 +170,18 @@ void ObjCInterfaceDecl::addMethods(ObjCMethodDecl **insMethods,
   AtEndLoc = endLoc;
 }
 
+/// addMethods - Insert instance and methods declarations into
+/// ObjCInterfaceDecl's InsMethods and ClsMethods fields.
+///
+void ObjCInterfaceDecl::addProperties(ObjCPropertyDecl **Properties, 
+                                      unsigned NumProperties) {
+  if (NumProperties == 0) return;
+  
+  NumPropertyDecl = NumProperties;
+  PropertyDecl = new ObjCPropertyDecl*[NumProperties];
+  memcpy(PropertyDecl, Properties, NumProperties*sizeof(ObjCPropertyDecl*));
+}                                   
+
 /// addMethods - Insert instance and methods declarations into
 /// ObjCProtocolDecl's ProtoInsMethods and ProtoClsMethods fields.
 ///
index 121004db9901f1ed2d0176e6482dd367d2d65c79..335122ebfa59b522afcfc932dbef05d836adb079 100644 (file)
@@ -705,13 +705,8 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl,
   
   // TODO: property declaration in category and protocols.
   if (pNum != 0)
-    if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {
-      // FIXME: Move the memory allocation into setPropertyDecls!
-      ObjCPropertyDecl **properties = new ObjCPropertyDecl*[pNum];
-      memcpy(properties, allProperties, pNum*sizeof(ObjCPropertyDecl*));
-      IDecl->setPropertyDecls(properties);
-      IDecl->setNumPropertyDecl(pNum);
-    }
+    if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl))
+      IDecl->addProperties((ObjCPropertyDecl**)allProperties, pNum);
   
   for (unsigned i = 0; i < allNum; i++ ) {
     ObjCMethodDecl *Method =