From: Ted Kremenek Date: Thu, 26 Feb 2009 21:30:32 +0000 (+0000) Subject: PathDiagnosticPiece now automatically strips off trailing periods in diagnostic messages. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8af2975d50270813ae6366d007e9e1f5b65ddc68;p=clang PathDiagnosticPiece now automatically strips off trailing periods in diagnostic messages. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65574 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h index cee11c27b5..a77ff66001 100644 --- a/include/clang/Analysis/PathDiagnostic.h +++ b/include/clang/Analysis/PathDiagnostic.h @@ -29,21 +29,19 @@ public: enum DisplayHint { Above, Below }; private: - FullSourceLoc Pos; - std::string str; + const FullSourceLoc Pos; + const std::string str; std::vector CodeModificationHints; - DisplayHint Hint; + const DisplayHint Hint; std::vector ranges; public: PathDiagnosticPiece(FullSourceLoc pos, const std::string& s, - DisplayHint hint = Above) - : Pos(pos), str(s), Hint(hint) {} + DisplayHint hint = Above); PathDiagnosticPiece(FullSourceLoc pos, const char* s, - DisplayHint hint = Above) - : Pos(pos), str(s), Hint(hint) {} + DisplayHint hint = Above); const std::string& getString() const { return str; } diff --git a/lib/Analysis/PathDiagnostic.cpp b/lib/Analysis/PathDiagnostic.cpp index 50ff523b81..d1120ef2d1 100644 --- a/lib/Analysis/PathDiagnostic.cpp +++ b/lib/Analysis/PathDiagnostic.cpp @@ -15,7 +15,34 @@ #include "llvm/ADT/SmallString.h" #include using namespace clang; + +static size_t GetNumCharsToLastNonPeriod(const char *s) { + const char *start = s; + const char *lastNonPeriod = 0; + + for ( ; *s != '\0' ; ++s) + if (*s != '.') lastNonPeriod = s; + + if (!lastNonPeriod) + return 0; + return (lastNonPeriod - start) + 1; +} + +static inline size_t GetNumCharsToLastNonPeriod(const std::string &s) { + return s.empty () ? 0 : GetNumCharsToLastNonPeriod(&s[0]); +} + +PathDiagnosticPiece::PathDiagnosticPiece(FullSourceLoc pos, + const std::string& s, + DisplayHint hint) + : Pos(pos), str(s, 0, GetNumCharsToLastNonPeriod(s)), Hint(hint) {} + +PathDiagnosticPiece::PathDiagnosticPiece(FullSourceLoc pos, + const char* s, + DisplayHint hint) + : Pos(pos), str(s, GetNumCharsToLastNonPeriod(s)), Hint(hint) {} + PathDiagnostic::~PathDiagnostic() { for (iterator I = begin(), E = end(); I != E; ++I) delete &*I; }