mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
Initial work to improve documentation for Clang's diagnostics, from Matthieu Monrocq
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129613 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -21,6 +21,8 @@
|
|||||||
#include "llvm/ADT/VectorExtras.h"
|
#include "llvm/ADT/VectorExtras.h"
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <functional>
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
@@ -121,7 +123,6 @@ namespace {
|
|||||||
} // end anonymous namespace.
|
} // end anonymous namespace.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Warning Tables (.inc file) generation.
|
// Warning Tables (.inc file) generation.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
@@ -179,6 +180,14 @@ void ClangDiagsDefsEmitter::run(raw_ostream &OS) {
|
|||||||
|
|
||||||
// Category number.
|
// Category number.
|
||||||
OS << ", " << CategoryIDs.getID(getDiagnosticCategory(&R, DGParentMap));
|
OS << ", " << CategoryIDs.getID(getDiagnosticCategory(&R, DGParentMap));
|
||||||
|
|
||||||
|
// Brief
|
||||||
|
OS << ", \"";
|
||||||
|
OS.write_escaped(R.getValueAsString("Brief")) << '"';
|
||||||
|
|
||||||
|
// Explanation
|
||||||
|
OS << ", \"";
|
||||||
|
OS.write_escaped(R.getValueAsString("Explanation")) << '"';
|
||||||
OS << ")\n";
|
OS << ")\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,3 +303,49 @@ void ClangDiagGroupsEmitter::run(raw_ostream &OS) {
|
|||||||
OS << "CATEGORY(\"" << *I << "\")\n";
|
OS << "CATEGORY(\"" << *I << "\")\n";
|
||||||
OS << "#endif // GET_CATEGORY_TABLE\n\n";
|
OS << "#endif // GET_CATEGORY_TABLE\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Diagnostic name index generation
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
struct RecordIndexElement
|
||||||
|
{
|
||||||
|
RecordIndexElement() {}
|
||||||
|
explicit RecordIndexElement(Record const &R):
|
||||||
|
Name(R.getName()) {}
|
||||||
|
|
||||||
|
std::string Name;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RecordIndexElementSorter :
|
||||||
|
public std::binary_function<RecordIndexElement, RecordIndexElement, bool> {
|
||||||
|
|
||||||
|
bool operator()(RecordIndexElement const &Lhs,
|
||||||
|
RecordIndexElement const &Rhs) const {
|
||||||
|
return Lhs.Name < Rhs.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end anonymous namespace.
|
||||||
|
|
||||||
|
void ClangDiagsIndexNameEmitter::run(raw_ostream &OS) {
|
||||||
|
const std::vector<Record*> &Diags =
|
||||||
|
Records.getAllDerivedDefinitions("Diagnostic");
|
||||||
|
|
||||||
|
std::vector<RecordIndexElement> Index;
|
||||||
|
Index.reserve(Diags.size());
|
||||||
|
for (unsigned i = 0, e = Diags.size(); i != e; ++i) {
|
||||||
|
const Record &R = *(Diags[i]);
|
||||||
|
Index.push_back(RecordIndexElement(R));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::sort(Index.begin(), Index.end(), RecordIndexElementSorter());
|
||||||
|
|
||||||
|
for (unsigned i = 0, e = Index.size(); i != e; ++i) {
|
||||||
|
const RecordIndexElement &R = Index[i];
|
||||||
|
|
||||||
|
OS << "DIAG_NAME_INDEX(" << R.Name << ")\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -33,13 +33,21 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class ClangDiagGroupsEmitter : public TableGenBackend {
|
class ClangDiagGroupsEmitter : public TableGenBackend {
|
||||||
RecordKeeper &Records;
|
RecordKeeper &Records;
|
||||||
public:
|
public:
|
||||||
explicit ClangDiagGroupsEmitter(RecordKeeper &R) : Records(R) {}
|
explicit ClangDiagGroupsEmitter(RecordKeeper &R) : Records(R) {}
|
||||||
|
|
||||||
void run(raw_ostream &OS);
|
void run(raw_ostream &OS);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ClangDiagsIndexNameEmitter : public TableGenBackend {
|
||||||
|
RecordKeeper &Records;
|
||||||
|
public:
|
||||||
|
explicit ClangDiagsIndexNameEmitter(RecordKeeper &R) : Records(R) {}
|
||||||
|
|
||||||
|
void run(raw_ostream &OS);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
|
||||||
|
@@ -65,6 +65,7 @@ enum ActionType {
|
|||||||
GenClangAttrSpellingList,
|
GenClangAttrSpellingList,
|
||||||
GenClangDiagsDefs,
|
GenClangDiagsDefs,
|
||||||
GenClangDiagGroups,
|
GenClangDiagGroups,
|
||||||
|
GenClangDiagsIndexName,
|
||||||
GenClangDeclNodes,
|
GenClangDeclNodes,
|
||||||
GenClangStmtNodes,
|
GenClangStmtNodes,
|
||||||
GenClangSACheckers,
|
GenClangSACheckers,
|
||||||
@@ -133,12 +134,16 @@ namespace {
|
|||||||
"Generate clang PCH attribute reader"),
|
"Generate clang PCH attribute reader"),
|
||||||
clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
|
clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
|
||||||
"Generate clang PCH attribute writer"),
|
"Generate clang PCH attribute writer"),
|
||||||
clEnumValN(GenClangAttrSpellingList, "gen-clang-attr-spelling-list",
|
clEnumValN(GenClangAttrSpellingList,
|
||||||
|
"gen-clang-attr-spelling-list",
|
||||||
"Generate a clang attribute spelling list"),
|
"Generate a clang attribute spelling list"),
|
||||||
clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
|
clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
|
||||||
"Generate Clang diagnostics definitions"),
|
"Generate Clang diagnostics definitions"),
|
||||||
clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
|
clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
|
||||||
"Generate Clang diagnostic groups"),
|
"Generate Clang diagnostic groups"),
|
||||||
|
clEnumValN(GenClangDiagsIndexName,
|
||||||
|
"gen-clang-diags-index-name",
|
||||||
|
"Generate Clang diagnostic name index"),
|
||||||
clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
|
clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
|
||||||
"Generate Clang AST declaration nodes"),
|
"Generate Clang AST declaration nodes"),
|
||||||
clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
|
clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
|
||||||
@@ -295,6 +300,9 @@ int main(int argc, char **argv) {
|
|||||||
case GenClangDiagGroups:
|
case GenClangDiagGroups:
|
||||||
ClangDiagGroupsEmitter(Records).run(Out.os());
|
ClangDiagGroupsEmitter(Records).run(Out.os());
|
||||||
break;
|
break;
|
||||||
|
case GenClangDiagsIndexName:
|
||||||
|
ClangDiagsIndexNameEmitter(Records).run(Out.os());
|
||||||
|
break;
|
||||||
case GenClangDeclNodes:
|
case GenClangDeclNodes:
|
||||||
ClangASTNodesEmitter(Records, "Decl", "Decl").run(Out.os());
|
ClangASTNodesEmitter(Records, "Decl", "Decl").run(Out.os());
|
||||||
ClangDeclContextEmitter(Records).run(Out.os());
|
ClangDeclContextEmitter(Records).run(Out.os());
|
||||||
|
Reference in New Issue
Block a user