"Main source file override should exist!");
SM.overrideFileContents(FM.getFile(MainFileName),
llvm::MemoryBuffer::getMemBuffer(MainFileOverride));
+
+ for (HeaderOverrides::const_iterator I = Headers.begin(),
+ E = Headers.end(); I != E; ++I)
+ SM.overrideFileContents(
+ FM.getFile(I->second.FileName),
+ llvm::MemoryBuffer::getMemBuffer(I->second.FileOverride));
}
class FileManager;
} // namespace clang
+/// \brief Container for storing override information for a single headers.
+struct HeaderOverride {
+ std::string FileName;
+ std::string FileOverride;
+};
+
+/// \brief Container mapping header file names to override information.
+typedef std::map<std::string, HeaderOverride> HeaderOverrides;
/// \brief Container storing the file content overrides for a source file.
struct SourceOverrides {
std::string MainFileName;
std::string MainFileOverride;
+ HeaderOverrides Headers;
};
/// \brief Maps source file names to content override information.
llvm::raw_fd_ostream FileStream(I->first.c_str(), ErrorInfo,
llvm::raw_fd_ostream::F_Binary);
FileStream << I->second.MainFileOverride;
+
+ // FIXME: The Migrator shouldn't be responsible for writing headers
+ // to disk. Instead, it should write replacement info and another tool
+ // should take all replacement info for a header from possibly many other
+ // migration processes and merge it into a final form. For now, the
+ // updated header is written to disk for testing purposes.
+ for (HeaderOverrides::const_iterator HeaderI = I->second.Headers.begin(),
+ HeaderE = I->second.Headers.end();
+ HeaderI != HeaderE; ++HeaderI) {
+ llvm::raw_fd_ostream HeaderStream(I->first.c_str(), ErrorInfo,
+ llvm::raw_fd_ostream::F_Binary);
+ HeaderStream << HeaderI->second.FileOverride;
+ }
}
// Report execution times.