I think the function as intended for use in modularize is just meant to be lexical. That might not be what the TS specifies so that's why I suggested to John to rename it to avoid confusion.
-- Sean Silva On Fri, Feb 27, 2015 at 11:14 AM, Reid Kleckner <[email protected]> wrote: > Doesn't this function change what Path points to in the presence of > symlinks? This patch seems incorrect as written. > > On Thu, Feb 26, 2015 at 11:31 AM, John Thompson < > [email protected]> wrote: > >> 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; >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
