From: Simon Tatham Date: Wed, 22 Aug 2018 09:20:39 +0000 (+0000) Subject: [clang-tblgen] Add -print-records and -dump-json modes. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=30d47f64ecab950181d18655e543bad3520ce72b;p=clang [clang-tblgen] Add -print-records and -dump-json modes. Currently, if clang-tblgen is run without a mode option, it defaults to the first mode in its 'enum Action', which happens to be -gen-clang-attr-classes. I think it makes more sense for it to behave the same way as llvm-tblgen, i.e. print a diagnostic dump if it's not given any more specific instructions. I've also added the same -dump-json that llvm-tblgen supports. This means any tblgen command line (whether llvm- or clang-) can be mechanically turned into one that processes the same input into JSON. Reviewers: nhaehnle Reviewed By: nhaehnle Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D50771 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@340390 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp index a2ba131628..c02fa3d170 100644 --- a/utils/TableGen/TableGen.cpp +++ b/utils/TableGen/TableGen.cpp @@ -23,6 +23,8 @@ using namespace llvm; using namespace clang; enum ActionType { + PrintRecords, + DumpJSON, GenClangAttrClasses, GenClangAttrParserStringSwitches, GenClangAttrSubjectMatchRulesParserStringSwitches, @@ -66,6 +68,10 @@ namespace { cl::opt Action( cl::desc("Action to perform:"), cl::values( + clEnumValN(PrintRecords, "print-records", + "Print all records to stdout (default)"), + clEnumValN(DumpJSON, "dump-json", + "Dump all records as machine-readable JSON"), clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes", "Generate clang attribute clases"), clEnumValN(GenClangAttrParserStringSwitches, @@ -164,6 +170,12 @@ ClangComponent("clang-component", bool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) { switch (Action) { + case PrintRecords: + OS << Records; // No argument, dump all contents + break; + case DumpJSON: + EmitJSON(Records, OS); + break; case GenClangAttrClasses: EmitClangAttrClass(Records, OS); break;