From 55d13b4d5530a14d5baa72adab32ae78ba256caf Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 16 Mar 2008 21:23:50 +0000 Subject: [PATCH] make property addition work list all other "add" methods. Do 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 | 6 +++--- include/clang/AST/DeclObjC.h | 11 +++++------ lib/AST/DeclObjC.cpp | 12 ++++++++++++ lib/Sema/SemaDeclObjC.cpp | 9 ++------- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp index 2b88c0c8f3..927053e162 100644 --- a/Driver/RewriteTest.cpp +++ b/Driver/RewriteTest.cpp @@ -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(); diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 03fa99abbb..0e49101e3c 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -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 diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index dcb53e8c42..afc3aa1959 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -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. /// diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 121004db99..335122ebfa 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -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(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(ClassDecl)) + IDecl->addProperties((ObjCPropertyDecl**)allProperties, pNum); for (unsigned i = 0; i < allNum; i++ ) { ObjCMethodDecl *Method = -- 2.40.0