Change ObjCForwardProtocolDecl to use an ObjCList.

llvm-svn: 65131
This commit is contained in:
Chris Lattner 2009-02-20 18:10:37 +00:00
parent cdbb5e336d
commit ed89b3ff2f
3 changed files with 18 additions and 42 deletions

View File

@ -97,10 +97,10 @@ void DeclPrinter:: PrintDecl(Decl *D) {
} else if (ObjCForwardProtocolDecl *OFPD =
dyn_cast<ObjCForwardProtocolDecl>(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 =

View File

@ -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<ObjCProtocolDecl> 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<ObjCProtocolDecl>::iterator iterator;
iterator begin() const { return ReferencedProtocols.begin(); }
iterator end() const { return ReferencedProtocols.end(); }
static bool classof(const Decl *D) {
return D->getKind() == ObjCForwardProtocol;

View File

@ -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,