Use declaresSameEntity() when comparing ObjCProtocolDecls, and
getCanonicalDecl() when putting ObjCProtocolDecls into a set. This is groundwork for making ObjCProtocolDecl redeclarable. llvm-svn: 147406
This commit is contained in:
parent
0f960a0a5a
commit
33b2429bf3
|
@ -1137,6 +1137,14 @@ public:
|
|||
SourceLocation getLocEnd() const { return EndLoc; }
|
||||
void setLocEnd(SourceLocation LE) { EndLoc = LE; }
|
||||
|
||||
/// Retrieves the canonical declaration of this Objective-C protocol.
|
||||
ObjCProtocolDecl *getCanonicalDecl() {
|
||||
return this;
|
||||
}
|
||||
const ObjCProtocolDecl *getCanonicalDecl() const {
|
||||
return this;
|
||||
}
|
||||
|
||||
static bool classof(const Decl *D) { return classofKind(D->getKind()); }
|
||||
static bool classof(const ObjCProtocolDecl *D) { return true; }
|
||||
static bool classofKind(Kind K) { return K == ObjCProtocol; }
|
||||
|
|
|
@ -1195,10 +1195,10 @@ void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
|
|||
for (ObjCInterfaceDecl::all_protocol_iterator P = OI->all_referenced_protocol_begin(),
|
||||
PE = OI->all_referenced_protocol_end(); P != PE; ++P) {
|
||||
ObjCProtocolDecl *Proto = (*P);
|
||||
Protocols.insert(Proto);
|
||||
Protocols.insert(Proto->getCanonicalDecl());
|
||||
for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
|
||||
PE = Proto->protocol_end(); P != PE; ++P) {
|
||||
Protocols.insert(*P);
|
||||
Protocols.insert((*P)->getCanonicalDecl());
|
||||
CollectInheritedProtocols(*P, Protocols);
|
||||
}
|
||||
}
|
||||
|
@ -1216,7 +1216,7 @@ void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
|
|||
for (ObjCCategoryDecl::protocol_iterator P = OC->protocol_begin(),
|
||||
PE = OC->protocol_end(); P != PE; ++P) {
|
||||
ObjCProtocolDecl *Proto = (*P);
|
||||
Protocols.insert(Proto);
|
||||
Protocols.insert(Proto->getCanonicalDecl());
|
||||
for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
|
||||
PE = Proto->protocol_end(); P != PE; ++P)
|
||||
CollectInheritedProtocols(*P, Protocols);
|
||||
|
@ -1225,7 +1225,7 @@ void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
|
|||
for (ObjCProtocolDecl::protocol_iterator P = OP->protocol_begin(),
|
||||
PE = OP->protocol_end(); P != PE; ++P) {
|
||||
ObjCProtocolDecl *Proto = (*P);
|
||||
Protocols.insert(Proto);
|
||||
Protocols.insert(Proto->getCanonicalDecl());
|
||||
for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(),
|
||||
PE = Proto->protocol_end(); P != PE; ++P)
|
||||
CollectInheritedProtocols(*P, Protocols);
|
||||
|
@ -5178,7 +5178,7 @@ bool ASTContext::areCompatibleVectorTypes(QualType FirstVec,
|
|||
bool
|
||||
ASTContext::ProtocolCompatibleWithProtocol(ObjCProtocolDecl *lProto,
|
||||
ObjCProtocolDecl *rProto) const {
|
||||
if (lProto == rProto)
|
||||
if (declaresSameEntity(lProto, rProto))
|
||||
return true;
|
||||
for (ObjCProtocolDecl::protocol_iterator PI = rProto->protocol_begin(),
|
||||
E = rProto->protocol_end(); PI != E; ++PI)
|
||||
|
|
|
@ -3085,7 +3085,7 @@ Stmt *RewriteObjC::RewriteObjCProtocolExpr(ObjCProtocolExpr *Exp) {
|
|||
CK_BitCast,
|
||||
DerefExpr);
|
||||
ReplaceStmt(Exp, castExpr);
|
||||
ProtocolExprDecls.insert(Exp->getProtocol());
|
||||
ProtocolExprDecls.insert(Exp->getProtocol()->getCanonicalDecl());
|
||||
// delete Exp; leak for now, see RewritePropertyOrImplicitSetter() usage for more info.
|
||||
return castExpr;
|
||||
|
||||
|
@ -5185,7 +5185,7 @@ void RewriteObjCFragileABI::RewriteObjCProtocolMetaData(
|
|||
objc_protocol_methods = true;
|
||||
}
|
||||
// Do not synthesize the protocol more than once.
|
||||
if (ObjCSynthesizedProtocols.count(PDecl))
|
||||
if (ObjCSynthesizedProtocols.count(PDecl->getCanonicalDecl()))
|
||||
return;
|
||||
|
||||
if (PDecl->instmeth_begin() != PDecl->instmeth_end()) {
|
||||
|
@ -5307,7 +5307,7 @@ void RewriteObjCFragileABI::RewriteObjCProtocolMetaData(
|
|||
Result += "};\n";
|
||||
|
||||
// Mark this protocol as having been generated.
|
||||
if (!ObjCSynthesizedProtocols.insert(PDecl))
|
||||
if (!ObjCSynthesizedProtocols.insert(PDecl->getCanonicalDecl()))
|
||||
llvm_unreachable("protocol already synthesized");
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue