From: Benjamin Kramer Date: Fri, 7 Mar 2014 21:35:40 +0000 (+0000) Subject: [C++11] Convert sort predicates into lambdas. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3344f96e8b727bd47bd6e845541b5e5682aeae81;p=clang [C++11] Convert sort predicates into lambdas. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203289 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/VTableBuilder.cpp b/lib/AST/VTableBuilder.cpp index d975dbe363..eb5fa32855 100644 --- a/lib/AST/VTableBuilder.cpp +++ b/lib/AST/VTableBuilder.cpp @@ -3244,10 +3244,6 @@ void MicrosoftVTableContext::computeVTablePaths(bool ForVBTables, Changed = rebucketPaths(Paths); } -static bool pathCompare(const VPtrInfo *LHS, const VPtrInfo *RHS) { - return LHS->MangledPath < RHS->MangledPath; -} - static bool extendPath(VPtrInfo *P) { if (P->NextBaseToMangle) { P->MangledPath.push_back(P->NextBaseToMangle); @@ -3265,7 +3261,10 @@ static bool rebucketPaths(VPtrInfoVector &Paths) { // ordering is based on pointers, but it doesn't change our output order. The // current algorithm is designed to match MSVC 2012's names. VPtrInfoVector PathsSorted(Paths); - std::sort(PathsSorted.begin(), PathsSorted.end(), pathCompare); + std::sort(PathsSorted.begin(), PathsSorted.end(), + [](const VPtrInfo *LHS, const VPtrInfo *RHS) { + return LHS->MangledPath < RHS->MangledPath; + }); bool Changed = false; for (size_t I = 0, E = PathsSorted.size(); I != E;) { // Scan forward to find the end of the bucket. diff --git a/lib/Analysis/LiveVariables.cpp b/lib/Analysis/LiveVariables.cpp index f13f90324c..799799c542 100644 --- a/lib/Analysis/LiveVariables.cpp +++ b/lib/Analysis/LiveVariables.cpp @@ -581,16 +581,6 @@ LiveVariables::computeLiveness(AnalysisDeclContext &AC, return new LiveVariables(LV); } -static bool compare_entries(const CFGBlock *A, const CFGBlock *B) { - return A->getBlockID() < B->getBlockID(); -} - -static bool compare_vd_entries(const Decl *A, const Decl *B) { - SourceLocation ALoc = A->getLocStart(); - SourceLocation BLoc = B->getLocStart(); - return ALoc.getRawEncoding() < BLoc.getRawEncoding(); -} - void LiveVariables::dumpBlockLiveness(const SourceManager &M) { getImpl(impl).dumpBlockLiveness(M); } @@ -602,7 +592,9 @@ void LiveVariablesImpl::dumpBlockLiveness(const SourceManager &M) { it != ei; ++it) { vec.push_back(it->first); } - std::sort(vec.begin(), vec.end(), compare_entries); + std::sort(vec.begin(), vec.end(), [](const CFGBlock *A, const CFGBlock *B) { + return A->getBlockID() < B->getBlockID(); + }); std::vector declVec; @@ -619,9 +611,11 @@ void LiveVariablesImpl::dumpBlockLiveness(const SourceManager &M) { se = vals.liveDecls.end(); si != se; ++si) { declVec.push_back(*si); } - - std::sort(declVec.begin(), declVec.end(), compare_vd_entries); - + + std::sort(declVec.begin(), declVec.end(), [](const Decl *A, const Decl *B) { + return A->getLocStart() < B->getLocStart(); + }); + for (std::vector::iterator di = declVec.begin(), de = declVec.end(); di != de; ++di) { llvm::errs() << " " << (*di)->getDeclName().getAsString() diff --git a/lib/Analysis/ReachableCode.cpp b/lib/Analysis/ReachableCode.cpp index 47f8f2b90c..1e5aa1224b 100644 --- a/lib/Analysis/ReachableCode.cpp +++ b/lib/Analysis/ReachableCode.cpp @@ -400,15 +400,6 @@ const Stmt *DeadCodeScan::findDeadCode(const clang::CFGBlock *Block) { return 0; } -static int SrcCmp(const std::pair *p1, - const std::pair *p2) { - if (p1->second->getLocStart() < p2->second->getLocStart()) - return -1; - if (p2->second->getLocStart() < p1->second->getLocStart()) - return 1; - return 0; -} - unsigned DeadCodeScan::scanBackwards(const clang::CFGBlock *Start, clang::reachable_code::Callback &CB) { @@ -457,7 +448,13 @@ unsigned DeadCodeScan::scanBackwards(const clang::CFGBlock *Start, // If we didn't find a dead root, then report the dead code with the // earliest location. if (!DeferredLocs.empty()) { - llvm::array_pod_sort(DeferredLocs.begin(), DeferredLocs.end(), SrcCmp); + llvm::array_pod_sort(DeferredLocs.begin(), DeferredLocs.end(), + [](const DeferredLocsTy::value_type *p1, + const DeferredLocsTy::value_type *p2) { + if (p1->second->getLocStart() != p2->second->getLocStart()) + return p1->second->getLocStart() < p2->second->getLocStart() ? -1 : 1; + return 0; + }); for (DeferredLocsTy::iterator I = DeferredLocs.begin(), E = DeferredLocs.end(); I != E; ++I) { const CFGBlock *Block = I->first; diff --git a/lib/Frontend/PrintPreprocessedOutput.cpp b/lib/Frontend/PrintPreprocessedOutput.cpp index 20d7cd3a8c..88e3b2212a 100644 --- a/lib/Frontend/PrintPreprocessedOutput.cpp +++ b/lib/Frontend/PrintPreprocessedOutput.cpp @@ -678,11 +678,6 @@ static void PrintPreprocessedTokens(Preprocessor &PP, Token &Tok, } } -typedef std::pair id_macro_pair; -static int MacroIDCompare(const id_macro_pair *LHS, const id_macro_pair *RHS) { - return LHS->first->getName().compare(RHS->first->getName()); -} - static void DoPrintMacros(Preprocessor &PP, raw_ostream *OS) { // Ignore unknown pragmas. PP.AddPragmaHandler(new EmptyPragmaHandler()); @@ -695,13 +690,17 @@ static void DoPrintMacros(Preprocessor &PP, raw_ostream *OS) { do PP.Lex(Tok); while (Tok.isNot(tok::eof)); + typedef std::pair id_macro_pair; SmallVector MacrosByID; for (Preprocessor::macro_iterator I = PP.macro_begin(), E = PP.macro_end(); I != E; ++I) { if (I->first->hasMacroDefinition()) MacrosByID.push_back(id_macro_pair(I->first, I->second->getMacroInfo())); } - llvm::array_pod_sort(MacrosByID.begin(), MacrosByID.end(), MacroIDCompare); + llvm::array_pod_sort(MacrosByID.begin(), MacrosByID.end(), + [](const id_macro_pair *LHS, const id_macro_pair *RHS) { + return LHS->first->getName().compare(RHS->first->getName()); + }); for (unsigned i = 0, e = MacrosByID.size(); i != e; ++i) { MacroInfo &MI = *MacrosByID[i].second; diff --git a/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp b/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp index 51e7a3d3ce..fbb130bc17 100644 --- a/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp +++ b/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp @@ -161,11 +161,6 @@ namespace { class ConfigDumper : public Checker< check::EndOfTranslationUnit > { typedef AnalyzerOptions::ConfigTable Table; - static int compareEntry(const Table::MapEntryTy *const *LHS, - const Table::MapEntryTy *const *RHS) { - return (*LHS)->getKey().compare((*RHS)->getKey()); - } - public: void checkEndOfTranslationUnit(const TranslationUnitDecl *TU, AnalysisManager& mgr, @@ -176,7 +171,11 @@ public: for (Table::const_iterator I = Config.begin(), E = Config.end(); I != E; ++I) Keys.push_back(&*I); - llvm::array_pod_sort(Keys.begin(), Keys.end(), compareEntry); + llvm::array_pod_sort(Keys.begin(), Keys.end(), + [](const Table::MapEntryTy *const *LHS, + const Table::MapEntryTy *const *RHS) { + return (*LHS)->getKey().compare((*RHS)->getKey()); + }); llvm::errs() << "[config]\n"; for (unsigned I = 0, E = Keys.size(); I != E; ++I) diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index d98acb197f..ff0350aafc 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -762,12 +762,6 @@ bool CursorVisitor::VisitDeclaratorDecl(DeclaratorDecl *DD) { return false; } -/// \brief Compare two base or member initializers based on their source order. -static int CompareCXXCtorInitializers(CXXCtorInitializer *const *X, - CXXCtorInitializer *const *Y) { - return (*X)->getSourceOrder() - (*Y)->getSourceOrder(); -} - bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) { unsigned NumParamList = ND->getNumTemplateParameterLists(); for (unsigned i = 0; i < NumParamList; i++) { @@ -822,9 +816,12 @@ bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) { } // Sort the initializers in source order - llvm::array_pod_sort(WrittenInits.begin(), WrittenInits.end(), - &CompareCXXCtorInitializers); - + llvm::array_pod_sort( + WrittenInits.begin(), WrittenInits.end(), + [](CXXCtorInitializer *const *X, CXXCtorInitializer *const *Y) { + return (*X)->getSourceOrder() - (*Y)->getSourceOrder(); + }); + // Visit the initializers in source order for (unsigned I = 0, N = WrittenInits.size(); I != N; ++I) { CXXCtorInitializer *Init = WrittenInits[I];