diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-04-15 18:47:22 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-04-15 18:47:22 +0000 |
commit | 77670f17ae3a5c3188149c19a7e386c01d0aa7c0 (patch) | |
tree | 63a989619863e0ff50192279a22ea1a2b42610a8 /lib/AST/ASTContext.cpp | |
parent | 1f35ec3c2c5662644c07969a1b5c5ad748764285 (diff) |
Revert "Speed-up ObjCMethodDecl::getOverriddenMethods()."
This reverts commit r179436.
Due to caching, it was possible that we could miss overridden methods that
were introduced by categories later on.
Along with reverting the commit I also included a test case that would have caught this.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179547 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ASTContext.cpp')
-rw-r--r-- | lib/AST/ASTContext.cpp | 37 |
1 files changed, 2 insertions, 35 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 8ede90dede..170cc0298b 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -1127,8 +1127,8 @@ void ASTContext::getOverriddenMethods( assert(D); if (const CXXMethodDecl *CXXMethod = dyn_cast<CXXMethodDecl>(D)) { - Overridden.append(overridden_methods_begin(CXXMethod), - overridden_methods_end(CXXMethod)); + Overridden.append(CXXMethod->begin_overridden_methods(), + CXXMethod->end_overridden_methods()); return; } @@ -1141,39 +1141,6 @@ void ASTContext::getOverriddenMethods( Overridden.append(OverDecls.begin(), OverDecls.end()); } -void ASTContext::getBaseObjCCategoriesAfterInterface( - const ObjCInterfaceDecl *D, - SmallVectorImpl<const ObjCCategoryDecl *> &Cats) const { - if (!D) - return; - - typedef llvm::SmallVector<const ObjCCategoryDecl *, 2> VecTy; - typedef llvm::DenseMap<const ObjCInterfaceDecl *, VecTy> MapTy; - - std::pair<MapTy::iterator, bool> - InsertOp = CatsAfterInterface.insert(std::make_pair(D, VecTy())); - VecTy &Vec = InsertOp.first->second; - if (!InsertOp.second) { - // already in map. - Cats.append(Vec.begin(), Vec.end()); - return; - } - - SourceLocation Loc = D->getLocation(); - for (const ObjCInterfaceDecl * - Class = D->getSuperClass(); Class; Class = Class->getSuperClass()) { - for (ObjCInterfaceDecl::known_categories_iterator - CatI = Class->known_categories_begin(), - CatEnd = Class->known_categories_end(); - CatI != CatEnd; ++CatI) { - if (SourceMgr.isBeforeInTranslationUnit(Loc, CatI->getLocation())) - Vec.push_back(*CatI); - } - } - - Cats.append(Vec.begin(), Vec.end()); -} - void ASTContext::addedLocalImportDecl(ImportDecl *Import) { assert(!Import->NextLocalImport && "Import declaration already in the chain"); assert(!Import->isFromASTFile() && "Non-local import declaration"); |