From: Chris Lattner Date: Sat, 6 Oct 2007 20:05:59 +0000 (+0000) Subject: simplify the interface for creating ObjcForwardProtocolDecl X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b97de3eddf0a0f7ff97204e7def6b7e0aa8953f2;p=clang simplify the interface for creating ObjcForwardProtocolDecl git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42705 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index 8f743789e8..5916f4cccb 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1036,13 +1036,12 @@ Sema::ActOnFindProtocolDeclaration(Scope *S, Action::DeclTy * Sema::ActOnForwardProtocolDeclaration(Scope *S, SourceLocation AtProtocolLoc, IdentifierInfo **IdentList, unsigned NumElts) { - ObjcForwardProtocolDecl *FDecl = new ObjcForwardProtocolDecl(AtProtocolLoc, - NumElts); + llvm::SmallVector Protocols; for (unsigned i = 0; i != NumElts; ++i) { - ObjcProtocolDecl *PDecl; - PDecl = getObjCProtocolDecl(S, IdentList[i], AtProtocolLoc); - if (!PDecl) {// Already seen? + ObjcProtocolDecl *PDecl = getObjCProtocolDecl(S, IdentList[i], + AtProtocolLoc); + if (!PDecl) { // Already seen? PDecl = new ObjcProtocolDecl(SourceLocation(), 0, IdentList[i], true); // Chain & install the protocol decl into the identifier. PDecl->setNext(IdentList[i]->getFETokenInfo()); @@ -1051,9 +1050,10 @@ Sema::ActOnForwardProtocolDeclaration(Scope *S, SourceLocation AtProtocolLoc, // Remember that this needs to be removed when the scope is popped. S->AddDecl(IdentList[i]); - FDecl->setForwardProtocolDecl((int)i, PDecl); + Protocols.push_back(PDecl); } - return FDecl; + return new ObjcForwardProtocolDecl(AtProtocolLoc, + &Protocols[0], Protocols.size()); } Sema::DeclTy *Sema::ActOnStartCategoryInterface(Scope* S, diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 0d1bc7fb6d..0f4e8d76b5 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -381,12 +381,13 @@ class ObjcForwardProtocolDecl : public TypeDecl { ObjcProtocolDecl **ReferencedProtocols; unsigned NumReferencedProtocols; public: - ObjcForwardProtocolDecl(SourceLocation L, unsigned nElts) + ObjcForwardProtocolDecl(SourceLocation L, + ObjcProtocolDecl **Elts, unsigned nElts) : TypeDecl(ObjcForwardProtocol, L, 0, 0) { + NumReferencedProtocols = nElts; if (nElts) { ReferencedProtocols = new ObjcProtocolDecl*[nElts]; - memset(ReferencedProtocols, '\0', nElts*sizeof(ObjcProtocolDecl*)); - NumReferencedProtocols = nElts; + memcpy(ReferencedProtocols, Elts, nElts*sizeof(ObjcProtocolDecl*)); } else { ReferencedProtocols = 0; } @@ -407,7 +408,6 @@ public: return ReferencedProtocols[idx]; } - static bool classof(const Decl *D) { return D->getKind() == ObjcForwardProtocol; } diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 7abc62e0ec..f2c4947312 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -326,7 +326,6 @@ private: friend class QualType; public: virtual void getAsStringInternal(std::string &InnerString) const = 0; - static bool classof(const Type *) { return true; } };