Skip to content

Commit f7479b5

Browse files
authored
[NFC][TableGen] Simplify DirectiveEmitter using range for loops (#107909)
Make constructors that take const Record * implicit, allowing us to simplify some range based loops to use that class instance as the loop variable. Change remaining constructor calls to use () instead of {} to construct objects.
1 parent a111f91 commit f7479b5

File tree

2 files changed

+54
-65
lines changed

2 files changed

+54
-65
lines changed

llvm/include/llvm/TableGen/DirectiveEmitter.h

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,20 @@ class DirectiveLanguage {
9090
}
9191
};
9292

93+
// Note: In all the classes below, allow implicit construction from Record *,
94+
// to allow writing code like:
95+
// for (const Directive D : getDirectives()) {
96+
//
97+
// instead of:
98+
//
99+
// for (const Record *R : getDirectives()) {
100+
// Directive D(R);
101+
93102
// Base record class used for Directive and Clause class defined in
94103
// DirectiveBase.td.
95104
class BaseRecord {
96105
public:
97-
explicit BaseRecord(const Record *Def) : Def(Def) {}
106+
BaseRecord(const Record *Def) : Def(Def) {}
98107

99108
StringRef getName() const { return Def->getValueAsString("name"); }
100109

@@ -104,7 +113,7 @@ class BaseRecord {
104113

105114
// Returns the name of the directive formatted for output. Whitespace are
106115
// replaced with underscores.
107-
std::string getFormattedName() {
116+
std::string getFormattedName() const {
108117
StringRef Name = Def->getValueAsString("name");
109118
std::string N = Name.str();
110119
std::replace(N.begin(), N.end(), ' ', '_');
@@ -124,7 +133,7 @@ class BaseRecord {
124133
// DirectiveBase.td and provides helper methods for accessing it.
125134
class Directive : public BaseRecord {
126135
public:
127-
explicit Directive(const Record *Def) : BaseRecord(Def) {}
136+
Directive(const Record *Def) : BaseRecord(Def) {}
128137

129138
std::vector<Record *> getAllowedClauses() const {
130139
return Def->getValueAsListOfDefs("allowedClauses");
@@ -155,7 +164,7 @@ class Directive : public BaseRecord {
155164
// and provides helper methods for accessing it.
156165
class Clause : public BaseRecord {
157166
public:
158-
explicit Clause(const Record *Def) : BaseRecord(Def) {}
167+
Clause(const Record *Def) : BaseRecord(Def) {}
159168

160169
// Optional field.
161170
StringRef getClangClass() const {
@@ -172,7 +181,7 @@ class Clause : public BaseRecord {
172181
// captitalized and the underscores are removed.
173182
// ex: async -> Async
174183
// num_threads -> NumThreads
175-
std::string getFormattedParserClassName() {
184+
std::string getFormattedParserClassName() const {
176185
StringRef Name = Def->getValueAsString("name");
177186
std::string N = Name.str();
178187
bool Cap = true;
@@ -223,10 +232,10 @@ class Clause : public BaseRecord {
223232
// DirectiveBase.td and provides helper methods for accessing it.
224233
class VersionedClause {
225234
public:
226-
explicit VersionedClause(const Record *Def) : Def(Def) {}
235+
VersionedClause(const Record *Def) : Def(Def) {}
227236

228237
// Return the specific clause record wrapped in the Clause class.
229-
Clause getClause() const { return Clause{Def->getValueAsDef("clause")}; }
238+
Clause getClause() const { return Clause(Def->getValueAsDef("clause")); }
230239

231240
int64_t getMinVersion() const { return Def->getValueAsInt("minVersion"); }
232241

0 commit comments

Comments
 (0)