summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-07-30 21:05:56 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-07-30 21:05:56 +0000
commit0ff671b3be5cbd46a1656639058f969535ac9ad0 (patch)
treea0bc8d792fde83c5bb64e48bd81d0cd1fad0373a /clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
parent4c80bfbd53cafa3690ba5c65459cf6cfc560e2e3 (diff)
downloadbcm5719-llvm-0ff671b3be5cbd46a1656639058f969535ac9ad0.tar.gz
bcm5719-llvm-0ff671b3be5cbd46a1656639058f969535ac9ad0.zip
Revert "cpp11-migrate: Write header replacements to disk"
This reverts commit 187428. It broke the windows bots. http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/3450 llvm-svn: 187447
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp')
-rw-r--r--clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp85
1 files changed, 33 insertions, 52 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
index 83678e986b0..58372b60ce7 100644
--- a/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
+++ b/clang-tools-extra/cpp11-migrate/Core/FileOverrides.cpp
@@ -23,26 +23,16 @@
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/system_error.h"
-#include <algorithm>
using namespace clang;
using namespace clang::tooling;
-void HeaderOverride::recordReplacements(
- llvm::StringRef TransformID, const clang::tooling::Replacements &Replaces) {
- TransformReplacements TR;
- TR.TransformID = TransformID;
- TR.GeneratedReplacements.resize(Replaces.size());
- std::copy(Replaces.begin(), Replaces.end(), TR.GeneratedReplacements.begin());
- TransformReplacementsDoc.Replacements.push_back(TR);
-}
-
SourceOverrides::SourceOverrides(llvm::StringRef MainFileName,
bool TrackChanges)
: MainFileName(MainFileName), TrackChanges(TrackChanges) {}
-void SourceOverrides::applyReplacements(tooling::Replacements &Replaces,
- llvm::StringRef TransformName) {
+void
+SourceOverrides::applyReplacements(clang::tooling::Replacements &Replaces) {
llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> DiagOpts(
new DiagnosticOptions());
DiagnosticsEngine Diagnostics(
@@ -50,12 +40,11 @@ void SourceOverrides::applyReplacements(tooling::Replacements &Replaces,
DiagOpts.getPtr());
FileManager Files((FileSystemOptions()));
SourceManager SM(Diagnostics, Files);
- applyReplacements(Replaces, SM, TransformName);
+ applyReplacements(Replaces, SM);
}
-void SourceOverrides::applyReplacements(tooling::Replacements &Replaces,
- SourceManager &SM,
- llvm::StringRef TransformName) {
+void SourceOverrides::applyReplacements(clang::tooling::Replacements &Replaces,
+ clang::SourceManager &SM) {
applyOverrides(SM);
Rewriter Rewrites(SM, LangOptions());
@@ -67,6 +56,12 @@ void SourceOverrides::applyReplacements(tooling::Replacements &Replaces,
if (!Success)
llvm::errs() << "error: failed to apply some replacements.";
+ applyRewrites(Rewrites);
+ if (TrackChanges)
+ adjustChangedRanges(Replaces);
+}
+
+void SourceOverrides::applyRewrites(Rewriter &Rewrites) {
std::string ResultBuf;
for (Rewriter::buffer_iterator I = Rewrites.buffer_begin(),
@@ -94,50 +89,36 @@ void SourceOverrides::applyReplacements(tooling::Replacements &Replaces,
// will be stored as well for later output to disk. Applying replacements
// in memory will always be necessary as the source goes down the transform
// pipeline.
+
HeaderOverride &HeaderOv = Headers[FileName];
+ HeaderOv.FileOverride.swap(ResultBuf);
// "Create" HeaderOverride if not already existing
- if (HeaderOv.getFileName().empty())
- HeaderOv = HeaderOverride(FileName);
-
- HeaderOv.swapContentOverride(ResultBuf);
+ if (HeaderOv.FileName.empty())
+ HeaderOv.FileName = FileName;
}
+}
- // Separate replacements to header files
+void SourceOverrides::adjustChangedRanges(const Replacements &Replaces) {
+ // Start by grouping replacements by file name
Replacements MainFileReplaces;
- ReplacementsMap HeadersReplaces;
- for (Replacements::const_iterator I = Replaces.begin(), E = Replaces.end();
- I != E; ++I) {
+ llvm::StringMap<Replacements> HeadersReplaces;
+
+ for (Replacements::iterator I = Replaces.begin(), E = Replaces.end(); I != E;
+ ++I) {
llvm::StringRef ReplacementFileName = I->getFilePath();
- if (ReplacementFileName == MainFileName) {
+ if (ReplacementFileName == MainFileName)
MainFileReplaces.insert(*I);
- continue;
- }
-
- HeadersReplaces[ReplacementFileName].insert(*I);
+ else
+ HeadersReplaces[ReplacementFileName].insert(*I);
}
- // Record all replacements to headers.
- for (ReplacementsMap::const_iterator I = HeadersReplaces.begin(),
- E = HeadersReplaces.end();
- I != E; ++I) {
- HeaderOverride &HeaderOv = Headers[I->getKey()];
- HeaderOv.recordReplacements(TransformName, I->getValue());
- }
-
- if (TrackChanges)
- adjustChangedRanges(MainFileReplaces, HeadersReplaces);
-}
-
-void
-SourceOverrides::adjustChangedRanges(const Replacements &MainFileReplaces,
- const ReplacementsMap &HeadersReplaces) {
- // Adjust the changed ranges for each individual file
- MainFileChanges.adjustChangedRanges(MainFileReplaces);
- for (ReplacementsMap::const_iterator I = HeadersReplaces.begin(),
- E = HeadersReplaces.end();
+ // Then adjust the changed ranges for each individual file
+ MainFileChanges.adjustChangedRanges(Replaces);
+ for (llvm::StringMap<Replacements>::iterator I = HeadersReplaces.begin(),
+ E = HeadersReplaces.end();
I != E; ++I) {
- Headers[I->getKey()].adjustChangedRanges(I->getValue());
+ Headers[I->getKey()].Changes.adjustChangedRanges(I->getValue());
}
}
@@ -150,11 +131,11 @@ void SourceOverrides::applyOverrides(SourceManager &SM) const {
for (HeaderOverrides::const_iterator I = Headers.begin(), E = Headers.end();
I != E; ++I) {
- assert(!I->second.getContentOverride().empty() &&
+ assert(!I->second.FileOverride.empty() &&
"Header override should not be empty!");
SM.overrideFileContents(
- FM.getFile(I->second.getFileName()),
- llvm::MemoryBuffer::getMemBuffer(I->second.getContentOverride()));
+ FM.getFile(I->second.FileName),
+ llvm::MemoryBuffer::getMemBuffer(I->second.FileOverride));
}
}
OpenPOWER on IntegriCloud