summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorSamuel Benzaquen <sbenza@google.com>2013-07-19 20:02:35 +0000
committerSamuel Benzaquen <sbenza@google.com>2013-07-19 20:02:35 +0000
commitb837248ad46d12285c7166c9fb67db1604bdb1ad (patch)
treeaa1a406bc81145696c77babce06cfdb312229972 /clang/lib
parent569b8f83a4188048c910cf50050ea8c6ea31293f (diff)
downloadbcm5719-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.cpp74
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
OpenPOWER on IntegriCloud