From 9a886386a4067a2407a284c947bd1044b43e2b1b Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 3 Jun 2003 05:04:42 +0000 Subject: [PATCH] Add -o support for TableGen I figure that misha has done a lot of things on my todo list, the least I can do is reciprocate a bit. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6571 91177308-0d34-0410-b5e6-96231b3b80d8 --- support/tools/TableGen/TableGen.cpp | 29 +++++++++++++++++++++++++---- utils/TableGen/TableGen.cpp | 29 +++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/support/tools/TableGen/TableGen.cpp b/support/tools/TableGen/TableGen.cpp index b6d1810302d..aebf6077e86 100644 --- a/support/tools/TableGen/TableGen.cpp +++ b/support/tools/TableGen/TableGen.cpp @@ -1,7 +1,9 @@ #include "Record.h" #include "Support/CommandLine.h" +#include "Support/Signals.h" #include "CodeEmitterGen.h" #include +#include enum ActionType { PrintRecords, @@ -25,6 +27,10 @@ namespace { cl::opt Class("class", cl::desc("Print Enum list for this class")); + + cl::opt + OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename"), + cl::init("-")); } @@ -374,13 +380,26 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv); ParseFile(); + std::ostream *Out = &std::cout; + if (OutputFilename != "-") { + Out = new std::ofstream(OutputFilename.c_str()); + + if (!Out->good()) { + std::cerr << argv[0] << ": error opening " << OutputFilename << "!\n"; + return 1; + } + + // Make sure the file gets removed if *gasp* tablegen crashes... + RemoveFileOnSignal(OutputFilename); + } + switch (Action) { case Parse: ParseMachineCode(); break; case GenEmitter: - CodeEmitterGen(Records).createEmitter(std::cout); + CodeEmitterGen(Records).createEmitter(*Out); break; case PrintRecords: - std::cout << Records; // No argument, dump all contents + *Out << Records; // No argument, dump all contents break; case PrintEnums: Record *R = Records.getClass(Class); @@ -393,11 +412,13 @@ int main(int argc, char **argv) { for (std::map::const_iterator I = Defs.begin(), E = Defs.end(); I != E; ++I) { if (I->second->isSubClassOf(R)) { - std::cout << I->first << ", "; + *Out << I->first << ", "; } } - std::cout << "\n"; + *Out << "\n"; break; } + + if (Out != &std::cout) delete Out; return 0; } diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp index b6d1810302d..aebf6077e86 100644 --- a/utils/TableGen/TableGen.cpp +++ b/utils/TableGen/TableGen.cpp @@ -1,7 +1,9 @@ #include "Record.h" #include "Support/CommandLine.h" +#include "Support/Signals.h" #include "CodeEmitterGen.h" #include +#include enum ActionType { PrintRecords, @@ -25,6 +27,10 @@ namespace { cl::opt Class("class", cl::desc("Print Enum list for this class")); + + cl::opt + OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename"), + cl::init("-")); } @@ -374,13 +380,26 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv); ParseFile(); + std::ostream *Out = &std::cout; + if (OutputFilename != "-") { + Out = new std::ofstream(OutputFilename.c_str()); + + if (!Out->good()) { + std::cerr << argv[0] << ": error opening " << OutputFilename << "!\n"; + return 1; + } + + // Make sure the file gets removed if *gasp* tablegen crashes... + RemoveFileOnSignal(OutputFilename); + } + switch (Action) { case Parse: ParseMachineCode(); break; case GenEmitter: - CodeEmitterGen(Records).createEmitter(std::cout); + CodeEmitterGen(Records).createEmitter(*Out); break; case PrintRecords: - std::cout << Records; // No argument, dump all contents + *Out << Records; // No argument, dump all contents break; case PrintEnums: Record *R = Records.getClass(Class); @@ -393,11 +412,13 @@ int main(int argc, char **argv) { for (std::map::const_iterator I = Defs.begin(), E = Defs.end(); I != E; ++I) { if (I->second->isSubClassOf(R)) { - std::cout << I->first << ", "; + *Out << I->first << ", "; } } - std::cout << "\n"; + *Out << "\n"; break; } + + if (Out != &std::cout) delete Out; return 0; } -- 2.34.1