tblgen: Put new TableGenMain API in place.

In order to avoid rev-lock with Clang when moving to the new API, also
preserve the current API temporarily and insert a shim to implement the
new API in terms of the old.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165165 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/TableGen/Main.cpp b/lib/TableGen/Main.cpp
index 7aeef56..83bc66f 100644
--- a/lib/TableGen/Main.cpp
+++ b/lib/TableGen/Main.cpp
@@ -22,6 +22,7 @@
 #include "llvm/Support/ToolOutputFile.h"
 #include "llvm/Support/system_error.h"
 #include "llvm/TableGen/Error.h"
+#include "llvm/TableGen/Main.h"
 #include "llvm/TableGen/Record.h"
 #include "llvm/TableGen/TableGenAction.h"
 #include <algorithm>
@@ -47,8 +48,26 @@
               cl::value_desc("directory"), cl::Prefix);
 }
 
+namespace {
+// XXX: this is a crutch for transitioning to the new TableGenMain API
+// (with a TableGenMainFn* instead of a pointless class).
+class StubTransitionalTableGenAction : public TableGenAction {
+  TableGenMainFn *MainFn;
+public:
+  StubTransitionalTableGenAction(TableGenMainFn *M) : MainFn(M) {}
+  bool operator()(raw_ostream &OS, RecordKeeper &Records) {
+    return MainFn(OS, Records);
+  }
+};
+}
+
 namespace llvm {
 
+int TableGenMain(char *argv0, TableGenMainFn *MainFn) {
+  StubTransitionalTableGenAction Action(MainFn);
+  return TableGenMain(argv0, Action);
+}
+
 int TableGenMain(char *argv0, TableGenAction &Action) {
   RecordKeeper Records;