summaryrefslogtreecommitdiff
path: root/utils/TableGen/TableGen.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-06-03 04:56:29 +0000
committerChris Lattner <sabre@nondot.org>2003-06-03 04:56:29 +0000
commitbc52013e30f69655f941313c3fa1a2c18de5b7ab (patch)
treecbc075d5e95379eeed75cc213ee63791c650e3e9 /utils/TableGen/TableGen.cpp
parentdc844fa31af0dd8bb33629afa7772f474a08e2e5 (diff)
downloadllvm-bc52013e30f69655f941313c3fa1a2c18de5b7ab.tar.gz
llvm-bc52013e30f69655f941313c3fa1a2c18de5b7ab.tar.bz2
llvm-bc52013e30f69655f941313c3fa1a2c18de5b7ab.tar.xz
Make tablegen use more structured command line options
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6570 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/TableGen.cpp')
-rw-r--r--utils/TableGen/TableGen.cpp49
1 files changed, 33 insertions, 16 deletions
diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp
index 5eb5a7c4c9..b6d1810302 100644
--- a/utils/TableGen/TableGen.cpp
+++ b/utils/TableGen/TableGen.cpp
@@ -3,9 +3,30 @@
#include "CodeEmitterGen.h"
#include <algorithm>
-static cl::opt<std::string> Class("class", cl::desc("Print Enum list for this class"));
-static cl::opt<bool> Parse("parse");
-static cl::opt<bool> GenEmitter("gen-emitter");
+enum ActionType {
+ PrintRecords,
+ GenEmitter,
+ PrintEnums,
+ Parse,
+};
+
+namespace {
+ cl::opt<ActionType>
+ Action(cl::desc("Action to perform:"),
+ cl::values(clEnumValN(PrintRecords, "print-records",
+ "Print all records to stdout"),
+ clEnumValN(GenEmitter, "gen-emitter",
+ "Generate machine code emitter"),
+ clEnumValN(PrintEnums, "print-enums",
+ "Print enum values for a class"),
+ clEnumValN(Parse, "parse",
+ "Interpret machine code (testing only)"),
+ 0));
+
+ cl::opt<std::string>
+ Class("class", cl::desc("Print Enum list for this class"));
+}
+
void ParseFile();
@@ -353,20 +374,15 @@ int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv);
ParseFile();
- if (Parse) {
- ParseMachineCode();
- return 0;
- }
-
- if (GenEmitter) {
- CodeEmitterGen CEG(Records);
- CEG.createEmitter(std::cout);
- return 0;
- }
-
- if (Class == "") {
+ switch (Action) {
+ case Parse: ParseMachineCode(); break;
+ case GenEmitter:
+ CodeEmitterGen(Records).createEmitter(std::cout);
+ break;
+ case PrintRecords:
std::cout << Records; // No argument, dump all contents
- } else {
+ break;
+ case PrintEnums:
Record *R = Records.getClass(Class);
if (R == 0) {
std::cerr << "Cannot find class '" << Class << "'!\n";
@@ -381,6 +397,7 @@ int main(int argc, char **argv) {
}
}
std::cout << "\n";
+ break;
}
return 0;
}