Files
clang-p2996/lldb/source/Expression/DiagnosticManager.cpp
Raphael Isemann 822c58704b [lldb][NFC] Remove DiagnosticManager::CopyDiagnostics
The Diagnostic class in LLDB is suppossed to be inherited from,
so just copying the diagnostics like this is wrong. The function
is also unused, so lets just get rid of it instead of creating
some cloning facility for it.

llvm-svn: 367201
2019-07-29 07:37:17 +00:00

80 lines
2.1 KiB
C++

//===-- DiagnosticManager.cpp -----------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/Expression/DiagnosticManager.h"
#include "llvm/Support/ErrorHandling.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/StreamString.h"
using namespace lldb_private;
void DiagnosticManager::Dump(Log *log) {
if (!log)
return;
std::string str = GetString();
// GetString() puts a separator after each diagnostic. We want to remove the
// last '\n' because log->PutCString will add one for us.
if (str.size() && str.back() == '\n') {
str.pop_back();
}
log->PutCString(str.c_str());
}
static const char *StringForSeverity(DiagnosticSeverity severity) {
switch (severity) {
// this should be exhaustive
case lldb_private::eDiagnosticSeverityError:
return "error: ";
case lldb_private::eDiagnosticSeverityWarning:
return "warning: ";
case lldb_private::eDiagnosticSeverityRemark:
return "";
}
llvm_unreachable("switch needs another case for DiagnosticSeverity enum");
}
std::string DiagnosticManager::GetString(char separator) {
std::string ret;
for (const Diagnostic *diagnostic : Diagnostics()) {
ret.append(StringForSeverity(diagnostic->GetSeverity()));
ret.append(diagnostic->GetMessage());
ret.push_back(separator);
}
return ret;
}
size_t DiagnosticManager::Printf(DiagnosticSeverity severity,
const char *format, ...) {
StreamString ss;
va_list args;
va_start(args, format);
size_t result = ss.PrintfVarArg(format, args);
va_end(args);
AddDiagnostic(ss.GetString(), severity, eDiagnosticOriginLLDB);
return result;
}
size_t DiagnosticManager::PutString(DiagnosticSeverity severity,
llvm::StringRef str) {
if (str.empty())
return 0;
AddDiagnostic(str, severity, eDiagnosticOriginLLDB);
return str.size();
}