} 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 =
///
/// @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;
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,