@@ -90,11 +90,20 @@ class DirectiveLanguage {
90
90
}
91
91
};
92
92
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
+
93
102
// Base record class used for Directive and Clause class defined in
94
103
// DirectiveBase.td.
95
104
class BaseRecord {
96
105
public:
97
- explicit BaseRecord (const Record *Def) : Def(Def) {}
106
+ BaseRecord (const Record *Def) : Def(Def) {}
98
107
99
108
StringRef getName () const { return Def->getValueAsString (" name" ); }
100
109
@@ -104,7 +113,7 @@ class BaseRecord {
104
113
105
114
// Returns the name of the directive formatted for output. Whitespace are
106
115
// replaced with underscores.
107
- std::string getFormattedName () {
116
+ std::string getFormattedName () const {
108
117
StringRef Name = Def->getValueAsString (" name" );
109
118
std::string N = Name.str ();
110
119
std::replace (N.begin (), N.end (), ' ' , ' _' );
@@ -124,7 +133,7 @@ class BaseRecord {
124
133
// DirectiveBase.td and provides helper methods for accessing it.
125
134
class Directive : public BaseRecord {
126
135
public:
127
- explicit Directive (const Record *Def) : BaseRecord(Def) {}
136
+ Directive (const Record *Def) : BaseRecord(Def) {}
128
137
129
138
std::vector<Record *> getAllowedClauses () const {
130
139
return Def->getValueAsListOfDefs (" allowedClauses" );
@@ -155,7 +164,7 @@ class Directive : public BaseRecord {
155
164
// and provides helper methods for accessing it.
156
165
class Clause : public BaseRecord {
157
166
public:
158
- explicit Clause (const Record *Def) : BaseRecord(Def) {}
167
+ Clause (const Record *Def) : BaseRecord(Def) {}
159
168
160
169
// Optional field.
161
170
StringRef getClangClass () const {
@@ -172,7 +181,7 @@ class Clause : public BaseRecord {
172
181
// captitalized and the underscores are removed.
173
182
// ex: async -> Async
174
183
// num_threads -> NumThreads
175
- std::string getFormattedParserClassName () {
184
+ std::string getFormattedParserClassName () const {
176
185
StringRef Name = Def->getValueAsString (" name" );
177
186
std::string N = Name.str ();
178
187
bool Cap = true ;
@@ -223,10 +232,10 @@ class Clause : public BaseRecord {
223
232
// DirectiveBase.td and provides helper methods for accessing it.
224
233
class VersionedClause {
225
234
public:
226
- explicit VersionedClause (const Record *Def) : Def(Def) {}
235
+ VersionedClause (const Record *Def) : Def(Def) {}
227
236
228
237
// 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" )) ; }
230
239
231
240
int64_t getMinVersion () const { return Def->getValueAsInt (" minVersion" ); }
232
241
0 commit comments