mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-03 00:33:09 +00:00
Make formatted_raw_ostream restore the buffer settings of the
underlying stream when it is finished, so that clients don't have to do this manually. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78952 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
009fc9e5d9
commit
6c304f2314
@ -101,13 +101,11 @@ namespace llvm
|
||||
|
||||
~formatted_raw_ostream() {
|
||||
flush();
|
||||
if (DeleteStream)
|
||||
delete TheStream;
|
||||
releaseStream();
|
||||
}
|
||||
|
||||
void setStream(raw_ostream &Stream, bool Delete = false) {
|
||||
if (DeleteStream)
|
||||
delete TheStream;
|
||||
releaseStream();
|
||||
|
||||
TheStream = &Stream;
|
||||
DeleteStream = Delete;
|
||||
@ -118,6 +116,8 @@ namespace llvm
|
||||
// had been using, and tell TheStream not to do its own buffering.
|
||||
if (size_t BufferSize = TheStream->GetBufferSize())
|
||||
SetBufferSize(BufferSize);
|
||||
else
|
||||
SetUnbuffered();
|
||||
TheStream->SetUnbuffered();
|
||||
|
||||
Scanned = begin();
|
||||
@ -130,6 +130,20 @@ namespace llvm
|
||||
/// recent I/O, even if the current column + minpad > newcol.
|
||||
///
|
||||
void PadToColumn(unsigned NewCol, unsigned MinPad = 0);
|
||||
|
||||
private:
|
||||
void releaseStream() {
|
||||
// Delete the stream if needed. Otherwise, transfer the buffer
|
||||
// settings from this raw_ostream back to the underlying stream.
|
||||
if (!TheStream)
|
||||
return;
|
||||
if (DeleteStream)
|
||||
delete TheStream;
|
||||
else if (size_t BufferSize = GetBufferSize())
|
||||
TheStream->SetBufferSize(BufferSize);
|
||||
else
|
||||
TheStream->SetUnbuffered();
|
||||
}
|
||||
};
|
||||
|
||||
/// fouts() - This returns a reference to a formatted_raw_ostream for
|
||||
|
@ -2005,14 +2005,9 @@ void Module::print(std::ostream &o, AssemblyAnnotationWriter *AAW) const {
|
||||
}
|
||||
void Module::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
|
||||
SlotTracker SlotTable(this);
|
||||
size_t OldBufferSize = ROS.GetBufferSize();
|
||||
formatted_raw_ostream OS(ROS);
|
||||
AssemblyWriter W(OS, SlotTable, this, AAW);
|
||||
W.write(this);
|
||||
// formatted_raw_ostream forces the underlying raw_ostream to be
|
||||
// unbuffered. Reset it to its original buffer size.
|
||||
if (OldBufferSize != 0)
|
||||
ROS.SetBufferSize(OldBufferSize);
|
||||
}
|
||||
|
||||
void Type::print(std::ostream &o) const {
|
||||
@ -2033,7 +2028,6 @@ void Value::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
|
||||
ROS << "printing a <null> value\n";
|
||||
return;
|
||||
}
|
||||
size_t OldBufferSize = ROS.GetBufferSize();
|
||||
formatted_raw_ostream OS(ROS);
|
||||
if (const Instruction *I = dyn_cast<Instruction>(this)) {
|
||||
const Function *F = I->getParent() ? I->getParent()->getParent() : 0;
|
||||
@ -2089,10 +2083,6 @@ void Value::print(raw_ostream &ROS, AssemblyAnnotationWriter *AAW) const {
|
||||
} else {
|
||||
llvm_unreachable("Unknown value to print out!");
|
||||
}
|
||||
// formatted_raw_ostream forces the underlying raw_ostream to be
|
||||
// unbuffered. Reset it to its original buffer size.
|
||||
if (OldBufferSize != 0)
|
||||
ROS.SetBufferSize(OldBufferSize);
|
||||
}
|
||||
|
||||
void Value::print(std::ostream &O, AssemblyAnnotationWriter *AAW) const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user