Mercurial > hg > CbC > CbC_llvm
diff include/llvm/Support/raw_ostream.h @ 121:803732b1fca8
LLVM 5.0
author | kono |
---|---|
date | Fri, 27 Oct 2017 17:07:41 +0900 |
parents | 1172e4bd9c6f |
children | c2174574ed3a |
line wrap: on
line diff
--- a/include/llvm/Support/raw_ostream.h Fri Nov 25 19:14:25 2016 +0900 +++ b/include/llvm/Support/raw_ostream.h Fri Oct 27 17:07:41 2017 +0900 @@ -16,22 +16,26 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/DataTypes.h" +#include <cassert> +#include <cstddef> +#include <cstdint> +#include <cstring> +#include <string> #include <system_error> namespace llvm { + class formatv_object_base; class format_object_base; class FormattedString; class FormattedNumber; class FormattedBytes; -template <typename T> class SmallVectorImpl; namespace sys { namespace fs { enum OpenFlags : unsigned; -} -} +} // end namespace fs +} // end namespace sys /// This class implements an extremely fast bulk output stream that can *only* /// output to a stream. It does not support seeking, reopening, rewinding, line @@ -39,9 +43,6 @@ /// a chunk at a time. class raw_ostream { private: - void operator=(const raw_ostream &) = delete; - raw_ostream(const raw_ostream &) = delete; - /// The buffer is handled in such a way that the buffer is /// uninitialized, unbuffered, or out of space when OutBufCur >= /// OutBufEnd. Thus a single comparison suffices to determine if we @@ -71,7 +72,7 @@ public: // color order matches ANSI escape sequence, don't change enum Colors { - BLACK=0, + BLACK = 0, RED, GREEN, YELLOW, @@ -88,6 +89,9 @@ OutBufStart = OutBufEnd = OutBufCur = nullptr; } + raw_ostream(const raw_ostream &) = delete; + void operator=(const raw_ostream &) = delete; + virtual ~raw_ostream(); /// tell - Return the current offset with the file. @@ -186,7 +190,7 @@ return write(Str.data(), Str.length()); } - raw_ostream &operator<<(const llvm::SmallVectorImpl<char> &Str) { + raw_ostream &operator<<(const SmallVectorImpl<char> &Str) { return write(Str.data(), Str.size()); } @@ -195,6 +199,7 @@ raw_ostream &operator<<(unsigned long long N); raw_ostream &operator<<(long long N); raw_ostream &operator<<(const void *P); + raw_ostream &operator<<(unsigned int N) { return this->operator<<(static_cast<unsigned long>(N)); } @@ -208,6 +213,10 @@ /// Output \p N in hexadecimal, without any prefix or padding. raw_ostream &write_hex(unsigned long long N); + /// Output a formatted UUID with dash separators. + using uuid_t = uint8_t[16]; + raw_ostream &write_uuid(const uuid_t UUID); + /// Output \p Str, turning '\\', '\t', '\n', '"', and anything that doesn't /// satisfy std::isprint into an escape sequence. raw_ostream &write_escaped(StringRef Str, bool UseHexEscapes = false); @@ -353,9 +362,7 @@ int FD; bool ShouldClose; - /// Error This flag is true if an error of any kind has been detected. - /// - bool Error; + std::error_code EC; uint64_t pos; @@ -374,7 +381,7 @@ size_t preferred_buffer_size() const override; /// Set the flag indicating that an output error has been encountered. - void error_detected() { Error = true; } + void error_detected(std::error_code EC) { this->EC = EC; } public: /// Open the specified file for writing. If an error occurs, information @@ -383,15 +390,14 @@ /// \p Flags allows optional flags to control how the file will be opened. /// /// As a special case, if Filename is "-", then the stream will use - /// STDOUT_FILENO instead of opening a file. Note that it will still consider - /// itself to own the file descriptor. In particular, it will close the - /// file descriptor when it is done (this is necessary to detect - /// output errors). + /// STDOUT_FILENO instead of opening a file. This will not close the stdout + /// descriptor. raw_fd_ostream(StringRef Filename, std::error_code &EC, sys::fs::OpenFlags Flags); /// FD is the file descriptor that this writes to. If ShouldClose is true, - /// this closes the file when the stream is destroyed. + /// this closes the file when the stream is destroyed. If FD is for stdout or + /// stderr, it will not be closed. raw_fd_ostream(int fd, bool shouldClose, bool unbuffered=false); ~raw_fd_ostream() override; @@ -416,13 +422,13 @@ bool has_colors() const override; + std::error_code error() const { return EC; } + /// Return the value of the flag in this raw_fd_ostream indicating whether an /// output error has been encountered. /// This doesn't implicitly flush any pending output. Also, it doesn't /// guarantee to detect all errors unless the stream has been closed. - bool has_error() const { - return Error; - } + bool has_error() const { return bool(EC); } /// Set the flag read by has_error() to false. If the error flag is set at the /// time when this raw_ostream's destructor is called, report_fatal_error is @@ -433,9 +439,7 @@ /// Unless explicitly silenced." /// - from The Zen of Python, by Tim Peters /// - void clear_error() { - Error = false; - } + void clear_error() { EC = std::error_code(); } }; /// This returns a reference to a raw_ostream for standard output. Use it like: @@ -501,7 +505,8 @@ explicit raw_svector_ostream(SmallVectorImpl<char> &O) : OS(O) { SetUnbuffered(); } - ~raw_svector_ostream() override {} + + ~raw_svector_ostream() override = default; void flush() = delete; @@ -520,7 +525,7 @@ uint64_t current_pos() const override; public: - explicit raw_null_ostream() {} + explicit raw_null_ostream() = default; ~raw_null_ostream() override; }; @@ -533,6 +538,6 @@ ~buffer_ostream() override { OS << str(); } }; -} // end llvm namespace +} // end namespace llvm #endif // LLVM_SUPPORT_RAW_OSTREAM_H