summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorCaitlin Sadowski <supertri@google.com>2011-09-08 17:40:49 +0000
committerCaitlin Sadowski <supertri@google.com>2011-09-08 17:40:49 +0000
commit5d97ee31bb6ba2b72e2bef862ec7c07729447cc0 (patch)
tree15d325190b912b987f4e7d1dcd26cad182cd517d /utils
parent9ea33b0c03e5c0a66b9d8385e164362b186513b1 (diff)
downloadllvm-5d97ee31bb6ba2b72e2bef862ec7c07729447cc0.tar.gz
llvm-5d97ee31bb6ba2b72e2bef862ec7c07729447cc0.tar.bz2
llvm-5d97ee31bb6ba2b72e2bef862ec7c07729447cc0.tar.xz
Added LateParsed property to TableGen attributes.
This patch was written by DeLesley Hutchins. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139300 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/ClangAttrEmitter.cpp23
-rw-r--r--utils/TableGen/ClangAttrEmitter.h13
-rw-r--r--utils/TableGen/TableGen.cpp7
3 files changed, 43 insertions, 0 deletions
diff --git a/utils/TableGen/ClangAttrEmitter.cpp b/utils/TableGen/ClangAttrEmitter.cpp
index 6ef25d9a3a..e01f36442a 100644
--- a/utils/TableGen/ClangAttrEmitter.cpp
+++ b/utils/TableGen/ClangAttrEmitter.cpp
@@ -758,3 +758,26 @@ void ClangAttrSpellingListEmitter::run(raw_ostream &OS) {
}
}
+
+void ClangAttrLateParsedListEmitter::run(raw_ostream &OS) {
+ OS << "// This file is generated by TableGen. Do not edit.\n\n";
+
+ std::vector<Record*> Attrs = Records.getAllDerivedDefinitions("Attr");
+
+ for (std::vector<Record*>::iterator I = Attrs.begin(), E = Attrs.end();
+ I != E; ++I) {
+ Record &Attr = **I;
+
+ bool LateParsed = Attr.getValueAsBit("LateParsed");
+
+ if (LateParsed) {
+ std::vector<StringRef> Spellings =
+ getValueAsListOfStrings(Attr, "Spellings");
+
+ for (std::vector<StringRef>::const_iterator I = Spellings.begin(),
+ E = Spellings.end(); I != E; ++I) {
+ OS << ".Case(\"" << (*I) << "\", " << LateParsed << ")\n";
+ }
+ }
+ }
+}
diff --git a/utils/TableGen/ClangAttrEmitter.h b/utils/TableGen/ClangAttrEmitter.h
index af870098a8..d6c00d6e23 100644
--- a/utils/TableGen/ClangAttrEmitter.h
+++ b/utils/TableGen/ClangAttrEmitter.h
@@ -96,6 +96,19 @@ class ClangAttrSpellingListEmitter : public TableGenBackend {
void run(raw_ostream &OS);
};
+/// ClangAttrLateParsedListEmitter emits the LateParsed property for attributes
+/// for clang.
+class ClangAttrLateParsedListEmitter : public TableGenBackend {
+ RecordKeeper &Records;
+
+ public:
+ explicit ClangAttrLateParsedListEmitter(RecordKeeper &R)
+ : Records(R)
+ {}
+
+ void run(raw_ostream &OS);
+};
+
}
#endif
diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp
index 372c40b1a0..4b0f91a873 100644
--- a/utils/TableGen/TableGen.cpp
+++ b/utils/TableGen/TableGen.cpp
@@ -68,6 +68,7 @@ enum ActionType {
GenClangAttrPCHRead,
GenClangAttrPCHWrite,
GenClangAttrSpellingList,
+ GenClangAttrLateParsedList,
GenClangDiagsDefs,
GenClangDiagGroups,
GenClangDiagsIndexName,
@@ -139,6 +140,9 @@ namespace {
clEnumValN(GenClangAttrSpellingList,
"gen-clang-attr-spelling-list",
"Generate a clang attribute spelling list"),
+ clEnumValN(GenClangAttrLateParsedList,
+ "gen-clang-attr-late-parsed-list",
+ "Generate a clang attribute LateParsed list"),
clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
"Generate Clang diagnostics definitions"),
clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
@@ -296,6 +300,9 @@ int main(int argc, char **argv) {
case GenClangAttrSpellingList:
ClangAttrSpellingListEmitter(Records).run(Out.os());
break;
+ case GenClangAttrLateParsedList:
+ ClangAttrLateParsedListEmitter(Records).run(Out.os());
+ break;
case GenClangDiagsDefs:
ClangDiagsDefsEmitter(Records, ClangComponent).run(Out.os());
break;