diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-06 18:48:47 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-06 18:48:47 +0000 |
| commit | 63d10d6767f71bca93f288ec9949894bb6cff1a2 (patch) | |
| tree | 2eaeed5d47498eaa1f5ff5b8123a157bece5d000 /llvm/tools/llvm-nm | |
| parent | fc0f93832b12677d2e7356dea93e9990dc79f9f5 (diff) | |
| download | bcm5719-llvm-63d10d6767f71bca93f288ec9949894bb6cff1a2.tar.gz bcm5719-llvm-63d10d6767f71bca93f288ec9949894bb6cff1a2.zip | |
Reduce code duplication. NFC.
llvm-svn: 241484
Diffstat (limited to 'llvm/tools/llvm-nm')
| -rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 4edb4efa8d0..961754ccefa 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -185,60 +185,31 @@ struct NMSymbol { } static bool compareSymbolAddress(const NMSymbol &A, const NMSymbol &B) { - if (!ReverseSort) { - if (A.Address < B.Address) - return true; - if (A.Address == B.Address && A.Name < B.Name) - return true; - if (A.Address == B.Address && A.Name == B.Name && A.Size < B.Size) - return true; - return false; - } - - if (A.Address > B.Address) + if (A.Address < B.Address) return true; - if (A.Address == B.Address && A.Name > B.Name) + if (A.Address == B.Address && A.Name < B.Name) return true; - if (A.Address == B.Address && A.Name == B.Name && A.Size > B.Size) + if (A.Address == B.Address && A.Name == B.Name && A.Size < B.Size) return true; return false; } static bool compareSymbolSize(const NMSymbol &A, const NMSymbol &B) { - if (!ReverseSort) { - if (A.Size < B.Size) - return true; - if (A.Size == B.Size && A.Name < B.Name) - return true; - if (A.Size == B.Size && A.Name == B.Name && A.Address < B.Address) - return true; - return false; - } - - if (A.Size > B.Size) + if (A.Size < B.Size) return true; - if (A.Size == B.Size && A.Name > B.Name) + if (A.Size == B.Size && A.Name < B.Name) return true; - if (A.Size == B.Size && A.Name == B.Name && A.Address > B.Address) + if (A.Size == B.Size && A.Name == B.Name && A.Address < B.Address) return true; return false; } static bool compareSymbolName(const NMSymbol &A, const NMSymbol &B) { - if (!ReverseSort) { - if (A.Name < B.Name) - return true; - if (A.Name == B.Name && A.Size < B.Size) - return true; - if (A.Name == B.Name && A.Size == B.Size && A.Address < B.Address) - return true; - return false; - } - if (A.Name > B.Name) + if (A.Name < B.Name) return true; - if (A.Name == B.Name && A.Size > B.Size) + if (A.Name == B.Name && A.Size < B.Size) return true; - if (A.Name == B.Name && A.Size == B.Size && A.Address > B.Address) + if (A.Name == B.Name && A.Size == B.Size && A.Address < B.Address) return true; return false; } @@ -526,12 +497,17 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName, std::string ArchiveName, std::string ArchitectureName) { if (!NoSort) { + std::function<bool(const NMSymbol &, const NMSymbol &)> Cmp; if (NumericSort) - std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolAddress); + Cmp = compareSymbolAddress; else if (SizeSort) - std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolSize); + Cmp = compareSymbolSize; else - std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolName); + Cmp = compareSymbolName; + + if (ReverseSort) + Cmp = [=](const NMSymbol &A, const NMSymbol &B) { return !Cmp(A, B); }; + std::sort(SymbolList.begin(), SymbolList.end(), Cmp); } if (!PrintFileName) { |

