forked from OSchip/llvm-project
Eliminate some redundancy by relying on raw_fd_ostream to handle "-"
properly. llvm-svn: 111373
This commit is contained in:
parent
083330a8f2
commit
7ba6f22b47
|
@ -127,66 +127,57 @@ GetFileNameRoot(const std::string &InputFilename) {
|
||||||
static formatted_raw_ostream *GetOutputStream(const char *TargetName,
|
static formatted_raw_ostream *GetOutputStream(const char *TargetName,
|
||||||
Triple::OSType OS,
|
Triple::OSType OS,
|
||||||
const char *ProgName) {
|
const char *ProgName) {
|
||||||
if (!OutputFilename.empty()) {
|
// If we don't yet have an output filename, make one.
|
||||||
// Make sure that the Out file gets unlinked from the disk if we get a
|
if (OutputFilename.empty()) {
|
||||||
// SIGINT
|
if (InputFilename == "-")
|
||||||
if (OutputFilename != "-")
|
OutputFilename = "-";
|
||||||
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
|
else {
|
||||||
|
OutputFilename = GetFileNameRoot(InputFilename);
|
||||||
|
|
||||||
std::string error;
|
switch (FileType) {
|
||||||
raw_fd_ostream *FDOut =
|
default: assert(0 && "Unknown file type");
|
||||||
new raw_fd_ostream(OutputFilename.c_str(), error,
|
case TargetMachine::CGFT_AssemblyFile:
|
||||||
raw_fd_ostream::F_Binary);
|
if (TargetName[0] == 'c') {
|
||||||
if (!error.empty()) {
|
if (TargetName[1] == 0)
|
||||||
errs() << error << '\n';
|
OutputFilename += ".cbe.c";
|
||||||
delete FDOut;
|
else if (TargetName[1] == 'p' && TargetName[2] == 'p')
|
||||||
return 0;
|
OutputFilename += ".cpp";
|
||||||
|
else
|
||||||
|
OutputFilename += ".s";
|
||||||
|
} else
|
||||||
|
OutputFilename += ".s";
|
||||||
|
break;
|
||||||
|
case TargetMachine::CGFT_ObjectFile:
|
||||||
|
if (OS == Triple::Win32)
|
||||||
|
OutputFilename += ".obj";
|
||||||
|
else
|
||||||
|
OutputFilename += ".o";
|
||||||
|
break;
|
||||||
|
case TargetMachine::CGFT_Null:
|
||||||
|
OutputFilename += ".null";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
formatted_raw_ostream *Out =
|
|
||||||
new formatted_raw_ostream(*FDOut, formatted_raw_ostream::DELETE_STREAM);
|
|
||||||
|
|
||||||
return Out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InputFilename == "-") {
|
// Decide if we need "binary" output.
|
||||||
OutputFilename = "-";
|
|
||||||
return new formatted_raw_ostream(outs(),
|
|
||||||
formatted_raw_ostream::PRESERVE_STREAM);
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputFilename = GetFileNameRoot(InputFilename);
|
|
||||||
|
|
||||||
bool Binary = false;
|
bool Binary = false;
|
||||||
switch (FileType) {
|
switch (FileType) {
|
||||||
default: assert(0 && "Unknown file type");
|
default: assert(0 && "Unknown file type");
|
||||||
case TargetMachine::CGFT_AssemblyFile:
|
case TargetMachine::CGFT_AssemblyFile:
|
||||||
if (TargetName[0] == 'c') {
|
|
||||||
if (TargetName[1] == 0)
|
|
||||||
OutputFilename += ".cbe.c";
|
|
||||||
else if (TargetName[1] == 'p' && TargetName[2] == 'p')
|
|
||||||
OutputFilename += ".cpp";
|
|
||||||
else
|
|
||||||
OutputFilename += ".s";
|
|
||||||
} else
|
|
||||||
OutputFilename += ".s";
|
|
||||||
break;
|
break;
|
||||||
case TargetMachine::CGFT_ObjectFile:
|
case TargetMachine::CGFT_ObjectFile:
|
||||||
if (OS == Triple::Win32)
|
|
||||||
OutputFilename += ".obj";
|
|
||||||
else
|
|
||||||
OutputFilename += ".o";
|
|
||||||
Binary = true;
|
|
||||||
break;
|
|
||||||
case TargetMachine::CGFT_Null:
|
case TargetMachine::CGFT_Null:
|
||||||
OutputFilename += ".null";
|
|
||||||
Binary = true;
|
Binary = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure that the Out file gets unlinked from the disk if we get a
|
// Make sure that the Out file gets unlinked from the disk if we get a
|
||||||
// SIGINT
|
// SIGINT
|
||||||
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
|
if (OutputFilename != "-")
|
||||||
|
sys::RemoveFileOnSignal(sys::Path(OutputFilename));
|
||||||
|
|
||||||
|
// Open the file.
|
||||||
std::string error;
|
std::string error;
|
||||||
unsigned OpenFlags = 0;
|
unsigned OpenFlags = 0;
|
||||||
if (Binary) OpenFlags |= raw_fd_ostream::F_Binary;
|
if (Binary) OpenFlags |= raw_fd_ostream::F_Binary;
|
||||||
|
|
Loading…
Reference in New Issue