diff options
| author | Caitlin Sadowski <supertri@google.com> | 2011-09-08 17:40:49 +0000 |
|---|---|---|
| committer | Caitlin Sadowski <supertri@google.com> | 2011-09-08 17:40:49 +0000 |
| commit | f774712782d69d8affff56453f0bea30d9d591e4 (patch) | |
| tree | fb313324d4d133863876363c84d0902e0833ffb5 /llvm/utils | |
| parent | dc28ba12e1c0e09503607e3b092fca0ff91feec3 (diff) | |
| download | bcm5719-llvm-f774712782d69d8affff56453f0bea30d9d591e4.tar.gz bcm5719-llvm-f774712782d69d8affff56453f0bea30d9d591e4.zip | |
Added LateParsed property to TableGen attributes.
This patch was written by DeLesley Hutchins.
llvm-svn: 139300
Diffstat (limited to 'llvm/utils')
| -rw-r--r-- | llvm/utils/TableGen/ClangAttrEmitter.cpp | 23 | ||||
| -rw-r--r-- | llvm/utils/TableGen/ClangAttrEmitter.h | 13 | ||||
| -rw-r--r-- | llvm/utils/TableGen/TableGen.cpp | 7 |
3 files changed, 43 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/ClangAttrEmitter.cpp b/llvm/utils/TableGen/ClangAttrEmitter.cpp index 6ef25d9a3ac..e01f36442ad 100644 --- a/llvm/utils/TableGen/ClangAttrEmitter.cpp +++ b/llvm/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/llvm/utils/TableGen/ClangAttrEmitter.h b/llvm/utils/TableGen/ClangAttrEmitter.h index af870098a84..d6c00d6e23a 100644 --- a/llvm/utils/TableGen/ClangAttrEmitter.h +++ b/llvm/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/llvm/utils/TableGen/TableGen.cpp b/llvm/utils/TableGen/TableGen.cpp index 372c40b1a0c..4b0f91a873b 100644 --- a/llvm/utils/TableGen/TableGen.cpp +++ b/llvm/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; |

