[clang-tools-extra] r230665 - Fixed canonical path function.
John Thompson
John.Thompson.JTSoftware at gmail.com
Thu Feb 26 11:31:10 PST 2015
Author: jtsoftware
Date: Thu Feb 26 13:31:10 2015
New Revision: 230665
URL: http://llvm.org/viewvc/llvm-project?rev=230665&view=rev
Log:
Fixed canonical path function.
Modified:
clang-tools-extra/trunk/modularize/ModularizeUtilities.cpp
clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp
Modified: clang-tools-extra/trunk/modularize/ModularizeUtilities.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/modularize/ModularizeUtilities.cpp?rev=230665&r1=230664&r2=230665&view=diff
==============================================================================
--- clang-tools-extra/trunk/modularize/ModularizeUtilities.cpp (original)
+++ clang-tools-extra/trunk/modularize/ModularizeUtilities.cpp Thu Feb 26 13:31:10 2015
@@ -341,13 +341,31 @@ bool ModularizeUtilities::collectUmbrell
}
return true;
}
+
+std::string normalize(StringRef Path) {
+ SmallString<128> Buffer;
+ llvm::sys::path::const_iterator B = llvm::sys::path::begin(Path),
+ E = llvm::sys::path::end(Path);
+ while (B != E) {
+ if (B->compare(".") == 0) {
+ }
+ else if (B->compare("..") == 0)
+ llvm::sys::path::remove_filename(Buffer);
+ else
+ llvm::sys::path::append(Buffer, *B);
+ ++B;
+ }
+ if (Path.endswith("/") || Path.endswith("\\"))
+ Buffer.append(1, Path.back());
+ return Buffer.c_str();
+}
// Convert header path to canonical form.
// The canonical form is basically just use forward slashes, and remove "./".
// \param FilePath The file path, relative to the module map directory.
// \returns The file path in canonical form.
std::string ModularizeUtilities::getCanonicalPath(StringRef FilePath) {
- std::string Tmp(FilePath);
+ std::string Tmp(normalize(FilePath));
std::replace(Tmp.begin(), Tmp.end(), '\\', '/');
StringRef Tmp2(Tmp);
if (Tmp2.startswith("./"))
Modified: clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp?rev=230665&r1=230664&r2=230665&view=diff
==============================================================================
--- clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp (original)
+++ clang-tools-extra/trunk/modularize/PreprocessorTracker.cpp Thu Feb 26 13:31:10 2015
@@ -251,6 +251,7 @@
#include "llvm/ADT/SmallSet.h"
#include "llvm/Support/StringPool.h"
#include "llvm/Support/raw_ostream.h"
+#include "ModularizeUtilities.h"
namespace Modularize {
@@ -930,8 +931,8 @@ public:
// and block statement.
clang::FileID FileID = PP.getSourceManager().getFileID(BlockStartLoc);
std::string SourcePath = getSourceLocationFile(PP, BlockStartLoc);
+ SourcePath = ModularizeUtilities::getCanonicalPath(SourcePath);
HeaderHandle SourceHandle = findHeaderHandle(SourcePath);
- // FIXME: Go back and fix getSourceLocation to use a canonical form.
if (SourceHandle == -1)
return true;
int BlockStartLine, BlockStartColumn, BlockEndLine, BlockEndColumn;
More information about the cfe-commits
mailing list