@@ -207,72 +207,74 @@ bool hasExclusiveType(const ForestNode *N) {
207207 // All supported symbols are nonterminals.
208208 assert (N->kind () == ForestNode::Sequence);
209209 switch (N->rule ()) {
210- // seq := element seq: check element then continue into seq
211- case rule::decl_specifier_seq::decl_specifier__decl_specifier_seq:
212- case rule::defining_type_specifier_seq::defining_type_specifier__defining_type_specifier_seq:
213- case rule::type_specifier_seq::type_specifier__type_specifier_seq:
214- if (hasExclusiveType (N->children ()[0 ]))
215- return true ;
216- N = N->children ()[1 ];
217- continue ;
218- // seq := element: continue into element
219- case rule::decl_specifier_seq::decl_specifier:
220- case rule::type_specifier_seq::type_specifier:
221- case rule::defining_type_specifier_seq::defining_type_specifier:
222- N = N->children ()[0 ];
223- continue ;
224-
225- // defining-type-specifier
226- case rule::defining_type_specifier::type_specifier:
227- N = N->children ()[0 ];
228- continue ;
229- case rule::defining_type_specifier::class_specifier:
230- case rule::defining_type_specifier::enum_specifier:
210+ // seq := element seq: check element then continue into seq
211+ case rule::decl_specifier_seq::decl_specifier__decl_specifier_seq:
212+ case rule::defining_type_specifier_seq::
213+ defining_type_specifier__defining_type_specifier_seq:
214+ case rule::type_specifier_seq::type_specifier__type_specifier_seq:
215+ if (hasExclusiveType (N->children ()[0 ]))
231216 return true ;
217+ N = N->children ()[1 ];
218+ continue ;
219+ // seq := element: continue into element
220+ case rule::decl_specifier_seq::decl_specifier:
221+ case rule::type_specifier_seq::type_specifier:
222+ case rule::defining_type_specifier_seq::defining_type_specifier:
223+ N = N->children ()[0 ];
224+ continue ;
232225
233- // decl-specifier
234- case rule::decl_specifier::defining_type_specifier:
235- N = N->children ()[0 ];
236- continue ;
237- case rule::decl_specifier::CONSTEVAL:
238- case rule::decl_specifier::CONSTEXPR:
239- case rule::decl_specifier::CONSTINIT:
240- case rule::decl_specifier::INLINE:
241- case rule::decl_specifier::FRIEND:
242- case rule::decl_specifier::storage_class_specifier:
243- case rule::decl_specifier::TYPEDEF:
244- case rule::decl_specifier::function_specifier:
245- return false ;
226+ // defining-type-specifier
227+ case rule::defining_type_specifier::type_specifier:
228+ N = N->children ()[0 ];
229+ continue ;
230+ case rule::defining_type_specifier::class_specifier:
231+ case rule::defining_type_specifier::enum_specifier:
232+ return true ;
246233
247- // type-specifier
248- case rule::type_specifier::elaborated_type_specifier:
249- case rule::type_specifier::typename_specifier:
250- return true ;
251- case rule::type_specifier::simple_type_specifier:
252- N = N->children ()[0 ];
253- continue ;
254- case rule::type_specifier::cv_qualifier:
255- return false ;
234+ // decl-specifier
235+ case rule::decl_specifier::defining_type_specifier:
236+ N = N->children ()[0 ];
237+ continue ;
238+ case rule::decl_specifier::CONSTEVAL:
239+ case rule::decl_specifier::CONSTEXPR:
240+ case rule::decl_specifier::CONSTINIT:
241+ case rule::decl_specifier::INLINE:
242+ case rule::decl_specifier::FRIEND:
243+ case rule::decl_specifier::storage_class_specifier:
244+ case rule::decl_specifier::TYPEDEF:
245+ case rule::decl_specifier::function_specifier:
246+ return false ;
256247
257- // simple-type-specifier
258- case rule::simple_type_specifier::type_name:
259- case rule::simple_type_specifier::template_name:
260- case rule::simple_type_specifier::builtin_type:
261- case rule::simple_type_specifier::nested_name_specifier__TEMPLATE__simple_template_id:
262- case rule::simple_type_specifier::nested_name_specifier__template_name:
263- case rule::simple_type_specifier::nested_name_specifier__type_name:
264- case rule::simple_type_specifier::decltype_specifier:
265- case rule::simple_type_specifier::placeholder_type_specifier:
266- return true ;
267- case rule::simple_type_specifier::LONG:
268- case rule::simple_type_specifier::SHORT:
269- case rule::simple_type_specifier::SIGNED:
270- case rule::simple_type_specifier::UNSIGNED:
271- return false ;
248+ // type-specifier
249+ case rule::type_specifier::elaborated_type_specifier:
250+ case rule::type_specifier::typename_specifier:
251+ return true ;
252+ case rule::type_specifier::simple_type_specifier:
253+ N = N->children ()[0 ];
254+ continue ;
255+ case rule::type_specifier::cv_qualifier:
256+ return false ;
272257
273- default :
274- LLVM_DEBUG (llvm::errs () << " Unhandled rule " << N->rule () << " \n " );
275- llvm_unreachable (" hasExclusiveType be exhaustive!" );
258+ // simple-type-specifier
259+ case rule::simple_type_specifier::type_name:
260+ case rule::simple_type_specifier::template_name:
261+ case rule::simple_type_specifier::builtin_type:
262+ case rule::simple_type_specifier::
263+ nested_name_specifier__TEMPLATE__simple_template_id:
264+ case rule::simple_type_specifier::nested_name_specifier__template_name:
265+ case rule::simple_type_specifier::nested_name_specifier__type_name:
266+ case rule::simple_type_specifier::decltype_specifier:
267+ case rule::simple_type_specifier::placeholder_type_specifier:
268+ return true ;
269+ case rule::simple_type_specifier::LONG:
270+ case rule::simple_type_specifier::SHORT:
271+ case rule::simple_type_specifier::SIGNED:
272+ case rule::simple_type_specifier::UNSIGNED:
273+ return false ;
274+
275+ default :
276+ LLVM_DEBUG (llvm::errs () << " Unhandled rule " << N->rule () << " \n " );
277+ llvm_unreachable (" hasExclusiveType be exhaustive!" );
276278 }
277279 }
278280}
@@ -283,13 +285,13 @@ llvm::DenseMap<ExtensionID, RuleGuard> buildGuards() {
283285 [](const GuardParams &P) { return cond; } \
284286 }
285287#define TOKEN_GUARD (kind, cond ) \
286- [](const GuardParams& P) { \
288+ [](const GuardParams & P) { \
287289 const Token &Tok = onlyToken (tok::kind, P.RHS , P.Tokens ); \
288290 return cond; \
289291 }
290292#define SYMBOL_GUARD (kind, cond ) \
291- [](const GuardParams& P) { \
292- const ForestNode &N = onlySymbol (Symbol::kind, P.RHS , P.Tokens ); \
293+ [](const GuardParams & P) { \
294+ const ForestNode &N = onlySymbol (Symbol::kind, P.RHS , P.Tokens ); \
293295 return cond; \
294296 }
295297 return {
0 commit comments