Author: revane Date: Fri Feb 15 13:38:28 2013 New Revision: 175288 URL: http://llvm.org/viewvc/llvm-project?rev=175288&view=rev Log: Propagate changes through no-op transforms
Currently, changes made by previous transforms are not kept if a transform doesn't make any changes itself to a given file. Now file states are propagated properly through transforms that don't make changes. Fixes: PR15281 Author: Jack Yang <[email protected]> Reviewer: klimek Modified: clang-tools-extra/trunk/cpp11-migrate/Cpp11Migrate.cpp clang-tools-extra/trunk/cpp11-migrate/LoopConvert/LoopConvert.cpp clang-tools-extra/trunk/cpp11-migrate/Transform.cpp clang-tools-extra/trunk/cpp11-migrate/Transform.h clang-tools-extra/trunk/cpp11-migrate/UseNullptr/UseNullptr.cpp Modified: clang-tools-extra/trunk/cpp11-migrate/Cpp11Migrate.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Cpp11Migrate.cpp?rev=175288&r1=175287&r2=175288&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Cpp11Migrate.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/Cpp11Migrate.cpp Fri Feb 15 13:38:28 2013 @@ -84,12 +84,8 @@ int main(int argc, const char **argv) { return 1; } - unsigned int NumFiles = OptionsParser.getSourcePathList().size(); - FileContentsByPath FileStates1, FileStates2, *InputFileStates = &FileStates1, *OutputFileStates = &FileStates2; - FileStates1.reserve(NumFiles); - FileStates2.reserve(NumFiles); // Apply transforms. for (Transforms::const_iterator I = TransformManager.begin(), Modified: clang-tools-extra/trunk/cpp11-migrate/LoopConvert/LoopConvert.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/LoopConvert/LoopConvert.cpp?rev=175288&r1=175287&r2=175288&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/LoopConvert/LoopConvert.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/LoopConvert/LoopConvert.cpp Fri Feb 15 13:38:28 2013 @@ -74,7 +74,7 @@ int LoopConvertTransform::apply(const Fi // FIXME: Do something if some replacements didn't get applied? LoopTool.applyAllReplacements(Rewrite.getRewriter()); - collectResults(Rewrite.getRewriter(), ResultStates); + collectResults(Rewrite.getRewriter(), InputStates, ResultStates); if (AcceptedChanges > 0) { setChangesMade(); Modified: clang-tools-extra/trunk/cpp11-migrate/Transform.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Transform.cpp?rev=175288&r1=175287&r2=175288&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Transform.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/Transform.cpp Fri Feb 15 13:38:28 2013 @@ -7,7 +7,11 @@ using namespace clang; void collectResults(clang::Rewriter &Rewrite, + const FileContentsByPath &InputStates, FileContentsByPath &Results) { + // Copy the contents of InputStates to be modified. + Results = InputStates; + for (Rewriter::buffer_iterator I = Rewrite.buffer_begin(), E = Rewrite.buffer_end(); I != E; ++I) { @@ -16,20 +20,18 @@ void collectResults(clang::Rewriter &Rew assert(Entry->getName() != 0 && "Unexpected NULL return from FileEntry::getName()"); - FileContentsByPath::value_type ResultEntry; - - ResultEntry.first = Entry->getName(); + std::string ResultBuf; // Get a copy of the rewritten buffer from the Rewriter. - llvm::raw_string_ostream StringStream(ResultEntry.second); + llvm::raw_string_ostream StringStream(ResultBuf); I->second.write(StringStream); - // Cause results to be written to ResultEntry.second. + // Cause results to be written to ResultBuf. StringStream.str(); // FIXME: Use move semantics to avoid copies of the buffer contents if // benchmarking shows the copies are expensive, especially for large source // files. - Results.push_back(ResultEntry); + Results[Entry->getName()] = ResultBuf; } } Modified: clang-tools-extra/trunk/cpp11-migrate/Transform.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Transform.h?rev=175288&r1=175287&r2=175288&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Transform.h (original) +++ clang-tools-extra/trunk/cpp11-migrate/Transform.h Fri Feb 15 13:38:28 2013 @@ -48,16 +48,18 @@ class CompilationDatabase; } // namespace tooling } // namespace clang -/// \brief First item in the pair is the path of a file and the second is a +/// \brief The key is the path of a file, which is mapped to a /// buffer with the possibly modified contents of that file. -typedef std::vector<std::pair<std::string, std::string> > FileContentsByPath; +typedef std::map<std::string, std::string> FileContentsByPath; /// \brief In \p Results place copies of the buffers resulting from applying /// all rewrites represented by \p Rewrite. /// /// \p Results is made up of pairs {filename, buffer contents}. Pairs are /// simply appended to \p Results. -void collectResults(clang::Rewriter &Rewrite, FileContentsByPath &Results); +void collectResults(clang::Rewriter &Rewrite, + const FileContentsByPath &InputStates, + FileContentsByPath &Results); /// \brief Class for containing a Rewriter instance and all of /// its lifetime dependencies. Modified: clang-tools-extra/trunk/cpp11-migrate/UseNullptr/UseNullptr.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/UseNullptr/UseNullptr.cpp?rev=175288&r1=175287&r2=175288&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/UseNullptr/UseNullptr.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/UseNullptr/UseNullptr.cpp Fri Feb 15 13:38:28 2013 @@ -58,7 +58,7 @@ int UseNullptrTransform::apply(const Fil // FIXME: Do something if some replacements didn't get applied? UseNullptrTool.applyAllReplacements(Rewrite.getRewriter()); - collectResults(Rewrite.getRewriter(), ResultStates); + collectResults(Rewrite.getRewriter(), InputStates, ResultStates); if (AcceptedChanges > 0) { setChangesMade(); _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
