aboutsummaryrefslogtreecommitdiff
path: root/include/clang
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-03-06 23:58:11 +0000
committerTed Kremenek <kremenek@apple.com>2009-03-06 23:58:11 +0000
commit1fbfd5b9b8b82aea084773b76dd1ec6796a7000c (patch)
treecd8e2f983c8ab1d321aa5f8b996d13e070f0f8ff /include/clang
parent177f708abadfca856b83f1c540c66667d167a4e8 (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.h43
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