diff options
author | Alp Toker <alp@nuanti.com> | 2014-07-06 04:26:52 +0000 |
---|---|---|
committer | Alp Toker <alp@nuanti.com> | 2014-07-06 04:26:52 +0000 |
commit | e62c5d94500d514bd3683e367cf4839d39ac7f22 (patch) | |
tree | 8ab58273d9db9ede8a0dd5537a0fd70ffb70d1e1 /lib/Frontend/LogDiagnosticPrinter.cpp | |
parent | ed779c533894a66911f4861a30a0cb1b54259c73 (diff) |
Use PlistSupport in a few more places
Switch over LogDiagnosticPrinter and introduce an integer helper.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212384 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/LogDiagnosticPrinter.cpp')
-rw-r--r-- | lib/Frontend/LogDiagnosticPrinter.cpp | 83 |
1 files changed, 35 insertions, 48 deletions
diff --git a/lib/Frontend/LogDiagnosticPrinter.cpp b/lib/Frontend/LogDiagnosticPrinter.cpp index 917c13feb7..19539e0a5e 100644 --- a/lib/Frontend/LogDiagnosticPrinter.cpp +++ b/lib/Frontend/LogDiagnosticPrinter.cpp @@ -10,11 +10,13 @@ #include "clang/Frontend/LogDiagnosticPrinter.h" #include "clang/Basic/DiagnosticOptions.h" #include "clang/Basic/FileManager.h" +#include "clang/Basic/PlistSupport.h" #include "clang/Basic/SourceManager.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" using namespace clang; +using namespace markup; LogDiagnosticPrinter::LogDiagnosticPrinter(raw_ostream &os, DiagnosticOptions *diags, @@ -40,19 +42,34 @@ static StringRef getLevelName(DiagnosticsEngine::Level Level) { llvm_unreachable("Invalid DiagnosticsEngine level!"); } -// Escape XML characters inside the raw string. -static void emitString(llvm::raw_svector_ostream &OS, const StringRef Raw) { - for (StringRef::iterator I = Raw.begin(), E = Raw.end(); I != E; ++I) { - char c = *I; - switch (c) { - default: OS << c; break; - case '&': OS << "&"; break; - case '<': OS << "<"; break; - case '>': OS << ">"; break; - case '\'': OS << "'"; break; - case '\"': OS << """; break; - } +void +LogDiagnosticPrinter::EmitDiagEntry(llvm::raw_ostream &OS, + const LogDiagnosticPrinter::DiagEntry &DE) { + OS << " <dict>\n"; + OS << " <key>level</key>\n" + << " "; + EmitString(OS, getLevelName(DE.DiagnosticLevel)) << '\n'; + if (!DE.Filename.empty()) { + OS << " <key>filename</key>\n" + << " "; + EmitString(OS, DE.Filename) << '\n'; + } + if (DE.Line != 0) { + OS << " <key>line</key>\n" + << " "; + EmitInteger(OS, DE.Line) << '\n'; + } + if (DE.Column != 0) { + OS << " <key>column</key>\n" + << " "; + EmitInteger(OS, DE.Column) << '\n'; } + if (!DE.Message.empty()) { + OS << " <key>message</key>\n" + << " "; + EmitString(OS, DE.Message) << '\n'; + } + OS << " </dict>\n"; } void LogDiagnosticPrinter::EndSourceFile() { @@ -72,48 +89,18 @@ void LogDiagnosticPrinter::EndSourceFile() { OS << "<dict>\n"; if (!MainFilename.empty()) { OS << " <key>main-file</key>\n" - << " <string>"; - emitString(OS, MainFilename); - OS << "</string>\n"; + << " "; + EmitString(OS, MainFilename) << '\n'; } if (!DwarfDebugFlags.empty()) { OS << " <key>dwarf-debug-flags</key>\n" - << " <string>"; - emitString(OS, DwarfDebugFlags); - OS << "</string>\n"; + << " "; + EmitString(OS, DwarfDebugFlags) << '\n'; } OS << " <key>diagnostics</key>\n"; OS << " <array>\n"; - for (unsigned i = 0, e = Entries.size(); i != e; ++i) { - DiagEntry &DE = Entries[i]; - - OS << " <dict>\n"; - OS << " <key>level</key>\n" - << " <string>"; - emitString(OS, getLevelName(DE.DiagnosticLevel)); - OS << "</string>\n"; - if (!DE.Filename.empty()) { - OS << " <key>filename</key>\n" - << " <string>"; - emitString(OS, DE.Filename); - OS << "</string>\n"; - } - if (DE.Line != 0) { - OS << " <key>line</key>\n" - << " <integer>" << DE.Line << "</integer>\n"; - } - if (DE.Column != 0) { - OS << " <key>column</key>\n" - << " <integer>" << DE.Column << "</integer>\n"; - } - if (!DE.Message.empty()) { - OS << " <key>message</key>\n" - << " <string>"; - emitString(OS, DE.Message); - OS << "</string>\n"; - } - OS << " </dict>\n"; - } + for (auto &DE : Entries) + EmitDiagEntry(OS, DE); OS << " </array>\n"; OS << "</dict>\n"; |