diff options
author | Tareq A. Siraj <tareq.a.siraj@intel.com> | 2013-08-13 14:58:50 +0000 |
---|---|---|
committer | Tareq A. Siraj <tareq.a.siraj@intel.com> | 2013-08-13 14:58:50 +0000 |
commit | 3baabf396876af59f80a06b6ce5cfac8c2c9afda (patch) | |
tree | 2cf08348e4f268a6a79e14940c6681001b10dfd2 /clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp | |
parent | f77718ad1d2b20c834126ce7884755f97a93eb50 (diff) | |
download | bcm5719-llvm-3baabf396876af59f80a06b6ce5cfac8c2c9afda.tar.gz bcm5719-llvm-3baabf396876af59f80a06b6ce5cfac8c2c9afda.zip |
cpp11-migrate: Write header replacements to disk
Another attempt to commit r187204 after windows related problems has
been fixed. Note that changes to this patch reflect the current behavior
of cpp11-migrate.
Header replacements are now written to disk in YAML format for an external tool
to merge. A unique file will be created in the same directory as the header
with all replacements that came from a source file that included the header
file. The YAML file will have:
- Name of the header file
- Name of the source file that included the header file
- Transform ID that generated the replacement
- Offset
- Length
- Replacement text
Any tool reading these replacements should read them using the
HeaderChangeDocument struct.
Differential Revision: http://llvm-reviews.chandlerc.com/D1369
llvm-svn: 188274
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp')
-rw-r--r-- | clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp index 10370f959e2..4c0744fde70 100644 --- a/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp +++ b/clang-tools-extra/cpp11-migrate/tool/Cpp11Migrate.cpp @@ -325,13 +325,40 @@ int main(int argc, const char **argv) { for (HeaderOverrides::const_iterator HeaderI = Overrides.headers_begin(), HeaderE = Overrides.headers_end(); HeaderI != HeaderE; ++HeaderI) { - assert(!HeaderI->second.FileOverride.empty() && + assert(!HeaderI->second.getContentOverride().empty() && "A header override should not be empty"); std::string ErrorInfo; std::string HeaderFileName = HeaderI->getKey(); llvm::raw_fd_ostream HeaderStream(HeaderFileName.c_str(), ErrorInfo, llvm::sys::fs::F_Binary); - HeaderStream << HeaderI->second.FileOverride; + if (!ErrorInfo.empty()) { + llvm::errs() << "Error opening file: " << ErrorInfo << "\n"; + continue; + } + HeaderStream << HeaderI->second.getContentOverride(); + + // Replacements for header files need to be written in a YAML file for + // every transform and will be merged together with an external tool. + llvm::SmallString<128> ReplacementsHeaderName; + llvm::SmallString<64> Error; + bool Result = generateReplacementsFileName(I->getKey(), HeaderFileName, + ReplacementsHeaderName, Error); + if (!Result) { + llvm::errs() << "Failed to generate replacements filename:" << Error + << "\n"; + continue; + } + + llvm::raw_fd_ostream ReplacementsFile(ReplacementsHeaderName.c_str(), + ErrorInfo, + llvm::sys::fs::F_Binary); + if (!ErrorInfo.empty()) { + llvm::errs() << "Error opening file: " << ErrorInfo << "\n"; + continue; + } + llvm::yaml::Output YAML(ReplacementsFile); + YAML << const_cast<HeaderChangeDocument &>( + HeaderI->getValue().getHeaderChangeDoc()); } } |