aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/LogDiagnosticPrinter.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2011-04-07 18:44:15 +0000
committerDaniel Dunbar <daniel@zuster.org>2011-04-07 18:44:15 +0000
commit5dccf575ad0b45a268d4026047234a6872440c95 (patch)
tree5c7f0430037438de4ef5e05fd7bb60606d9e129e /lib/Frontend/LogDiagnosticPrinter.cpp
parent64bfbf573e625c04abc3d40faa9b695fe21ebdbb (diff)
Fronted/CC_LOG_DIAGNOSTICS: Tweak output form to be plist chunks, and don't
output missing data. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129093 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/LogDiagnosticPrinter.cpp')
-rw-r--r--lib/Frontend/LogDiagnosticPrinter.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/lib/Frontend/LogDiagnosticPrinter.cpp b/lib/Frontend/LogDiagnosticPrinter.cpp
index ca661a6af7..9eee843dbe 100644
--- a/lib/Frontend/LogDiagnosticPrinter.cpp
+++ b/lib/Frontend/LogDiagnosticPrinter.cpp
@@ -52,23 +52,37 @@ void LogDiagnosticPrinter::EndSourceFile() {
llvm::SmallString<512> Msg;
llvm::raw_svector_ostream OS(Msg);
- OS << "{\n";
+ OS << "<dict>\n";
// FIXME: Output main translation unit file name.
// FIXME: Include the invocation, if dwarf-debug-flags is available.
- OS << " \"diagnostics\" : [\n";
+ OS << " <key>diagnostics</key>\n";
+ OS << " <array>\n";
for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
DiagEntry &DE = Entries[i];
- OS << " {\n";
- OS << " \"filename\" : \"" << DE.Filename << "\",\n";
- OS << " \"line\" : " << DE.Line << ",\n";
- OS << " \"column\" : " << DE.Column << ",\n";
- OS << " \"message\" : \"" << DE.Message << "\",\n";
- OS << " \"level\" : \"" << getLevelName(DE.DiagnosticLevel) << "\"\n";
- OS << " }" << ((i + 1 != e) ? "," : "") << '\n';
+ OS << " <dict>\n";
+ OS << " <key>level</key>\n"
+ << " <string>" << getLevelName(DE.DiagnosticLevel) << "</string>\n";
+ if (!DE.Filename.empty()) {
+ OS << " <key>filename</key>\n"
+ << " <string>" << DE.Filename << "</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>" << DE.Message << "</string>\n";
+ }
+ OS << " </dict>\n";
}
- OS << " ]\n";
- OS << "},\n";
+ OS << " </array>\n";
+ OS << "</dict>\n";
this->OS << OS.str();
}