[clang] 8625eb0 - [clang][TableGen] Change OptionDoc Emitter to use const RecordKeeper (#108216)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 11 10:52:18 PDT 2024
Author: Rahul Joshi
Date: 2024-09-11T10:52:15-07:00
New Revision: 8625eb0b87c86d3ef42a365d7593eed664b379e8
URL: https://github.com/llvm/llvm-project/commit/8625eb0b87c86d3ef42a365d7593eed664b379e8
DIFF: https://github.com/llvm/llvm-project/commit/8625eb0b87c86d3ef42a365d7593eed664b379e8.diff
LOG: [clang][TableGen] Change OptionDoc Emitter to use const RecordKeeper (#108216)
Change OptionDoc Emitter to use const RecordKeeper.
This is a part of effort to have better const correctness in TableGen
backends:
https://discourse.llvm.org/t/psa-planned-changes-to-tablegen-getallderiveddefinitions-api-potential-downstream-breakages/81089
Added:
Modified:
clang/utils/TableGen/ClangOptionDocEmitter.cpp
clang/utils/TableGen/TableGenBackends.h
Removed:
################################################################################
diff --git a/clang/utils/TableGen/ClangOptionDocEmitter.cpp b/clang/utils/TableGen/ClangOptionDocEmitter.cpp
index 86835611b84218..8c32f0218e761b 100644
--- a/clang/utils/TableGen/ClangOptionDocEmitter.cpp
+++ b/clang/utils/TableGen/ClangOptionDocEmitter.cpp
@@ -24,8 +24,8 @@ using namespace llvm;
namespace {
struct DocumentedOption {
- Record *Option;
- std::vector<Record*> Aliases;
+ const Record *Option;
+ std::vector<const Record *> Aliases;
};
struct DocumentedGroup;
struct Documentation {
@@ -37,7 +37,7 @@ struct Documentation {
}
};
struct DocumentedGroup : Documentation {
- Record *Group;
+ const Record *Group;
};
static bool hasFlag(const Record *Option, StringRef OptionFlag,
@@ -63,25 +63,25 @@ static bool isOptionVisible(const Record *Option, const Record *DocInfo) {
}
// Reorganize the records into a suitable form for emitting documentation.
-Documentation extractDocumentation(RecordKeeper &Records,
+Documentation extractDocumentation(const RecordKeeper &Records,
const Record *DocInfo) {
Documentation Result;
// Build the tree of groups. The root in the tree is the fake option group
// (Record*)nullptr, which contains all top-level groups and options.
- std::map<Record*, std::vector<Record*> > OptionsInGroup;
- std::map<Record*, std::vector<Record*> > GroupsInGroup;
- std::map<Record*, std::vector<Record*> > Aliases;
+ std::map<const Record *, std::vector<const Record *>> OptionsInGroup;
+ std::map<const Record *, std::vector<const Record *>> GroupsInGroup;
+ std::map<const Record *, std::vector<const Record *>> Aliases;
- std::map<std::string, Record*> OptionsByName;
- for (Record *R : Records.getAllDerivedDefinitions("Option"))
+ std::map<std::string, const Record *> OptionsByName;
+ for (const Record *R : Records.getAllDerivedDefinitions("Option"))
OptionsByName[std::string(R->getValueAsString("Name"))] = R;
- auto Flatten = [](Record *R) {
+ auto Flatten = [](const Record *R) {
return R->getValue("DocFlatten") && R->getValueAsBit("DocFlatten");
};
- auto SkipFlattened = [&](Record *R) -> Record* {
+ auto SkipFlattened = [&](const Record *R) -> const Record * {
while (R && Flatten(R)) {
auto *G = dyn_cast<DefInit>(R->getValueInit("Group"));
if (!G)
@@ -91,17 +91,17 @@ Documentation extractDocumentation(RecordKeeper &Records,
return R;
};
- for (Record *R : Records.getAllDerivedDefinitions("OptionGroup")) {
+ for (const Record *R : Records.getAllDerivedDefinitions("OptionGroup")) {
if (Flatten(R))
continue;
- Record *Group = nullptr;
+ const Record *Group = nullptr;
if (auto *G = dyn_cast<DefInit>(R->getValueInit("Group")))
Group = SkipFlattened(G->getDef());
GroupsInGroup[Group].push_back(R);
}
- for (Record *R : Records.getAllDerivedDefinitions("Option")) {
+ for (const Record *R : Records.getAllDerivedDefinitions("Option")) {
if (auto *A = dyn_cast<DefInit>(R->getValueInit("Alias"))) {
Aliases[A->getDef()].push_back(R);
continue;
@@ -120,33 +120,33 @@ Documentation extractDocumentation(RecordKeeper &Records,
}
}
- Record *Group = nullptr;
+ const Record *Group = nullptr;
if (auto *G = dyn_cast<DefInit>(R->getValueInit("Group")))
Group = SkipFlattened(G->getDef());
OptionsInGroup[Group].push_back(R);
}
- auto CompareByName = [](Record *A, Record *B) {
+ auto CompareByName = [](const Record *A, const Record *B) {
return A->getValueAsString("Name") < B->getValueAsString("Name");
};
- auto CompareByLocation = [](Record *A, Record *B) {
+ auto CompareByLocation = [](const Record *A, const Record *B) {
return A->getLoc()[0].getPointer() < B->getLoc()[0].getPointer();
};
- auto DocumentationForOption = [&](Record *R) -> DocumentedOption {
+ auto DocumentationForOption = [&](const Record *R) -> DocumentedOption {
auto &A = Aliases[R];
llvm::sort(A, CompareByName);
return {R, std::move(A)};
};
- std::function<Documentation(Record *)> DocumentationForGroup =
- [&](Record *R) -> Documentation {
+ std::function<Documentation(const Record *)> DocumentationForGroup =
+ [&](const Record *R) -> Documentation {
Documentation D;
auto &Groups = GroupsInGroup[R];
llvm::sort(Groups, CompareByLocation);
- for (Record *G : Groups) {
+ for (const Record *G : Groups) {
D.Groups.emplace_back();
D.Groups.back().Group = G;
Documentation &Base = D.Groups.back();
@@ -157,7 +157,7 @@ Documentation extractDocumentation(RecordKeeper &Records,
auto &Options = OptionsInGroup[R];
llvm::sort(Options, CompareByName);
- for (Record *O : Options)
+ for (const Record *O : Options)
if (isOptionVisible(O, DocInfo))
D.Options.push_back(DocumentationForOption(O));
@@ -444,7 +444,7 @@ void emitDocumentation(int Depth, const Documentation &Doc,
} // namespace
-void clang::EmitClangOptDocs(RecordKeeper &Records, raw_ostream &OS) {
+void clang::EmitClangOptDocs(const RecordKeeper &Records, raw_ostream &OS) {
const Record *DocInfo = Records.getDef("GlobalDocumentation");
if (!DocInfo) {
PrintFatalError("The GlobalDocumentation top-level definition is missing, "
diff --git a/clang/utils/TableGen/TableGenBackends.h b/clang/utils/TableGen/TableGenBackends.h
index d190950c939142..fe55ef2f423afe 100644
--- a/clang/utils/TableGen/TableGenBackends.h
+++ b/clang/utils/TableGen/TableGenBackends.h
@@ -143,7 +143,7 @@ void EmitCdeBuiltinAliases(llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
void EmitClangAttrDocs(llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
void EmitClangDiagDocs(llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
-void EmitClangOptDocs(llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
+void EmitClangOptDocs(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
void EmitClangOpenCLBuiltins(const llvm::RecordKeeper &Records,
llvm::raw_ostream &OS);
More information about the cfe-commits
mailing list