Added LateParsed property to TableGen attributes.
authorCaitlin Sadowski <supertri@google.com>
Thu, 8 Sep 2011 17:40:49 +0000 (17:40 +0000)
committerCaitlin Sadowski <supertri@google.com>
Thu, 8 Sep 2011 17:40:49 +0000 (17:40 +0000)
This patch was written by DeLesley Hutchins.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139300 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/ClangAttrEmitter.cpp
utils/TableGen/ClangAttrEmitter.h
utils/TableGen/TableGen.cpp

index 6ef25d9a3ac4ab080e5ce132a5d622f834300009..e01f36442ad2ef0adab96c8342b4ea298bb1795e 100644 (file)
@@ -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";
+      }
+    }
+  }
+}
index af870098a842f42fa66a90525b90ae3fe43b662f..d6c00d6e23aa639a986951c1f2929cdaeaa2a4d2 100644 (file)
@@ -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
index 372c40b1a0ca374a23ca09193d3fa9f5ab47966a..4b0f91a873b6d481f667a08d011a7dae045605b4 100644 (file)
@@ -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;