diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-02-03 00:18:12 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-02-03 00:18:12 +0000 |
commit | 8c0577faf3da6cc2d85d6210777c3ec4f957741b (patch) | |
tree | aebc112956a5fb8e17d9a8b86ee0872e03e2bab6 /clang/lib/Basic/FileManager.cpp | |
parent | df0dd7dc69400342be613f0f2ccc0b44dfa627b1 (diff) | |
download | bcm5719-llvm-8c0577faf3da6cc2d85d6210777c3ec4f957741b.tar.gz bcm5719-llvm-8c0577faf3da6cc2d85d6210777c3ec4f957741b.zip |
Improve the performance of filename canonicalization by avoiding
redundant searches in the string. No functionality change.
llvm-svn: 124760
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
-rw-r--r-- | clang/lib/Basic/FileManager.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index 5bf1ae36892..53d7c9a6bd5 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -279,8 +279,8 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename, llvm::SmallVectorImpl<char> &Scratch) { size_t Start = 0; bool Changed = false; + size_t FirstSlash = Filename.find('/', Start); do { - size_t FirstSlash = Filename.find('/', Start); if (FirstSlash == llvm::StringRef::npos) { // No more components. Just copy the rest of the file name, if // we need to. @@ -302,6 +302,7 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename, // Skip over the './'. Start = FirstSlash + 1; + FirstSlash = Filename.find('/', Start); continue; } @@ -322,6 +323,7 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename, // Skip over the 'foo/..'. Start = SecondSlash + 1; + FirstSlash = Filename.find('/', Start); continue; } @@ -329,6 +331,11 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename, Scratch.append(Filename.begin() + Start, Filename.begin() + FirstSlash + 1); Start = FirstSlash + 1; + + if (SecondSlash == llvm::StringRef::npos) + FirstSlash = Filename.find('/', Start); + else + FirstSlash = SecondSlash; } while (true); if (Changed) { |