diff options
-rw-r--r-- | include/clang/Basic/DiagnosticIDs.h | 19 | ||||
-rw-r--r-- | lib/Basic/DiagnosticIDs.cpp | 29 |
2 files changed, 48 insertions, 0 deletions
diff --git a/include/clang/Basic/DiagnosticIDs.h b/include/clang/Basic/DiagnosticIDs.h index 8bbb1610c0..e9a38c14c5 100644 --- a/include/clang/Basic/DiagnosticIDs.h +++ b/include/clang/Basic/DiagnosticIDs.h @@ -195,6 +195,25 @@ public: /// getFullExplanation - Given a diagnostic ID, return a full explanation /// of the issue static StringRef getFullExplanation(unsigned DiagID); + + /// Iterator class used for traversing all statically declared + /// diagnostics. + class diag_iterator { + const void *impl; + + friend class DiagnosticIDs; + diag_iterator(const void *im) : impl(im) {}; + public: + diag_iterator &operator++(); + bool operator==(const diag_iterator &x) const { return impl == x.impl; } + bool operator!=(const diag_iterator &x) const { return impl != x.impl; } + + llvm::StringRef getDiagName() const; + unsigned getDiagID() const; + }; + + static diag_iterator diags_begin(); + static diag_iterator diags_end(); private: /// setDiagnosticGroupMapping - Change an entire diagnostic group (e.g. diff --git a/lib/Basic/DiagnosticIDs.cpp b/lib/Basic/DiagnosticIDs.cpp index 35b9605e16..66b16a9ba1 100644 --- a/lib/Basic/DiagnosticIDs.cpp +++ b/lib/Basic/DiagnosticIDs.cpp @@ -305,6 +305,35 @@ static unsigned getBuiltinDiagClass(unsigned DiagID) { } //===----------------------------------------------------------------------===// +// diag_iterator +//===----------------------------------------------------------------------===// + +llvm::StringRef DiagnosticIDs::diag_iterator::getDiagName() const { + return static_cast<const StaticDiagNameIndexRec*>(impl)->getName(); +} + +unsigned DiagnosticIDs::diag_iterator::getDiagID() const { + return static_cast<const StaticDiagNameIndexRec*>(impl)->DiagID; +} + +DiagnosticIDs::diag_iterator &DiagnosticIDs::diag_iterator::operator++() { + const StaticDiagNameIndexRec* ptr = + static_cast<const StaticDiagNameIndexRec*>(impl);; + ++ptr; + impl = ptr; + return *this; +} + +DiagnosticIDs::diag_iterator DiagnosticIDs::diags_begin() { + return DiagnosticIDs::diag_iterator(StaticDiagNameIndex); +} + +DiagnosticIDs::diag_iterator DiagnosticIDs::diags_end() { + return DiagnosticIDs::diag_iterator(StaticDiagNameIndex + + StaticDiagNameIndexSize); +} + +//===----------------------------------------------------------------------===// // Custom Diagnostic information //===----------------------------------------------------------------------===// |