diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Analysis/CFGPrinter.h | 10 | ||||
-rw-r--r-- | include/llvm/ExecutionEngine/ObjectBuffer.h | 11 | ||||
-rw-r--r-- | include/llvm/Support/GraphWriter.h | 3 | ||||
-rw-r--r-- | include/llvm/Support/YAMLTraits.h | 3 | ||||
-rw-r--r-- | include/llvm/Support/raw_ostream.h | 28 | ||||
-rw-r--r-- | include/llvm/TableGen/StringToOffsetTable.h | 4 |
6 files changed, 38 insertions, 21 deletions
diff --git a/include/llvm/Analysis/CFGPrinter.h b/include/llvm/Analysis/CFGPrinter.h index e6d2ed1a68..759afcaee1 100644 --- a/include/llvm/Analysis/CFGPrinter.h +++ b/include/llvm/Analysis/CFGPrinter.h @@ -36,9 +36,7 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits { if (!Node->getName().empty()) return Node->getName().str(); - std::string Str; - raw_string_ostream OS(Str); - + string_ostream OS; Node->printAsOperand(OS, false); return OS.str(); } @@ -46,8 +44,7 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits { static std::string getCompleteNodeLabel(const BasicBlock *Node, const Function *) { enum { MaxColumns = 80 }; - std::string Str; - raw_string_ostream OS(Str); + string_ostream OS; if (Node->getName().empty()) { Node->printAsOperand(OS, false); @@ -109,8 +106,7 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits { if (SuccNo == 0) return "def"; - std::string Str; - raw_string_ostream OS(Str); + string_ostream OS; SwitchInst::ConstCaseIt Case = SwitchInst::ConstCaseIt::fromSuccessorIndex(SI, SuccNo); OS << Case.getCaseValue()->getValue(); diff --git a/include/llvm/ExecutionEngine/ObjectBuffer.h b/include/llvm/ExecutionEngine/ObjectBuffer.h index 071a42b6b7..81dc88dcd0 100644 --- a/include/llvm/ExecutionEngine/ObjectBuffer.h +++ b/include/llvm/ExecutionEngine/ObjectBuffer.h @@ -58,23 +58,18 @@ protected: class ObjectBufferStream : public ObjectBuffer { void anchor() override; public: - ObjectBufferStream() : OS(SV) {} + ObjectBufferStream() {} virtual ~ObjectBufferStream() {} raw_ostream &getOStream() { return OS; } void flush() { - OS.flush(); - // Make the data accessible via the ObjectBuffer::Buffer - Buffer.reset(MemoryBuffer::getMemBuffer(StringRef(SV.data(), SV.size()), - "", - false)); + Buffer.reset(MemoryBuffer::getMemBuffer(OS.str(), "", false)); } protected: - SmallVector<char, 4096> SV; // Working buffer into which we JIT. - raw_svector_ostream OS; // streaming wrapper + small_string_ostream<4096> OS; // Working buffer into which we JIT. }; } // namespace llvm diff --git a/include/llvm/Support/GraphWriter.h b/include/llvm/Support/GraphWriter.h index 2f02aa7a1c..a6bd1afa16 100644 --- a/include/llvm/Support/GraphWriter.h +++ b/include/llvm/Support/GraphWriter.h @@ -184,8 +184,7 @@ public: O << "|" << DOT::EscapeString(NodeDesc); } - std::string edgeSourceLabels; - raw_string_ostream EdgeSourceLabels(edgeSourceLabels); + string_ostream EdgeSourceLabels; bool hasEdgeSourceLabels = getEdgeSourceLabels(EdgeSourceLabels, Node); if (hasEdgeSourceLabels) { diff --git a/include/llvm/Support/YAMLTraits.h b/include/llvm/Support/YAMLTraits.h index a23faf65bb..14ca2db932 100644 --- a/include/llvm/Support/YAMLTraits.h +++ b/include/llvm/Support/YAMLTraits.h @@ -612,8 +612,7 @@ template<typename T> typename std::enable_if<has_ScalarTraits<T>::value,void>::type yamlize(IO &io, T &Val, bool) { if ( io.outputting() ) { - std::string Storage; - llvm::raw_string_ostream Buffer(Storage); + llvm::string_ostream Buffer; ScalarTraits<T>::output(Val, io.getContext(), Buffer); StringRef Str = Buffer.str(); io.scalarString(Str, ScalarTraits<T>::mustQuote(Str)); diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h index 34fbe082cd..77e473f2f6 100644 --- a/include/llvm/Support/raw_ostream.h +++ b/include/llvm/Support/raw_ostream.h @@ -15,6 +15,7 @@ #define LLVM_SUPPORT_RAW_OSTREAM_H #include "llvm/ADT/StringRef.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/DataTypes.h" @@ -461,6 +462,14 @@ class raw_svector_ostream : public raw_ostream { /// current_pos - Return the current position within the stream, not /// counting the bytes currently in the buffer. uint64_t current_pos() const override; + +protected: + // This constructor is specified not to access \p O provided for storage as it + // may not yet be initialized at construction time. + explicit raw_svector_ostream(SmallVectorImpl<char> &O, std::nullptr_t) + : OS(O){}; + void init(); + public: /// Construct a new raw_svector_ostream. /// @@ -493,6 +502,25 @@ public: ~raw_null_ostream(); }; +/// string_ostream - A raw_ostream that builds a string. This is a +/// raw_svector_ostream with storage. +template <unsigned InternalLen> +class small_string_ostream : public raw_svector_ostream { + SmallVector<char, InternalLen> Buffer; + // There's no need to flush explicitly. + using raw_svector_ostream::flush; + +public: + small_string_ostream() : raw_svector_ostream(Buffer, nullptr) { init(); } + + void clear() { + flush(); + Buffer.clear(); + } +}; + +typedef small_string_ostream<128> string_ostream; + } // end llvm namespace #endif diff --git a/include/llvm/TableGen/StringToOffsetTable.h b/include/llvm/TableGen/StringToOffsetTable.h index c924bd8ec5..01829a10b2 100644 --- a/include/llvm/TableGen/StringToOffsetTable.h +++ b/include/llvm/TableGen/StringToOffsetTable.h @@ -42,8 +42,8 @@ public: void EmitString(raw_ostream &O) { // Escape the string. - SmallString<256> Str; - raw_svector_ostream(Str).write_escaped(AggregateString); + small_string_ostream<256> Str; + Str.write_escaped(AggregateString); AggregateString = Str.str(); O << " \""; |