From: Craig Topper Date: Mon, 18 Jan 2016 19:52:54 +0000 (+0000) Subject: [TableGen] Merge the SuperClass Record and SMRange vector a single vector. This remov... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe08b36af9086b362d7edb4e13e6ccadc4f98332;p=clang [TableGen] Merge the SuperClass Record and SMRange vector a single vector. This removes the state needed to manage the extract vector. NFC git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258066 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/TableGen/ClangAttrEmitter.cpp b/utils/TableGen/ClangAttrEmitter.cpp index f70bff2c3b..c0574449ac 100644 --- a/utils/TableGen/ClangAttrEmitter.cpp +++ b/utils/TableGen/ClangAttrEmitter.cpp @@ -1072,9 +1072,9 @@ createArgument(const Record &Arg, StringRef Attr, if (!Ptr) { // Search in reverse order so that the most-derived type is handled first. - ArrayRef Bases = Search->getSuperClasses(); - for (const auto *Base : llvm::make_range(Bases.rbegin(), Bases.rend())) { - if ((Ptr = createArgument(Arg, Attr, Base))) + ArrayRef> Bases = Search->getSuperClasses(); + for (const auto &Base : llvm::make_range(Bases.rbegin(), Bases.rend())) { + if ((Ptr = createArgument(Arg, Attr, Base.first))) break; } } @@ -1381,7 +1381,7 @@ static void emitClangAttrTypeArgList(RecordKeeper &Records, raw_ostream &OS) { if (Args.empty()) continue; - if (Args[0]->getSuperClasses().back()->getName() != "TypeArgument") + if (Args[0]->getSuperClasses().back().first->getName() != "TypeArgument") continue; // All these spellings take a single type argument. @@ -1419,7 +1419,7 @@ static void emitClangAttrArgContextList(RecordKeeper &Records, raw_ostream &OS) static bool isIdentifierArgument(Record *Arg) { return !Arg->getSuperClasses().empty() && - llvm::StringSwitch(Arg->getSuperClasses().back()->getName()) + llvm::StringSwitch(Arg->getSuperClasses().back().first->getName()) .Case("IdentifierArgument", true) .Case("EnumArgument", true) .Case("VariadicEnumArgument", true) @@ -1476,13 +1476,13 @@ void EmitClangAttrClass(RecordKeeper &Records, raw_ostream &OS) { if (!R.getValueAsBit("ASTNode")) continue; - ArrayRef Supers = R.getSuperClasses(); + ArrayRef> Supers = R.getSuperClasses(); assert(!Supers.empty() && "Forgot to specify a superclass for the attr"); std::string SuperName; - for (const auto *Super : llvm::make_range(Supers.rbegin(), Supers.rend())) { - const Record &R = *Super; - if (R.getName() != "TargetSpecificAttr" && SuperName.empty()) - SuperName = R.getName(); + for (const auto &Super : llvm::make_range(Supers.rbegin(), Supers.rend())) { + const Record *R = Super.first; + if (R->getName() != "TargetSpecificAttr" && SuperName.empty()) + SuperName = R->getName(); } OS << "class " << R.getName() << "Attr : public " << SuperName << " {\n"; diff --git a/utils/TableGen/ClangDiagnosticsEmitter.cpp b/utils/TableGen/ClangDiagnosticsEmitter.cpp index efce521903..bbc2bdb065 100644 --- a/utils/TableGen/ClangDiagnosticsEmitter.cpp +++ b/utils/TableGen/ClangDiagnosticsEmitter.cpp @@ -152,13 +152,12 @@ static bool beforeThanCompareGroups(const GroupInfo *LHS, const GroupInfo *RHS){ } static SMRange findSuperClassRange(const Record *R, StringRef SuperName) { - ArrayRef Supers = R->getSuperClasses(); - - for (size_t i = 0, e = Supers.size(); i < e; ++i) - if (Supers[i]->getName() == SuperName) - return R->getSuperClassRanges()[i]; - - return SMRange(); + ArrayRef> Supers = R->getSuperClasses(); + auto I = std::find_if(Supers.begin(), Supers.end(), + [&](const std::pair &SuperPair) { + return SuperPair.first->getName() == SuperName; + }); + return (I != Supers.end()) ? I->second : SMRange(); } /// \brief Invert the 1-[0/1] mapping of diags to group into a one to many diff --git a/utils/TableGen/NeonEmitter.cpp b/utils/TableGen/NeonEmitter.cpp index 6e7bc9057f..a298cb1008 100644 --- a/utils/TableGen/NeonEmitter.cpp +++ b/utils/TableGen/NeonEmitter.cpp @@ -1926,7 +1926,7 @@ void NeonEmitter::createIntrinsic(Record *R, ClassKind CK = ClassNone; if (R->getSuperClasses().size() >= 2) - CK = ClassMap[R->getSuperClasses()[1]]; + CK = ClassMap[R->getSuperClasses()[1].first]; std::vector> NewTypeSpecs; for (auto TS : TypeSpecs) {