Split ObjCInterfaceDecl::ReferencedProtocols into two lists: ReferencedProtocols and AllReferencedProtocols. ReferencedProtocols
(and thus protocol_begin(), protocol_end()) now only contains the list of protocols that were directly referenced in an @interface declaration. 'all_referenced_protocol_[begin,end]()' now returns the set of protocols that were referenced in both the @interface and class extensions. The latter is needed for semantic analysis/codegen, while the former is needed to maintain the lexical information of the original source. Fixes <rdar://problem/8380046>. llvm-svn: 112691
This commit is contained in:
@@ -2686,9 +2686,9 @@ static void AddObjCProperties(ObjCContainerDecl *Container,
|
||||
}
|
||||
|
||||
// Look through protocols.
|
||||
for (ObjCInterfaceDecl::protocol_iterator I = IFace->protocol_begin(),
|
||||
E = IFace->protocol_end();
|
||||
I != E; ++I)
|
||||
for (ObjCInterfaceDecl::all_protocol_iterator
|
||||
I = IFace->all_referenced_protocol_begin(),
|
||||
E = IFace->all_referenced_protocol_end(); I != E; ++I)
|
||||
AddObjCProperties(*I, AllowCategories, CurContext, Results);
|
||||
|
||||
// Look in the superclass.
|
||||
@@ -2698,8 +2698,8 @@ static void AddObjCProperties(ObjCContainerDecl *Container,
|
||||
} else if (const ObjCCategoryDecl *Category
|
||||
= dyn_cast<ObjCCategoryDecl>(Container)) {
|
||||
// Look through protocols.
|
||||
for (ObjCInterfaceDecl::protocol_iterator P = Category->protocol_begin(),
|
||||
PEnd = Category->protocol_end();
|
||||
for (ObjCCategoryDecl::protocol_iterator P = Category->protocol_begin(),
|
||||
PEnd = Category->protocol_end();
|
||||
P != PEnd; ++P)
|
||||
AddObjCProperties(*P, AllowCategories, CurContext, Results);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user