Use a std::unique_ptr to make it easier to see who owns the stream.

llvm-svn: 234597
This commit is contained in:
Rafael Espindola 2015-04-10 14:11:52 +00:00
parent 8429681d57
commit 269ec0f470
2 changed files with 15 additions and 14 deletions

View File

@ -151,11 +151,11 @@ class CompilerInstance : public ModuleLoader {
struct OutputFile {
std::string Filename;
std::string TempFilename;
raw_ostream *OS;
std::unique_ptr<raw_ostream> OS;
OutputFile(const std::string &filename, const std::string &tempFilename,
raw_ostream *os)
: Filename(filename), TempFilename(tempFilename), OS(os) { }
std::unique_ptr<raw_ostream> OS)
: Filename(filename), TempFilename(tempFilename), OS(std::move(OS)) {}
};
/// The list of active output files.
@ -518,7 +518,7 @@ public:
/// addOutputFile - Add an output file onto the list of tracked output files.
///
/// \param OutFile - The output file info.
void addOutputFile(const OutputFile &OutFile);
void addOutputFile(OutputFile &&OutFile);
/// clearOutputFiles - Clear the output file list, destroying the contained
/// output streams.

View File

@ -518,15 +518,14 @@ void CompilerInstance::createSema(TranslationUnitKind TUKind,
// Output Files
void CompilerInstance::addOutputFile(const OutputFile &OutFile) {
void CompilerInstance::addOutputFile(OutputFile &&OutFile) {
assert(OutFile.OS && "Attempt to add empty stream to output list!");
OutputFiles.push_back(OutFile);
OutputFiles.push_back(std::move(OutFile));
}
void CompilerInstance::clearOutputFiles(bool EraseFiles) {
for (std::list<OutputFile>::iterator
it = OutputFiles.begin(), ie = OutputFiles.end(); it != ie; ++it) {
delete it->OS;
if (!it->TempFilename.empty()) {
if (EraseFiles) {
llvm::sys::fs::remove(it->TempFilename);
@ -561,9 +560,10 @@ CompilerInstance::createDefaultOutputFile(bool Binary,
}
llvm::raw_null_ostream *CompilerInstance::createNullOutputFile() {
llvm::raw_null_ostream *OS = new llvm::raw_null_ostream();
addOutputFile(OutputFile("", "", OS));
return OS;
auto OS = llvm::make_unique<llvm::raw_null_ostream>();
llvm::raw_null_ostream *Ret = OS.get();
addOutputFile(OutputFile("", "", std::move(OS)));
return Ret;
}
llvm::raw_fd_ostream *
@ -575,21 +575,22 @@ CompilerInstance::createOutputFile(StringRef OutputPath,
bool CreateMissingDirectories) {
std::string OutputPathName, TempPathName;
std::error_code EC;
llvm::raw_fd_ostream *OS = createOutputFile(
std::unique_ptr<llvm::raw_fd_ostream> OS(createOutputFile(
OutputPath, EC, Binary, RemoveFileOnSignal, InFile, Extension,
UseTemporary, CreateMissingDirectories, &OutputPathName, &TempPathName);
UseTemporary, CreateMissingDirectories, &OutputPathName, &TempPathName));
if (!OS) {
getDiagnostics().Report(diag::err_fe_unable_to_open_output) << OutputPath
<< EC.message();
return nullptr;
}
llvm::raw_fd_ostream *Ret = OS.get();
// Add the output file -- but don't try to remove "-", since this means we are
// using stdin.
addOutputFile(OutputFile((OutputPathName != "-") ? OutputPathName : "",
TempPathName, OS));
TempPathName, std::move(OS)));
return OS;
return Ret;
}
llvm::raw_fd_ostream *CompilerInstance::createOutputFile(