From 07fa7749da805969f2ed467a4eb5b405a4ff9a23 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 20 Feb 2009 18:10:37 +0000 Subject: [PATCH] Change ObjCForwardProtocolDecl to use an ObjCList. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65131 91177308-0d34-0410-b5e6-96231b3b80d8 --- Driver/ASTConsumers.cpp | 8 ++++---- include/clang/AST/DeclObjC.h | 35 ++++++++--------------------------- lib/AST/DeclObjC.cpp | 17 ++++++----------- 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index 397170e60d..f3bfc0b434 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -97,10 +97,10 @@ void DeclPrinter:: PrintDecl(Decl *D) { } else if (ObjCForwardProtocolDecl *OFPD = dyn_cast(D)) { Out << "@protocol "; - for (unsigned i = 0, e = OFPD->getNumForwardDecls(); i != e; ++i) { - const ObjCProtocolDecl *D = OFPD->getForwardProtocolDecl(i); - if (i) Out << ", "; - Out << D->getNameAsString(); + for (ObjCForwardProtocolDecl::iterator I = OFPD->begin(), E = OFPD->end(); + I != E; ++I) { + if (I != OFPD->begin()) Out << ", "; + Out << (*I)->getNameAsString(); } Out << ";\n"; } else if (ObjCImplementationDecl *OID = diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 10f59bcadf..efd5242953 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -658,44 +658,25 @@ public: /// /// @protocol NSTextInput, NSChangeSpelling, NSDraggingInfo; /// -/// FIXME: Should this be a transparent DeclContext? class ObjCForwardProtocolDecl : public Decl { - ObjCProtocolDecl **ReferencedProtocols; - unsigned NumReferencedProtocols; + ObjCList ReferencedProtocols; ObjCForwardProtocolDecl(DeclContext *DC, SourceLocation L, - ObjCProtocolDecl **Elts, unsigned nElts); - virtual ~ObjCForwardProtocolDecl() { - assert(ReferencedProtocols == 0 && "Destroy not called?"); - } + ObjCProtocolDecl *const *Elts, unsigned nElts); + virtual ~ObjCForwardProtocolDecl() {} public: static ObjCForwardProtocolDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L, - ObjCProtocolDecl **Elts, unsigned Num); + ObjCProtocolDecl *const *Elts, + unsigned Num); /// Destroy - Call destructors and release memory. virtual void Destroy(ASTContext& C); - - void setForwardProtocolDecl(unsigned idx, ObjCProtocolDecl *OID) { - assert(idx < NumReferencedProtocols && "index out of range"); - ReferencedProtocols[idx] = OID; - } - - unsigned getNumForwardDecls() const { return NumReferencedProtocols; } - - ObjCProtocolDecl *getForwardProtocolDecl(unsigned idx) { - assert(idx < NumReferencedProtocols && "index out of range"); - return ReferencedProtocols[idx]; - } - const ObjCProtocolDecl *getForwardProtocolDecl(unsigned idx) const { - assert(idx < NumReferencedProtocols && "index out of range"); - return ReferencedProtocols[idx]; - } - typedef ObjCProtocolDecl * const * iterator; - iterator begin() const { return ReferencedProtocols; } - iterator end() const { return ReferencedProtocols+NumReferencedProtocols; } + typedef ObjCList::iterator iterator; + iterator begin() const { return ReferencedProtocols.begin(); } + iterator end() const { return ReferencedProtocols.end(); } static bool classof(const Decl *D) { return D->getKind() == ObjCForwardProtocol; diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index b0d36dbab8..2ae7ccc816 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -137,26 +137,21 @@ void ObjCClassDecl::Destroy(ASTContext &C) { ObjCForwardProtocolDecl * ObjCForwardProtocolDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L, - ObjCProtocolDecl **Elts, unsigned NumElts) { + ObjCProtocolDecl *const *Elts, + unsigned NumElts) { return new (C) ObjCForwardProtocolDecl(DC, L, Elts, NumElts); } ObjCForwardProtocolDecl:: ObjCForwardProtocolDecl(DeclContext *DC, SourceLocation L, - ObjCProtocolDecl **Elts, unsigned nElts) + ObjCProtocolDecl *const *Elts, unsigned nElts) : Decl(ObjCForwardProtocol, DC, L) { - NumReferencedProtocols = nElts; - if (nElts) { - ReferencedProtocols = new ObjCProtocolDecl*[nElts]; - memcpy(ReferencedProtocols, Elts, nElts*sizeof(ObjCProtocolDecl*)); - } else { - ReferencedProtocols = 0; - } + ReferencedProtocols.set(Elts, nElts); } void ObjCForwardProtocolDecl::Destroy(ASTContext &C) { - delete [] ReferencedProtocols; - ReferencedProtocols = 0; + ReferencedProtocols.clear(); + Decl::Destroy(C); } ObjCCategoryDecl *ObjCCategoryDecl::Create(ASTContext &C, DeclContext *DC, -- 2.40.0