@@ -1526,7 +1526,8 @@ createArgument(const Record &Arg, StringRef Attr,
1526
1526
1527
1527
if (!Ptr ) {
1528
1528
// Search in reverse order so that the most-derived type is handled first.
1529
- for (const auto &[Base, _] : reverse (Search->getSuperClasses ())) {
1529
+ std::vector<const Record *> SCs = Search->getSuperClasses ();
1530
+ for (const Record *Base : reverse (SCs)) {
1530
1531
if ((Ptr = createArgument (Arg, Attr, Base)))
1531
1532
break ;
1532
1533
}
@@ -1856,17 +1857,16 @@ static LateAttrParseKind getLateAttrParseKind(const Record *Attr) {
1856
1857
auto *LAPK = Attr->getValueAsDef (LateParsedStr);
1857
1858
1858
1859
// Typecheck the `LateParsed` field.
1859
- SmallVector<const Record *, 1 > SuperClasses;
1860
- LAPK->getDirectSuperClasses (SuperClasses);
1861
- if (SuperClasses.size () != 1 )
1860
+ if (LAPK->getDirectSuperClasses ().size () != 1 )
1862
1861
PrintFatalError (Attr, " Field `" + Twine (LateParsedStr) +
1863
1862
" `should only have one super class" );
1864
1863
1865
- if (SuperClasses[0 ]->getName () != LateAttrParseKindStr)
1864
+ const Record *SuperClass = LAPK->getDirectSuperClasses ()[0 ].first ;
1865
+ if (SuperClass->getName () != LateAttrParseKindStr)
1866
1866
PrintFatalError (
1867
1867
Attr, " Field `" + Twine (LateParsedStr) + " `should only have type `" +
1868
1868
Twine (LateAttrParseKindStr) + " ` but found type `" +
1869
- SuperClasses[ 0 ] ->getName () + " `" );
1869
+ SuperClass ->getName () + " `" );
1870
1870
1871
1871
// Get Kind and verify the enum name matches the name in `Attr.td`.
1872
1872
unsigned Kind = LAPK->getValueAsInt (KindFieldStr);
@@ -2465,8 +2465,8 @@ static void emitStringSwitchCases(std::map<StringRef, FSIVecTy> &Map,
2465
2465
}
2466
2466
2467
2467
static bool isTypeArgument (const Record *Arg) {
2468
- return !Arg->getSuperClasses ().empty () &&
2469
- Arg->getSuperClasses ().back ().first ->getName () == " TypeArgument" ;
2468
+ return !Arg->getDirectSuperClasses ().empty () &&
2469
+ Arg->getDirectSuperClasses ().back ().first ->getName () == " TypeArgument" ;
2470
2470
}
2471
2471
2472
2472
// / Emits the first-argument-is-type property for attributes.
@@ -2507,42 +2507,45 @@ static void emitClangAttrArgContextList(const RecordKeeper &Records,
2507
2507
}
2508
2508
2509
2509
static bool isIdentifierArgument (const Record *Arg) {
2510
- return !Arg->getSuperClasses ().empty () &&
2511
- StringSwitch<bool >(Arg->getSuperClasses ().back ().first ->getName ())
2510
+ return !Arg->getDirectSuperClasses ().empty () &&
2511
+ StringSwitch<bool >(
2512
+ Arg->getDirectSuperClasses ().back ().first ->getName ())
2512
2513
.Case (" IdentifierArgument" , true )
2513
2514
.Case (" EnumArgument" , true )
2514
2515
.Case (" VariadicEnumArgument" , true )
2515
2516
.Default (false );
2516
2517
}
2517
2518
2518
2519
static bool isVariadicIdentifierArgument (const Record *Arg) {
2519
- return !Arg->getSuperClasses ().empty () &&
2520
- StringSwitch<bool >(Arg->getSuperClasses ().back ().first ->getName ())
2520
+ return !Arg->getDirectSuperClasses ().empty () &&
2521
+ StringSwitch<bool >(
2522
+ Arg->getDirectSuperClasses ().back ().first ->getName ())
2521
2523
.Case (" VariadicIdentifierArgument" , true )
2522
2524
.Case (" VariadicParamOrParamIdxArgument" , true )
2523
2525
.Default (false );
2524
2526
}
2525
2527
2526
2528
static bool isVariadicExprArgument (const Record *Arg) {
2527
- return !Arg->getSuperClasses ().empty () &&
2528
- StringSwitch<bool >(Arg->getSuperClasses ().back ().first ->getName ())
2529
+ return !Arg->getDirectSuperClasses ().empty () &&
2530
+ StringSwitch<bool >(
2531
+ Arg->getDirectSuperClasses ().back ().first ->getName ())
2529
2532
.Case (" VariadicExprArgument" , true )
2530
2533
.Default (false );
2531
2534
}
2532
2535
2533
2536
static bool isStringLiteralArgument (const Record *Arg) {
2534
- if (Arg->getSuperClasses ().empty ())
2537
+ if (Arg->getDirectSuperClasses ().empty ())
2535
2538
return false ;
2536
- StringRef ArgKind = Arg->getSuperClasses ().back ().first ->getName ();
2539
+ StringRef ArgKind = Arg->getDirectSuperClasses ().back ().first ->getName ();
2537
2540
if (ArgKind == " EnumArgument" )
2538
2541
return Arg->getValueAsBit (" IsString" );
2539
2542
return ArgKind == " StringArgument" ;
2540
2543
}
2541
2544
2542
2545
static bool isVariadicStringLiteralArgument (const Record *Arg) {
2543
- if (Arg->getSuperClasses ().empty ())
2546
+ if (Arg->getDirectSuperClasses ().empty ())
2544
2547
return false ;
2545
- StringRef ArgKind = Arg->getSuperClasses ().back ().first ->getName ();
2548
+ StringRef ArgKind = Arg->getDirectSuperClasses ().back ().first ->getName ();
2546
2549
if (ArgKind == " VariadicEnumArgument" )
2547
2550
return Arg->getValueAsBit (" IsString" );
2548
2551
return ArgKind == " VariadicStringArgument" ;
@@ -2631,8 +2634,9 @@ static void emitClangAttrStrictIdentifierArgList(const RecordKeeper &Records,
2631
2634
}
2632
2635
2633
2636
static bool keywordThisIsaIdentifierInArgument (const Record *Arg) {
2634
- return !Arg->getSuperClasses ().empty () &&
2635
- StringSwitch<bool >(Arg->getSuperClasses ().back ().first ->getName ())
2637
+ return !Arg->getDirectSuperClasses ().empty () &&
2638
+ StringSwitch<bool >(
2639
+ Arg->getDirectSuperClasses ().back ().first ->getName ())
2636
2640
.Case (" VariadicParamOrParamIdxArgument" , true )
2637
2641
.Default (false );
2638
2642
}
@@ -2718,11 +2722,11 @@ static void emitAttributes(const RecordKeeper &Records, raw_ostream &OS,
2718
2722
if (!R.getValueAsBit (" ASTNode" ))
2719
2723
continue ;
2720
2724
2721
- ArrayRef< std::pair <const Record *, SMRange> > Supers = R.getSuperClasses ();
2725
+ std::vector <const Record *> Supers = R.getSuperClasses ();
2722
2726
assert (!Supers.empty () && " Forgot to specify a superclass for the attr" );
2723
2727
std::string SuperName;
2724
2728
bool Inheritable = false ;
2725
- for (const auto &[R, _] : reverse (Supers)) {
2729
+ for (const Record *R : reverse (Supers)) {
2726
2730
if (R->getName () != " TargetSpecificAttr" &&
2727
2731
R->getName () != " DeclOrTypeAttr" && SuperName.empty ())
2728
2732
SuperName = R->getName ().str ();
@@ -3419,10 +3423,10 @@ namespace {
3419
3423
AttrClass *findSuperClass (const Record *R) const {
3420
3424
// TableGen flattens the superclass list, so we just need to walk it
3421
3425
// in reverse.
3422
- auto SuperClasses = R->getSuperClasses ();
3423
- for (signed i = 0 , e = SuperClasses. size (); i != e; ++i ) {
3424
- auto SuperClass = findClassByRecord (SuperClasses[e - i - 1 ]. first );
3425
- if (SuperClass) return SuperClass;
3426
+ std::vector< const Record *> SuperClasses = R->getSuperClasses ();
3427
+ for (const Record *R : reverse (SuperClasses) ) {
3428
+ if (AttrClass * SuperClass = findClassByRecord (R))
3429
+ return SuperClass;
3426
3430
}
3427
3431
return nullptr ;
3428
3432
}
@@ -4661,8 +4665,9 @@ static void GenerateHandleDeclAttribute(const Record &Attr, raw_ostream &OS) {
4661
4665
}
4662
4666
4663
4667
static bool isParamExpr (const Record *Arg) {
4664
- return !Arg->getSuperClasses ().empty () &&
4665
- StringSwitch<bool >(Arg->getSuperClasses ().back ().first ->getName ())
4668
+ return !Arg->getDirectSuperClasses ().empty () &&
4669
+ StringSwitch<bool >(
4670
+ Arg->getDirectSuperClasses ().back ().first ->getName ())
4666
4671
.Case (" ExprArgument" , true )
4667
4672
.Case (" VariadicExprArgument" , true )
4668
4673
.Default (false );
@@ -4785,7 +4790,7 @@ void EmitClangAttrParsedAttrImpl(const RecordKeeper &Records, raw_ostream &OS) {
4785
4790
if (Arg->getValueAsBitOrUnset (" Fake" , UnusedUnset))
4786
4791
continue ;
4787
4792
ArgNames.push_back (Arg->getValueAsString (" Name" ).str ());
4788
- for (const auto &[ Class, _] : Arg->getSuperClasses ()) {
4793
+ for (const Record * Class : Arg->getSuperClasses ()) {
4789
4794
if (Class->getName ().starts_with (" Variadic" )) {
4790
4795
ArgNames.back ().append (" ..." );
4791
4796
break ;
0 commit comments