forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- DiagnosticManager.cpp ---------------------------------------------===//
 | 
						|
//
 | 
						|
// 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 auto &diagnostic : Diagnostics()) {
 | 
						|
    ret.append(StringForSeverity(diagnostic->GetSeverity()));
 | 
						|
    ret.append(std::string(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;
 | 
						|
}
 | 
						|
 | 
						|
void DiagnosticManager::PutString(DiagnosticSeverity severity,
 | 
						|
                                  llvm::StringRef str) {
 | 
						|
  if (str.empty())
 | 
						|
    return;
 | 
						|
  AddDiagnostic(str, severity, eDiagnosticOriginLLDB);
 | 
						|
}
 |