simplify the interface for creating ObjcForwardProtocolDecl

llvm-svn: 42705
This commit is contained in:
Chris Lattner 2007-10-06 20:05:59 +00:00
parent f0d15d470f
commit 11eca782a3
3 changed files with 11 additions and 12 deletions

View File

@ -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<ObjcProtocolDecl*, 32> 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<ScopedDecl>());
@ -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,

View File

@ -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;
}

View File

@ -326,7 +326,6 @@ private:
friend class QualType;
public:
virtual void getAsStringInternal(std::string &InnerString) const = 0;
static bool classof(const Type *) { return true; }
};