diff options
Diffstat (limited to 'include/llvm/Support')
-rw-r--r-- | include/llvm/Support/FormattedStream.h | 36 | ||||
-rw-r--r-- | include/llvm/Support/raw_ostream.h | 32 |
2 files changed, 26 insertions, 42 deletions
diff --git a/include/llvm/Support/FormattedStream.h b/include/llvm/Support/FormattedStream.h index db02580323..58a1885168 100644 --- a/include/llvm/Support/FormattedStream.h +++ b/include/llvm/Support/FormattedStream.h @@ -19,14 +19,10 @@ namespace llvm { - class formatted_tool_output_file; - /// formatted_raw_ostream - Formatted raw_fd_ostream to handle /// asm-specific constructs. /// class formatted_raw_ostream : public raw_ostream { - friend class formatted_tool_output_file; - public: /// DELETE_STREAM - Tell the destructor to delete the held stream. /// @@ -140,38 +136,6 @@ namespace llvm } }; - /// formatted_tool_output_file - This is a subclass of formatted_raw_ostream - /// for use when the underlying stream is a tool_output_file. It exposes - /// keep() and several other member functions. - class formatted_tool_output_file : public formatted_raw_ostream { - private: - tool_output_file &get_tool_output_file() const { - return *static_cast<tool_output_file *>(TheStream); - } - - public: - formatted_tool_output_file(tool_output_file &Stream, bool Delete = false) - : formatted_raw_ostream(Stream, Delete) {} - - formatted_tool_output_file() {} - - ~formatted_tool_output_file(); - - void setStream(tool_output_file &Stream, bool Delete = false) { - return formatted_raw_ostream::setStream(Stream, Delete); - } - - void keep() { return get_tool_output_file().keep(); } - bool has_error() const { return get_tool_output_file().has_error(); } - void clear_error() { return get_tool_output_file().clear_error(); } - void close() { - // The inner stream is unbuffered; flush the outer stream's buffer. - flush(); - // The inner stream can close its file descriptor now. - return get_tool_output_file().close(); - } - }; - /// fouts() - This returns a reference to a formatted_raw_ostream for /// standard output. Use it like: fouts() << "foo" << "bar"; formatted_raw_ostream &fouts(); diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h index 3c2a8b1020..39bdbd804c 100644 --- a/include/llvm/Support/raw_ostream.h +++ b/include/llvm/Support/raw_ostream.h @@ -475,23 +475,43 @@ public: ~raw_null_ostream(); }; -/// tool_output_file - This class behaves like a raw_fd_ostream but adds a +/// tool_output_file - This class contains a raw_fd_ostream and adds a /// few extra features commonly needed for compiler-like tool output files: /// - The file is automatically deleted if the process is killed. /// - The file is automatically deleted when the tool_output_file /// object is destroyed unless the client calls keep(). -class tool_output_file : public raw_fd_ostream { - std::string Filename; - bool Keep; +class tool_output_file { + /// Installer - This class is declared before the raw_fd_ostream so that + /// it is constructed before the raw_fd_ostream is constructed and + /// destructed after the raw_fd_ostream is destructed. It installs + /// cleanups in its constructor and uninstalls them in its destructor. + class CleanupInstaller { + /// Filename - The name of the file. + std::string Filename; + public: + /// Keep - The flag which indicates whether we should not delete the file. + bool Keep; + + explicit CleanupInstaller(const char *filename); + ~CleanupInstaller(); + } Installer; + + /// OS - The contained stream. This is intentionally declared after + /// Installer. + raw_fd_ostream OS; + public: + /// tool_output_file - This constructor's arguments are passed to + /// to raw_fd_ostream's constructor. tool_output_file(const char *filename, std::string &ErrorInfo, unsigned Flags = 0); - ~tool_output_file(); + /// os - Return the contained raw_fd_ostream. + raw_fd_ostream &os() { return OS; } /// keep - Indicate that the tool's job wrt this output file has been /// successful and the file should not be deleted. - void keep() { Keep = true; } + void keep() { Installer.Keep = true; } }; } // end llvm namespace |