/// we can check for duplicates and find local method declarations.
llvm::SmallVector<ObjCCategoryImplDecl*, 8> ObjCCategoryImpls;
- /// ObjCInterfaceDecls - Keep track of all class declarations declared
- /// with @interface, so that we can emit errors on duplicates and
- /// find the declarations when needed.
- typedef llvm::DenseMap<const IdentifierInfo*,
- ObjCInterfaceDecl*> ObjCInterfaceDeclsTy;
- ObjCInterfaceDeclsTy ObjCInterfaceDecls;
-
/// ObjCAliasDecls - Keep track of all class declarations declared
/// with @compatibility_alias, so that we can emit errors on duplicates and
/// find the declarations when needed. This construct is ancient and will
if (AttrList)
ProcessDeclAttributeList(IDecl, AttrList);
- ObjCInterfaceDecls[ClassName] = IDecl;
PushOnScopeChains(IDecl, TUScope);
- // Remember that this needs to be removed when the scope is popped.
- TUScope->AddDecl(DeclPtrTy::make(IDecl));
}
if (SuperName) {
// we should copy them over.
IDecl = ObjCInterfaceDecl::Create(Context, CurContext, AtClassImplLoc,
ClassName, ClassLoc, false, true);
- ObjCInterfaceDecls[ClassName] = IDecl;
IDecl->setSuperClass(SDecl);
IDecl->setLocEnd(ClassLoc);
-
- // FIXME: PushOnScopeChains?
+
+ PushOnScopeChains(IDecl, TUScope);
CurContext->addDecl(Context, IDecl);
// Remember that this needs to be removed when the scope is popped.
TUScope->AddDecl(DeclPtrTy::make(IDecl));
if (!IDecl) { // Not already seen? Make a forward decl.
IDecl = ObjCInterfaceDecl::Create(Context, CurContext, AtClassLoc,
IdentList[i], SourceLocation(), true);
- ObjCInterfaceDecls[IdentList[i]] = IDecl;
-
PushOnScopeChains(IDecl, TUScope);
- // Remember that this needs to be removed when the scope is popped.
- TUScope->AddDecl(DeclPtrTy::make(IDecl));
}
Interfaces.push_back(IDecl);
// Unlike typedef's, they can only be introduced at file-scope (and are
// therefore not scoped decls). They can, however, be shadowed by
// other names in IDNS_Ordinary.
- ObjCInterfaceDeclsTy::iterator IDI = ObjCInterfaceDecls.find(II);
- if (IDI != ObjCInterfaceDecls.end())
- return LookupResult::CreateLookupResult(Context, IDI->second);
ObjCAliasTy::iterator I = ObjCAliasDecls.find(II);
if (I != ObjCAliasDecls.end())
return LookupResult::CreateLookupResult(Context,