diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-03-06 23:58:11 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-03-06 23:58:11 +0000 |
commit | 1fbfd5b9b8b82aea084773b76dd1ec6796a7000c (patch) | |
tree | cd8e2f983c8ab1d321aa5f8b996d13e070f0f8ff /include/clang | |
parent | 177f708abadfca856b83f1c540c66667d167a4e8 (diff) |
Create PathDiagnosticPiece subclasses PathDiagnosticEventPiece and
PathDiagnosticControlFlowPiece to distinguish (in the class hierarchy) between
events and control-flow diagnostic pieces. Clients must now use these directly
when constructing PathDiagnosticPieces.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66310 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang')
-rw-r--r-- | include/clang/Analysis/PathDiagnostic.h | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h index 61c6a4094c..d5fa0a2192 100644 --- a/include/clang/Analysis/PathDiagnostic.h +++ b/include/clang/Analysis/PathDiagnostic.h @@ -190,14 +190,15 @@ private: PathDiagnosticPiece(); PathDiagnosticPiece(const PathDiagnosticPiece &P); PathDiagnosticPiece& operator=(const PathDiagnosticPiece &P); - -public: + +protected: PathDiagnosticPiece(FullSourceLoc pos, const std::string& s, Kind k = Event, DisplayHint hint = Below); PathDiagnosticPiece(FullSourceLoc pos, const char* s, Kind k = Event, DisplayHint hint = Below); +public: virtual ~PathDiagnosticPiece(); const std::string& getString() const { return str; } @@ -244,6 +245,40 @@ public: } FullSourceLoc getLocation() const { return Pos; } + + static inline bool classof(const PathDiagnosticPiece* P) { + return true; + } +}; + +class PathDiagnosticEventPiece : public PathDiagnosticPiece { +public: + PathDiagnosticEventPiece(FullSourceLoc pos, const std::string& s) + : PathDiagnosticPiece(pos, s, Event) {} + + PathDiagnosticEventPiece(FullSourceLoc pos, const char* s) + : PathDiagnosticPiece(pos, s, Event) {} + + ~PathDiagnosticEventPiece(); + + static inline bool classof(const PathDiagnosticPiece* P) { + return P->getKind() == Event; + } +}; + +class PathDiagnosticControlFlowPiece : public PathDiagnosticPiece { +public: + PathDiagnosticControlFlowPiece(FullSourceLoc pos, const std::string& s) + : PathDiagnosticPiece(pos, s, Event) {} + + PathDiagnosticControlFlowPiece(FullSourceLoc pos, const char* s) + : PathDiagnosticPiece(pos, s, Event) {} + + ~PathDiagnosticControlFlowPiece(); + + static inline bool classof(const PathDiagnosticPiece* P) { + return P->getKind() == ControlFlow; + } }; class PathDiagnosticMacroPiece : public PathDiagnosticPiece { @@ -262,6 +297,10 @@ public: typedef std::vector<PathDiagnosticPiece*>::iterator iterator; iterator begin() { return SubPieces.begin(); } iterator end() { return SubPieces.end(); } + + static inline bool classof(const PathDiagnosticPiece* P) { + return P->getKind() == Macro; + } }; } //end clang namespace |