[clang-tools-extra] r175288 - Propagate changes through no-op transforms
Edwin Vane
edwin.vane at intel.com
Fri Feb 15 11:38:28 PST 2013
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 <jack.yang at intel.com>
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();
More information about the cfe-commits
mailing list