diff options
author | Samuel Benzaquen <sbenza@google.com> | 2013-07-19 20:02:35 +0000 |
---|---|---|
committer | Samuel Benzaquen <sbenza@google.com> | 2013-07-19 20:02:35 +0000 |
commit | b837248ad46d12285c7166c9fb67db1604bdb1ad (patch) | |
tree | aa1a406bc81145696c77babce06cfdb312229972 /clang/lib | |
parent | 569b8f83a4188048c910cf50050ea8c6ea31293f (diff) | |
download | bcm5719-llvm-b837248ad46d12285c7166c9fb67db1604bdb1ad.tar.gz bcm5719-llvm-b837248ad46d12285c7166c9fb67db1604bdb1ad.zip |
Add support for raw_ostream on the printing methods of Diagnostics.
Summary:
Add printToStream*(llvm::raw_ostream&) methods to Diagnostics, and reimplement everything based on streams instead of concatenating strings.
Also, fix some functions to start with lowercase to match the style guide.
Reviewers: klimek
CC: cfe-commits, revane
Differential Revision: http://llvm-reviews.chandlerc.com/D1187
llvm-svn: 186715
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/ASTMatchers/Dynamic/Diagnostics.cpp | 74 |
1 files changed, 42 insertions, 32 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Diagnostics.cpp b/clang/lib/ASTMatchers/Dynamic/Diagnostics.cpp index 71aeb9a7540..b72910e0ac4 100644 --- a/clang/lib/ASTMatchers/Dynamic/Diagnostics.cpp +++ b/clang/lib/ASTMatchers/Dynamic/Diagnostics.cpp @@ -55,7 +55,7 @@ Diagnostics::ArgStream Diagnostics::addError(const SourceRange &Range, return ArgStream(&Last.Args); } -StringRef ContextTypeToString(Diagnostics::ContextType Type) { +StringRef contextTypeToFormatString(Diagnostics::ContextType Type) { switch (Type) { case Diagnostics::CT_MatcherConstruct: return "Error building matcher $0."; @@ -65,7 +65,7 @@ StringRef ContextTypeToString(Diagnostics::ContextType Type) { llvm_unreachable("Unknown ContextType value."); } -StringRef ErrorTypeToString(Diagnostics::ErrorType Type) { +StringRef errorTypeToFormatString(Diagnostics::ErrorType Type) { switch (Type) { case Diagnostics::ET_RegistryNotFound: return "Matcher not found: $0"; @@ -105,12 +105,11 @@ StringRef ErrorTypeToString(Diagnostics::ErrorType Type) { llvm_unreachable("Unknown ErrorType value."); } -std::string FormatErrorString(StringRef FormatString, - ArrayRef<std::string> Args) { - std::string Out; +void formatErrorString(StringRef FormatString, ArrayRef<std::string> Args, + llvm::raw_ostream &OS) { while (!FormatString.empty()) { std::pair<StringRef, StringRef> Pieces = FormatString.split("$"); - Out += Pieces.first.str(); + OS << Pieces.first.str(); if (Pieces.second.empty()) break; const char Next = Pieces.second.front(); @@ -118,53 +117,64 @@ std::string FormatErrorString(StringRef FormatString, if (Next >= '0' && Next <= '9') { const unsigned Index = Next - '0'; if (Index < Args.size()) { - Out += Args[Index]; + OS << Args[Index]; } else { - Out += "<Argument_Not_Provided>"; + OS << "<Argument_Not_Provided>"; } } } - return Out; } -static std::string MaybeAddLineAndColumn(Twine Input, - const SourceRange &Range) { - if (Range.Start.Line > 0 && Range.Start.Column > 0) - return (Twine(Range.Start.Line) + ":" + Twine(Range.Start.Column) + ": " + - Input).str(); - return Input.str(); +static void maybeAddLineAndColumn(const SourceRange &Range, + llvm::raw_ostream &OS) { + if (Range.Start.Line > 0 && Range.Start.Column > 0) { + OS << Range.Start.Line << ":" << Range.Start.Column << ": "; + } } -std::string Diagnostics::ContextFrame::ToString() const { - return MaybeAddLineAndColumn( - FormatErrorString(ContextTypeToString(Type), Args), Range); +static void printContextFrameToStream(const Diagnostics::ContextFrame &Frame, + llvm::raw_ostream &OS) { + maybeAddLineAndColumn(Frame.Range, OS); + formatErrorString(contextTypeToFormatString(Frame.Type), Frame.Args, OS); } -std::string Diagnostics::ErrorContent::ToString() const { - return MaybeAddLineAndColumn(FormatErrorString(ErrorTypeToString(Type), Args), - Range); +static void printErrorContentToStream(const Diagnostics::ErrorContent &Content, + llvm::raw_ostream &OS) { + maybeAddLineAndColumn(Content.Range, OS); + formatErrorString(errorTypeToFormatString(Content.Type), Content.Args, OS); } -std::string Diagnostics::ToString() const { - std::string Result; +void Diagnostics::printToStream(llvm::raw_ostream &OS) const { for (size_t i = 0, e = Errors.size(); i != e; ++i) { - if (i != 0) Result += "\n"; - Result += Errors[i].ToString(); + if (i != 0) OS << "\n"; + printErrorContentToStream(Errors[i], OS); } - return Result; } -std::string Diagnostics::ToStringFull() const { - std::string Result; +std::string Diagnostics::toString() const { + std::string S; + llvm::raw_string_ostream OS(S); + printToStream(OS); + return OS.str(); +} + +void Diagnostics::printToStreamFull(llvm::raw_ostream &OS) const { for (size_t i = 0, e = Errors.size(); i != e; ++i) { - if (i != 0) Result += "\n"; + if (i != 0) OS << "\n"; const ErrorContent &Error = Errors[i]; for (size_t i = 0, e = Error.ContextStack.size(); i != e; ++i) { - Result += Error.ContextStack[i].ToString() + "\n"; + printContextFrameToStream(Error.ContextStack[i], OS); + OS << "\n"; } - Result += Error.ToString(); + printErrorContentToStream(Error, OS); } - return Result; +} + +std::string Diagnostics::toStringFull() const { + std::string S; + llvm::raw_string_ostream OS(S); + printToStreamFull(OS); + return OS.str(); } } // namespace dynamic |