r209233 - Cleaning up some range-based for loops so that the automatic type deduction is more explicit about pointers and const. Did some minor drive-by const correctness fixes and identifier updates as well. No functional changes.
Aaron Ballman
aaron at aaronballman.com
Tue May 20 12:47:15 PDT 2014
Author: aaronballman
Date: Tue May 20 14:47:14 2014
New Revision: 209233
URL: http://llvm.org/viewvc/llvm-project?rev=209233&view=rev
Log:
Cleaning up some range-based for loops so that the automatic type deduction is more explicit about pointers and const. Did some minor drive-by const correctness fixes and identifier updates as well. No functional changes.
Modified:
cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp
Modified: cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp?rev=209233&r1=209232&r2=209233&view=diff
==============================================================================
--- cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp (original)
+++ cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Tue May 20 14:47:14 2014
@@ -129,14 +129,14 @@ static StringRef NormalizeAttrSpelling(S
return AttrSpelling;
}
-typedef std::vector<std::pair<std::string, Record *>> ParsedAttrMap;
+typedef std::vector<std::pair<std::string, const Record *>> ParsedAttrMap;
static ParsedAttrMap getParsedAttrList(const RecordKeeper &Records,
ParsedAttrMap *Dupes = nullptr) {
std::vector<Record *> Attrs = Records.getAllDerivedDefinitions("Attr");
std::set<std::string> Seen;
ParsedAttrMap R;
- for (auto Attr : Attrs) {
+ for (const auto *Attr : Attrs) {
if (Attr->getValueAsBit("SemaHandler")) {
std::string AN;
if (Attr->isSubClassOf("TargetSpecificAttr") &&
@@ -167,7 +167,7 @@ namespace {
bool isOpt;
public:
- Argument(Record &Arg, StringRef Attr)
+ Argument(const Record &Arg, StringRef Attr)
: lowerName(Arg.getValueAsString("Name")), upperName(lowerName),
attrName(Attr), isOpt(false) {
if (!lowerName.empty()) {
@@ -216,7 +216,7 @@ namespace {
std::string type;
public:
- SimpleArgument(Record &Arg, StringRef Attr, std::string T)
+ SimpleArgument(const Record &Arg, StringRef Attr, std::string T)
: Argument(Arg, Attr), type(T)
{}
@@ -293,7 +293,7 @@ namespace {
int64_t Default;
public:
- DefaultSimpleArgument(Record &Arg, StringRef Attr,
+ DefaultSimpleArgument(const Record &Arg, StringRef Attr,
std::string T, int64_t Default)
: SimpleArgument(Arg, Attr, T), Default(Default) {}
@@ -307,7 +307,7 @@ namespace {
class StringArgument : public Argument {
public:
- StringArgument(Record &Arg, StringRef Attr)
+ StringArgument(const Record &Arg, StringRef Attr)
: Argument(Arg, Attr)
{}
@@ -374,7 +374,7 @@ namespace {
class AlignedArgument : public Argument {
public:
- AlignedArgument(Record &Arg, StringRef Attr)
+ AlignedArgument(const Record &Arg, StringRef Attr)
: Argument(Arg, Attr)
{}
@@ -507,7 +507,7 @@ namespace {
std::string Type, ArgName, ArgSizeName, RangeName;
public:
- VariadicArgument(Record &Arg, StringRef Attr, std::string T)
+ VariadicArgument(const Record &Arg, StringRef Attr, std::string T)
: Argument(Arg, Attr), Type(T), ArgName(getLowerName().str() + "_"),
ArgSizeName(ArgName + "Size"), RangeName(getLowerName()) {}
@@ -614,7 +614,7 @@ namespace {
std::string type;
std::vector<std::string> values, enums, uniques;
public:
- EnumArgument(Record &Arg, StringRef Attr)
+ EnumArgument(const Record &Arg, StringRef Attr)
: Argument(Arg, Attr), type(Arg.getValueAsString("Type")),
values(Arg.getValueAsListOfStrings("Values")),
enums(Arg.getValueAsListOfStrings("Enums")),
@@ -706,7 +706,7 @@ namespace {
std::string type, QualifiedTypeName;
std::vector<std::string> values, enums, uniques;
public:
- VariadicEnumArgument(Record &Arg, StringRef Attr)
+ VariadicEnumArgument(const Record &Arg, StringRef Attr)
: VariadicArgument(Arg, Attr, Arg.getValueAsString("Type")),
type(Arg.getValueAsString("Type")),
values(Arg.getValueAsListOfStrings("Values")),
@@ -786,7 +786,7 @@ namespace {
class VersionArgument : public Argument {
public:
- VersionArgument(Record &Arg, StringRef Attr)
+ VersionArgument(const Record &Arg, StringRef Attr)
: Argument(Arg, Attr)
{}
@@ -837,7 +837,7 @@ namespace {
class ExprArgument : public SimpleArgument {
public:
- ExprArgument(Record &Arg, StringRef Attr)
+ ExprArgument(const Record &Arg, StringRef Attr)
: SimpleArgument(Arg, Attr, "Expr *")
{}
@@ -874,7 +874,7 @@ namespace {
class VariadicExprArgument : public VariadicArgument {
public:
- VariadicExprArgument(Record &Arg, StringRef Attr)
+ VariadicExprArgument(const Record &Arg, StringRef Attr)
: VariadicArgument(Arg, Attr, "Expr *")
{}
@@ -936,7 +936,7 @@ namespace {
class TypeArgument : public SimpleArgument {
public:
- TypeArgument(Record &Arg, StringRef Attr)
+ TypeArgument(const Record &Arg, StringRef Attr)
: SimpleArgument(Arg, Attr, "TypeSourceInfo *")
{}
@@ -958,8 +958,9 @@ namespace {
};
}
-static std::unique_ptr<Argument> createArgument(Record &Arg, StringRef Attr,
- Record *Search = nullptr) {
+static std::unique_ptr<Argument>
+createArgument(const Record &Arg, StringRef Attr,
+ const Record *Search = nullptr) {
if (!Search)
Search = &Arg;
@@ -998,8 +999,8 @@ static std::unique_ptr<Argument> createA
if (!Ptr) {
// Search in reverse order so that the most-derived type is handled first.
std::vector<Record*> Bases = Search->getSuperClasses();
- for (auto i = Bases.rbegin(), e = Bases.rend(); i != e; ++i) {
- Ptr = createArgument(Arg, Attr, *i).release();
+ for (const auto *Base : llvm::make_range(Bases.rbegin(), Bases.rend())) {
+ Ptr = createArgument(Arg, Attr, Base).release();
if (Ptr)
break;
}
@@ -1148,7 +1149,7 @@ getSpellingListIndex(const std::vector<F
static void writeAttrAccessorDefinition(const Record &R, raw_ostream &OS) {
std::vector<Record*> Accessors = R.getValueAsListOfDefs("Accessors");
- for (auto Accessor : Accessors) {
+ for (const auto *Accessor : Accessors) {
std::string Name = Accessor->getValueAsString("Name");
std::vector<FlattenedSpelling> Spellings =
GetFlattenedSpellings(*Accessor);
@@ -1172,9 +1173,9 @@ SpellingNamesAreCommon(const std::vector
assert(!Spellings.empty() && "An empty list of spellings was provided");
std::string FirstName = NormalizeNameForSpellingComparison(
Spellings.front().name());
- for (auto I = std::next(Spellings.begin()), E = Spellings.end();
- I != E; ++I) {
- std::string Name = NormalizeNameForSpellingComparison(I->name());
+ for (const auto &Spelling :
+ llvm::make_range(std::next(Spellings.begin()), Spellings.end())) {
+ std::string Name = NormalizeNameForSpellingComparison(Spelling.name());
if (Name != FirstName)
return false;
}
@@ -1240,7 +1241,7 @@ static void emitClangAttrLateParsedList(
OS << "#if defined(CLANG_ATTR_LATE_PARSED_LIST)\n";
std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr");
- for (auto Attr : Attrs) {
+ for (const auto *Attr : Attrs) {
bool LateParsed = Attr->getValueAsBit("LateParsed");
if (LateParsed) {
@@ -1262,7 +1263,7 @@ static void emitClangAttrTypeArgList(Rec
OS << "#if defined(CLANG_ATTR_TYPE_ARG_LIST)\n";
std::vector<Record *> Attrs = Records.getAllDerivedDefinitions("Attr");
- for (auto Attr : Attrs) {
+ for (const auto *Attr : Attrs) {
// Determine whether the first argument is a type.
std::vector<Record *> Args = Attr->getValueAsListOfDefs("Args");
if (Args.empty())
@@ -1317,7 +1318,7 @@ static void emitClangAttrIdentifierArgLi
OS << "#if defined(CLANG_ATTR_IDENTIFIER_ARG_LIST)\n";
std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr");
- for (auto Attr : Attrs) {
+ for (const auto *Attr : Attrs) {
// Determine whether the first argument is an identifier.
std::vector<Record *> Args = Attr->getValueAsListOfDefs("Args");
if (Args.empty() || !isIdentifierArgument(Args[0]))
@@ -1345,8 +1346,8 @@ void EmitClangAttrClass(RecordKeeper &Re
std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr");
- for (auto i : Attrs) {
- const Record &R = *i;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
// FIXME: Currently, documentation is generated as-needed due to the fact
// that there is no way to allow a generated project "reach into" the docs
@@ -1365,8 +1366,8 @@ void EmitClangAttrClass(RecordKeeper &Re
const std::vector<Record *> Supers = R.getSuperClasses();
assert(!Supers.empty() && "Forgot to specify a superclass for the attr");
std::string SuperName;
- for (auto I = Supers.rbegin(), E = Supers.rend(); I != E; ++I) {
- const Record &R = **I;
+ for (const auto *Super : llvm::make_range(Supers.rbegin(), Supers.rend())) {
+ const Record &R = *Super;
if (R.getName() != "TargetSpecificAttr" && SuperName.empty())
SuperName = R.getName();
}
@@ -1377,7 +1378,7 @@ void EmitClangAttrClass(RecordKeeper &Re
std::vector<std::unique_ptr<Argument>> Args;
Args.reserve(ArgRecords.size());
- for (auto ArgRecord : ArgRecords) {
+ for (const auto *ArgRecord : ArgRecords) {
Args.emplace_back(createArgument(*ArgRecord, R.getName()));
Args.back()->writeDeclarations(OS);
OS << "\n\n";
@@ -1536,16 +1537,16 @@ void EmitClangAttrImpl(RecordKeeper &Rec
std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr");
- for (auto i : Attrs) {
- Record &R = *i;
+ for (auto *Attr : Attrs) {
+ Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
std::vector<Record*> ArgRecords = R.getValueAsListOfDefs("Args");
std::vector<std::unique_ptr<Argument>> Args;
- for (auto ri : ArgRecords)
- Args.emplace_back(createArgument(*ri, R.getName()));
+ for (const auto *Arg : ArgRecords)
+ Args.emplace_back(createArgument(*Arg, R.getName()));
for (auto const &ai : Args)
ai->writeAccessorDefinitions(OS);
@@ -1614,16 +1615,16 @@ void EmitClangAttrList(RecordKeeper &Rec
Record *InhParamClass = Records.getClass("InheritableParamAttr");
std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr"),
NonInhAttrs, InhAttrs, InhParamAttrs;
- for (auto i : Attrs) {
- if (!i->getValueAsBit("ASTNode"))
+ for (auto *Attr : Attrs) {
+ if (!Attr->getValueAsBit("ASTNode"))
continue;
- if (i->isSubClassOf(InhParamClass))
- InhParamAttrs.push_back(i);
- else if (i->isSubClassOf(InhClass))
- InhAttrs.push_back(i);
+ if (Attr->isSubClassOf(InhParamClass))
+ InhParamAttrs.push_back(Attr);
+ else if (Attr->isSubClassOf(InhClass))
+ InhAttrs.push_back(Attr);
else
- NonInhAttrs.push_back(i);
+ NonInhAttrs.push_back(Attr);
}
EmitAttrList(OS, "INHERITABLE_PARAM_ATTR", InhParamAttrs);
@@ -1650,8 +1651,8 @@ void EmitClangAttrPCHRead(RecordKeeper &
OS << " default:\n";
OS << " assert(0 && \"Unknown attribute!\");\n";
OS << " break;\n";
- for (auto i : Attrs) {
- const Record &R = *i;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
@@ -1662,8 +1663,8 @@ void EmitClangAttrPCHRead(RecordKeeper &
OS << " unsigned Spelling = Record[Idx++];\n";
ArgRecords = R.getValueAsListOfDefs("Args");
Args.clear();
- for (auto ai : ArgRecords) {
- Args.emplace_back(createArgument(*ai, R.getName()));
+ for (const auto *Arg : ArgRecords) {
+ Args.emplace_back(createArgument(*Arg, R.getName()));
Args.back()->writePCHReadDecls(OS);
}
OS << " New = new (Context) " << R.getName() << "Attr(Range, Context";
@@ -1692,8 +1693,8 @@ void EmitClangAttrPCHWrite(RecordKeeper
OS << " default:\n";
OS << " llvm_unreachable(\"Unknown attribute kind!\");\n";
OS << " break;\n";
- for (auto i : Attrs) {
- const Record &R = *i;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
OS << " case attr::" << R.getName() << ": {\n";
@@ -1706,8 +1707,8 @@ void EmitClangAttrPCHWrite(RecordKeeper
OS << " Record.push_back(A->isImplicit());\n";
OS << " Record.push_back(A->getSpellingListIndex());\n";
- for (auto ai : Args)
- createArgument(*ai, R.getName())->writePCHWrite(OS);
+ for (const auto *Arg : Args)
+ createArgument(*Arg, R.getName())->writePCHWrite(OS);
OS << " break;\n";
OS << " }\n";
}
@@ -1835,7 +1836,7 @@ void EmitClangAttrSpellingListIndex(Reco
ParsedAttrMap Attrs = getParsedAttrList(Records);
for (const auto &I : Attrs) {
- Record &R = *I.second;
+ const Record &R = *I.second;
std::vector<FlattenedSpelling> Spellings = GetFlattenedSpellings(R);
OS << " case AT_" << I.first << ": {\n";
for (unsigned I = 0; I < Spellings.size(); ++ I) {
@@ -1870,8 +1871,8 @@ void EmitClangAttrASTVisitor(RecordKeepe
// We emit this here because we only generate methods for attributes that
// are declared as ASTNodes.
OS << "#ifdef ATTR_VISITOR_DECLS_ONLY\n\n";
- for (auto I : Attrs) {
- const Record &R = *I;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
OS << " bool Traverse"
@@ -1884,8 +1885,8 @@ void EmitClangAttrASTVisitor(RecordKeepe
OS << "\n#else // ATTR_VISITOR_DECLS_ONLY\n\n";
// Write individual Traverse* methods for each attribute class.
- for (auto I : Attrs) {
- const Record &R = *I;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
@@ -1898,8 +1899,8 @@ void EmitClangAttrASTVisitor(RecordKeepe
<< " return false;\n";
std::vector<Record*> ArgRecords = R.getValueAsListOfDefs("Args");
- for (auto ri : ArgRecords)
- createArgument(*ri, R.getName())->writeASTVisitorTraversal(OS);
+ for (const auto *Arg : ArgRecords)
+ createArgument(*Arg, R.getName())->writeASTVisitorTraversal(OS);
OS << " return true;\n";
OS << "}\n\n";
@@ -1915,8 +1916,8 @@ void EmitClangAttrASTVisitor(RecordKeepe
<< " default:\n"
<< " return true;\n";
- for (auto I : Attrs) {
- const Record &R = *I;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
@@ -1944,8 +1945,8 @@ void EmitClangAttrTemplateInstantiate(Re
<< " default:\n"
<< " break;\n";
- for (auto I : Attrs) {
- const Record &R = *I;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
@@ -1972,7 +1973,7 @@ void EmitClangAttrTemplateInstantiate(Re
std::vector<std::unique_ptr<Argument>> Args;
Args.reserve(ArgRecords.size());
- for (auto ArgRecord : ArgRecords)
+ for (const auto *ArgRecord : ArgRecords)
Args.emplace_back(createArgument(*ArgRecord, R.getName()));
for (auto const &ai : Args)
@@ -2013,7 +2014,7 @@ static void emitArgInfo(const Record &R,
// number of optional arguments.
std::vector<Record *> Args = R.getValueAsListOfDefs("Args");
unsigned ArgCount = 0, OptCount = 0;
- for (auto Arg : Args) {
+ for (const auto *Arg : Args) {
Arg->getValueAsBit("Optional") ? ++OptCount : ++ArgCount;
}
OS << ArgCount << ", " << OptCount;
@@ -2054,8 +2055,8 @@ static std::string CalculateDiagnostic(c
uint32_t SubMask = 0;
std::vector<Record *> Subjects = S.getValueAsListOfDefs("Subjects");
- for (auto I : Subjects) {
- const Record &R = *I;
+ for (const auto *Subject : Subjects) {
+ const Record &R = *Subject;
std::string Name;
if (R.isSubClassOf("SubsetSubject")) {
@@ -2471,8 +2472,8 @@ void EmitClangAttrParsedAttrKinds(Record
std::vector<Record *> Attrs = Records.getAllDerivedDefinitions("Attr");
std::vector<StringMatcher::StringPair> GNU, Declspec, CXX11, Keywords;
std::set<std::string> Seen;
- for (auto I : Attrs) {
- const Record &Attr = *I;
+ for (const auto *A : Attrs) {
+ const Record &Attr = *A;
bool SemaHandler = Attr.getValueAsBit("SemaHandler");
bool Ignored = Attr.getValueAsBit("Ignored");
@@ -2551,8 +2552,8 @@ void EmitClangAttrDump(RecordKeeper &Rec
" llvm_unreachable(\"Unknown attribute kind!\");\n"
" break;\n";
std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr"), Args;
- for (auto I : Attrs) {
- const Record &R = *I;
+ for (const auto *Attr : Attrs) {
+ const Record &R = *Attr;
if (!R.getValueAsBit("ASTNode"))
continue;
OS << " case attr::" << R.getName() << ": {\n";
@@ -2568,8 +2569,8 @@ void EmitClangAttrDump(RecordKeeper &Rec
if (!Args.empty()) {
OS << " const " << R.getName() << "Attr *SA = cast<" << R.getName()
<< "Attr>(A);\n";
- for (auto AI : Args)
- createArgument(*AI, R.getName())->writeDump(OS);
+ for (const auto *Arg : Args)
+ createArgument(*Arg, R.getName())->writeDump(OS);
// Code for detecting the last child.
OS << " bool OldMoreChildren = hasMoreChildren();\n";
@@ -2777,11 +2778,11 @@ void EmitClangAttrDocs(RecordKeeper &Rec
// category provided.
std::vector<Record *> Attrs = Records.getAllDerivedDefinitions("Attr");
std::map<const Record *, std::vector<DocumentationData>> SplitDocs;
- for (auto I : Attrs) {
- const Record &Attr = *I;
+ for (const auto *A : Attrs) {
+ const Record &Attr = *A;
std::vector<Record *> Docs = Attr.getValueAsListOfDefs("Documentation");
- for (auto DI : Docs) {
- const Record &Doc = *DI;
+ for (const auto *D : Docs) {
+ const Record &Doc = *D;
const Record *Category = Doc.getValueAsDef("Category");
// If the category is "undocumented", then there cannot be any other
// documentation categories (otherwise, the attribute would become
More information about the cfe-commits
mailing list