summaryrefslogtreecommitdiff
path: root/utils/TableGen/ClangDiagnosticsEmitter.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-03-18 21:28:47 +0000
committerTed Kremenek <kremenek@apple.com>2009-03-18 21:28:47 +0000
commit3ac82fe490db6e63019992a59108af3a0632bba3 (patch)
treeaf1b9abf682275beb27d27c0a4867fd9f0aadb3c /utils/TableGen/ClangDiagnosticsEmitter.cpp
parent8b9d027701dbfe4e0dad8c0fd8a2fdc95e7bf7db (diff)
downloadllvm-3ac82fe490db6e63019992a59108af3a0632bba3.tar.gz
llvm-3ac82fe490db6e63019992a59108af3a0632bba3.tar.bz2
llvm-3ac82fe490db6e63019992a59108af3a0632bba3.tar.xz
'tblgen -gen-clang-diags-options' now outputs the OptionTable:
static const WarningOption OptionTable[] = { {"unused-macros", DIAGS(UnusedMacrosDiags)} ... }; This table is not yet properly sorted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67242 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/ClangDiagnosticsEmitter.cpp')
-rw-r--r--utils/TableGen/ClangDiagnosticsEmitter.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/utils/TableGen/ClangDiagnosticsEmitter.cpp b/utils/TableGen/ClangDiagnosticsEmitter.cpp
index a3f27ba75f..26ae608d88 100644
--- a/utils/TableGen/ClangDiagnosticsEmitter.cpp
+++ b/utils/TableGen/ClangDiagnosticsEmitter.cpp
@@ -186,11 +186,6 @@ void ClangOptionsEmitter::run(std::ostream &OS) {
// Iterate through the OptionMap and emit the declarations.
for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) {
-// const RecordVal *V = findRecordVal(*I->first, "Name");
-// assert(V && "Options must have a 'Name' value.");
-// const StringInit* SV = dynamic_cast<const StringInit*>(V->getValue());
-// assert(SV && "'Name' entry must be a string.");
-
// Output the option.
OS << "static const diag::kind " << I->first->getName() << "[] = { ";
@@ -206,4 +201,23 @@ void ClangOptionsEmitter::run(std::ostream &OS) {
}
OS << " };\n";
}
+
+ // Now emit the OptionTable table.
+ OS << "\nstatic const WarningOption OptionTable[] = {";
+ bool first = true;
+ for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) {
+ const RecordVal *V = findRecordVal(*I->first, "Name");
+ assert(V && "Options must have a 'Name' value.");
+ const StringInit* SV = dynamic_cast<const StringInit*>(V->getValue());
+ assert(SV && "'Name' entry must be a string.");
+
+ if (first)
+ first = false;
+ else
+ OS << ',';
+
+ OS << "\n {\"" << SV->getValue()
+ << "\", DIAGS(" << I->first->getName() << ")}";
+ }
+ OS << "\n};\n";
}