From: Ted Kremenek Date: Fri, 6 Mar 2009 23:21:37 +0000 (+0000) Subject: Re-order contents of file. No functionality change. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d3dee9f9deda0dbe8e71d4228322ed82da70ff7;p=clang Re-order contents of file. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66304 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h index 731bb74422..61c6a4094c 100644 --- a/include/clang/Analysis/PathDiagnostic.h +++ b/include/clang/Analysis/PathDiagnostic.h @@ -24,98 +24,30 @@ namespace clang { -class PathDiagnosticPiece { -public: - enum Kind { ControlFlow, Event, Macro }; - enum DisplayHint { Above, Below }; +//===----------------------------------------------------------------------===// +// High-level interface for handlers of path-sensitive diagnostics. +//===----------------------------------------------------------------------===// -private: - const FullSourceLoc Pos; - const std::string str; - std::vector CodeModificationHints; - const Kind kind; - const DisplayHint Hint; - std::vector ranges; - std::vector SubPieces; - // Do not implement: - PathDiagnosticPiece(); - PathDiagnosticPiece(const PathDiagnosticPiece &P); - PathDiagnosticPiece& operator=(const PathDiagnosticPiece &P); +class PathDiagnostic; +class PathDiagnosticClient : public DiagnosticClient { public: - 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); - - virtual ~PathDiagnosticPiece(); - - const std::string& getString() const { return str; } - - /// getDisplayHint - Return a hint indicating where the diagnostic should - /// be displayed by the PathDiagnosticClient. - DisplayHint getDisplayHint() const { return Hint; } - - Kind getKind() const { return kind; } - - void addRange(SourceRange R) { ranges.push_back(R); } + PathDiagnosticClient() {} + virtual ~PathDiagnosticClient() {} - void addRange(SourceLocation B, SourceLocation E) { - ranges.push_back(SourceRange(B,E)); - } + virtual void HandleDiagnostic(Diagnostic::Level DiagLevel, + const DiagnosticInfo &Info); - void addCodeModificationHint(const CodeModificationHint& Hint) { - CodeModificationHints.push_back(Hint); - } - - typedef const SourceRange* range_iterator; + virtual void HandlePathDiagnostic(const PathDiagnostic* D) = 0; +}; - range_iterator ranges_begin() const { - return ranges.empty() ? NULL : &ranges[0]; - } +//===----------------------------------------------------------------------===// +// Path-sensitive diagnostics. +//===----------------------------------------------------------------------===// - range_iterator ranges_end() const { - return ranges_begin() + ranges.size(); - } - - typedef const CodeModificationHint *code_modifications_iterator; - - code_modifications_iterator code_modifications_begin() const { - return CodeModificationHints.empty()? 0 : &CodeModificationHints[0]; - } - - code_modifications_iterator code_modifications_end() const { - return CodeModificationHints.empty()? 0 - : &CodeModificationHints[0] + CodeModificationHints.size(); - } +class PathDiagnosticPiece; - const SourceManager& getSourceManager() const { - return Pos.getManager(); - } - - FullSourceLoc getLocation() const { return Pos; } -}; - -class PathDiagnosticMacroPiece : public PathDiagnosticPiece { - std::vector SubPieces; -public: - PathDiagnosticMacroPiece(FullSourceLoc pos, const std::string& s) - : PathDiagnosticPiece(pos, s, Macro) {} - - PathDiagnosticMacroPiece(FullSourceLoc pos, const char* s) - : PathDiagnosticPiece(pos, s, Macro) {} - - ~PathDiagnosticMacroPiece(); - - void push_back(PathDiagnosticPiece* P) { SubPieces.push_back(P); } - - typedef std::vector::iterator iterator; - iterator begin() { return SubPieces.begin(); } - iterator end() { return SubPieces.end(); } -}; - class PathDiagnostic { std::list path; unsigned Size; @@ -131,9 +63,9 @@ public: PathDiagnostic(const std::string& bugtype, const std::string& desc, const std::string& category); - + ~PathDiagnostic(); - + const std::string& getDescription() const { return Desc; } const std::string& getBugType() const { return BugType; } const std::string& getCategory() const { return Category; } @@ -203,7 +135,7 @@ public: private: ImplTy I; - + public: const_iterator(const ImplTy& i) : I(i) {} @@ -216,13 +148,13 @@ public: const_iterator& operator++() { ++I; return *this; } const_iterator& operator--() { --I; return *this; } }; - + typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; - - + + // forward iterator creation methods. - + iterator begin() { return path.begin(); } iterator end() { return path.end(); } @@ -235,16 +167,101 @@ public: reverse_iterator rend() { return reverse_iterator(begin()); } const_reverse_iterator rend() const { return const_reverse_iterator(begin());} }; + +//===----------------------------------------------------------------------===// +// Path "pieces" for path-sensitive diagnostics. +//===----------------------------------------------------------------------===// + +class PathDiagnosticPiece { +public: + enum Kind { ControlFlow, Event, Macro }; + enum DisplayHint { Above, Below }; + +private: + const FullSourceLoc Pos; + const std::string str; + std::vector CodeModificationHints; + const Kind kind; + const DisplayHint Hint; + std::vector ranges; + std::vector SubPieces; + + // Do not implement: + PathDiagnosticPiece(); + PathDiagnosticPiece(const PathDiagnosticPiece &P); + PathDiagnosticPiece& operator=(const PathDiagnosticPiece &P); -class PathDiagnosticClient : public DiagnosticClient { public: - PathDiagnosticClient() {} - virtual ~PathDiagnosticClient() {} - - virtual void HandleDiagnostic(Diagnostic::Level DiagLevel, - const DiagnosticInfo &Info); + 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); + + virtual ~PathDiagnosticPiece(); + + const std::string& getString() const { return str; } + + /// getDisplayHint - Return a hint indicating where the diagnostic should + /// be displayed by the PathDiagnosticClient. + DisplayHint getDisplayHint() const { return Hint; } + + Kind getKind() const { return kind; } + + void addRange(SourceRange R) { ranges.push_back(R); } + + void addRange(SourceLocation B, SourceLocation E) { + ranges.push_back(SourceRange(B,E)); + } + + void addCodeModificationHint(const CodeModificationHint& Hint) { + CodeModificationHints.push_back(Hint); + } + + typedef const SourceRange* range_iterator; + + range_iterator ranges_begin() const { + return ranges.empty() ? NULL : &ranges[0]; + } + + range_iterator ranges_end() const { + return ranges_begin() + ranges.size(); + } + + typedef const CodeModificationHint *code_modifications_iterator; + + code_modifications_iterator code_modifications_begin() const { + return CodeModificationHints.empty()? 0 : &CodeModificationHints[0]; + } + + code_modifications_iterator code_modifications_end() const { + return CodeModificationHints.empty()? 0 + : &CodeModificationHints[0] + CodeModificationHints.size(); + } + + const SourceManager& getSourceManager() const { + return Pos.getManager(); + } - virtual void HandlePathDiagnostic(const PathDiagnostic* D) = 0; + FullSourceLoc getLocation() const { return Pos; } +}; + +class PathDiagnosticMacroPiece : public PathDiagnosticPiece { + std::vector SubPieces; +public: + PathDiagnosticMacroPiece(FullSourceLoc pos, const std::string& s) + : PathDiagnosticPiece(pos, s, Macro) {} + + PathDiagnosticMacroPiece(FullSourceLoc pos, const char* s) + : PathDiagnosticPiece(pos, s, Macro) {} + + ~PathDiagnosticMacroPiece(); + + void push_back(PathDiagnosticPiece* P) { SubPieces.push_back(P); } + + typedef std::vector::iterator iterator; + iterator begin() { return SubPieces.begin(); } + iterator end() { return SubPieces.end(); } }; } //end clang namespace